smartdrive#

Introducción#

La smartdrive clase smartdrive controla cómo un robot conduce y gira utilizando motores, ruedas y un sensor. Una smartdrive puede usar un sensor inercial o un sensor giroscópico para rastrear el rumbo y la rotación.

Una smartdrive inteligente utiliza el sensor para ayudar al robot a moverse y girar con precisión. Al inicio de cada proyecto, la transmisión calibra el sensor automáticamente. Mantenga el robot quieto durante unos 2 segundos durante la calibración, para que el robot pueda moverse y girar correctamente.

La smartdrive clase de unidad inteligente se basa en la clase drivetrain. Puede usar las mismas funciones de accionamiento y giro que drivetrain, y también agrega funciones basadas en sensores como turnToHeading y turnToRotation.

Constructores de clase#

1 — Crea una unidad inteligente utilizando objetos motor_group existentes para los lados izquierdo (&l) y derecho (&r), junto con un sensor inercial o un sensor giroscópico.

smartdrive(
    motor_group     &l,
    motor_group     &r,
    inertial        &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

2 — Crea una unidad inteligente utilizando objetos de motor existentes para los lados izquierdo (&l) y derecho (&r), junto con un sensor inercial o un sensor giroscópico.

smartdrive(
    motor           &l,
    motor           &r,
    inertial        &g,
    double          wheelTravel = 320,
    double          trackWidth  = 320,
    double          wheelBase   = 130,
    distanceUnits   unit = mm,
    double          externalGearRatio = 1.0 );

Destructor de clase#

Destruye el smartdrive objeto smartdrive y libera los recursos asociados.

~smartdrive();

Parámetros#

El parámetro del sensor puede ser un objeto inercial inertial o gyro.

Parámetro

Tipo

Descripción

&l / &r

motor_group / motor

Referencias a instancias existentes de motor o motor_group. Ambos parámetros deben ser del mismo tipo: dos instancias motor_group o dos instancias motor. El parámetro &l se refiere al motor o grupo de motores izquierdo, y &r se refiere al motor o grupo de motores derecho.

&g

gyro&

A reference to an existing gyro or inertial instance.

wheelTravel

double

La circunferencia de las ruedas del tren motriz. El valor predeterminado es 320.

trackWidth

double

La distancia entre las ruedas izquierda y derecha. El valor predeterminado es 320.

wheelBase

double

La distancia entre las ruedas delanteras y traseras. El valor predeterminado es 130.

unit

distanceUnits

La unidad para wheelTravel, trackWidthy wheelBase: mm (milímetros, por defecto) u inches.

externalGearRatio

double

La relación de transmisión utilizada para ajustar las distancias de transmisión si se utilizan engranajes. El valor predeterminado es 1.0.

Ejemplo#

/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Create the left and right motor instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the inertial instance
inertial myInertial = inertial(PORT3);

// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor object
    rightMotor, // right motor object
    myInertial, // inertial object
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

Funciones de los miembros#

La smartdrive clase smartdrive incluye las siguientes funciones de miembro:

Acciones — Gire el robot usando el rumbo o la rotación.

Ajustes: ajuste los valores de rumbo y rotación.

  • setHeading — Cambia el encabezado actual del robot a un nuevo encabezado.

  • setRotation — Cambia la rotación actual del robot a una nueva rotación.

Valores — Compruebe el rumbo y la rotación.

  • heading — Devuelve el rumbo actual del robot de 0 a 359 grados.

  • rotation — Devuelve la rotación actual del robot.

Un smartdrive también puede usar las funciones miembro heredadas de drivetrain, como drive, driveFor, turn, turnFor, stop, isDone, y isMoving.

Antes de llamar a smartdrive miembro de smartdrive, se smartdrive instancia de smartdrive, como se muestra a continuación:

/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */

// Create the left and right motor instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the inertial instance
inertial myInertial = inertial(PORT3);

// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor object
    rightMotor, // right motor object
    myInertial, // inertial object
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

turnToHeading#

Un rumbo es la dirección hacia la que se enfrenta el robot, medida en grados turnToHeading gira el robot para que se enfrente a un rumbo específico de -359 a 359 grados. El robot girará en la dirección más corta para alcanzar el rumbo objetivo.

El rumbo inicial del robot es de 0 grados.

El proyecto esperará hasta que el robot termine de girar antes de que se ejecute la siguiente línea de código.

Available Functions

1 — Gira la transmisión al rumbo especificado utilizando la velocidad de giro configurada actual.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Gira la transmisión al rumbo especificado a la velocidad especificada.

bool turnToHeading(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Parámetro

Tipo

Descripción

angle

double

La dirección a la que debe mirar el robot, en grados. Esto puede ser de -359 a 359 cuando se usan deg o degrees.

units

rotationUnits

La unidad de rotación: deg (grados), rev (revoluciones) o raw (unidades RAW). Una revolución equivale a 360 grados.

velocity

double

La velocidad para girar es de 0% a 100% cuando se usan velocityUnits::pct, de 0 a 600 rpm cuando se usan rpm, o de 0 a 3600 grados por segundo cuando se usan dps. Si no se proporciona velocidad, el robot gira a la velocidad de giro actual.

units_v

velocityUnits

La unidad de velocidad velocityUnits::pct (porcentaje), rpm (rotaciones por minuto) o dps (grados por segundo).

waitForCompletion

bool

true (predeterminado) hace que el proyecto espere hasta que el robot termine de girar antes de que se ejecute la siguiente línea de código. false hace que la siguiente línea de código se ejecute de inmediato.

Return Values

Devuelve si el robot alcanzó el rumbo objetivo, como un valor booleano.

  • true — El robot alcanzó el rumbo objetivo.

  • false — El robot no terminó el turno, o la función regresó antes de que se completara el turno porque waitForCompletion se estableció en false.

Notes
  • Ejecutar otra función de movimiento del tren motriz (como turn o drive) turnToHeading turnToHeading está en curso interrumpirá el movimiento actual.

  • Debido a que turnToHeading se basa en un objetivo (utiliza un parámetro angle ), funciones como isDone y isMoving funcionan con turnToHeading.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation hace girar el robot a una rotación específica.

La rotación es cuánto ha girado el robot, medida en grados o revoluciones. Al comienzo de un proyecto, el valor de rotación se establece en 0 grados. La rotación también se puede configurar utilizando la función setRotation.

Los valores de rotación son absolutos. Esto significa que la dirección del giro depende de la rotación actual del robot. Girar a la derecha aumenta la rotación y girar a la izquierda disminuye la rotación.

Por ejemplo, si el robot comienza a 0 grados y gira a una rotación de 720 grados, girará a la derecha dos veces. Si luego giras a una rotación de 360 grados, girará a la izquierda una vez, porque 360 es menos de 720.

El proyecto esperará hasta que el robot termine de girar antes de que se ejecute la siguiente línea de código.

Available Functions

1 — Gira el tren motriz a la rotación especificada utilizando la velocidad de giro configurada actual.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — Gira la transmisión a la rotación especificada a la velocidad especificada.

bool turnToRotation(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Parámetro

Tipo

Descripción

angle

double

El valor de rotación al que se dirigirá el robot.

units

rotationUnits

La unidad de rotación: deg (grados), rev (revoluciones) o raw (unidades RAW). Una revolución equivale a 360 grados.

velocity

double

La velocidad para girar es de 0% a 100% cuando se usan velocityUnits::pct, de 0 a 600 rpm cuando se usan rpm, o de 0 a 3600 grados por segundo cuando se usan dps. Si no se proporciona velocidad, el robot gira a la velocidad de giro actual.

units_v

velocityUnits

La unidad de velocidad velocityUnits::pct (porcentaje), rpm (rotaciones por minuto) o dps (grados por segundo).

waitForCompletion

bool

true (predeterminado) hace que el proyecto espere hasta que el robot termine de girar antes de que se ejecute la siguiente línea de código. false hace que la siguiente línea de código se ejecute de inmediato.

Return Values

Devuelve si el robot alcanzó la rotación objetivo, como un valor booleano.

  • true — El robot alcanzó la rotación objetivo.

  • false — El robot no terminó el turno, o la función regresó antes de que se completara el turno porque waitForCompletion se estableció en false.

Notes
  • Ejecutar otra función de movimiento del tren motriz (como turn o drive) turnToRotation turnToRotation está en curso interrumpirá el movimiento actual.

  • Debido a que turnToRotation se basa en un objetivo (utiliza un parámetro angle ), funciones como isDone y isMoving funcionan con turnToRotation.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

calibrateDrivetrain#

calibrateDrivetrain calibra el sensor inercial o el sensor giroscópico configurado con la unidad inteligente.

La calibración ayuda al sensor a medir el movimiento correctamente. Mantenga el robot quieto durante unos 2 segundos durante la calibración. Si el robot se mueve durante la calibración, es posible que el sensor no mida el movimiento correctamente.

El proyecto esperará hasta que se realice la calibración antes de que se ejecute la siguiente línea de código.

calibrateDrivetrain es generado automáticamente por VEXcode cuando un tren motriz está configurado con un sensor inercial o un sensor giroscópico. Se proporciona como parte de la fuente del proyecto y no forma parte de la API de VEX EXP C++.

Available Functions
void calibrateDrivetrain();

Parameters

Esta función no acepta ningún parámetro.

Return Values

Esta función no devuelve un valor.

Notes
  • El robot se calibra automáticamente al inicio de cada proyecto.

  • Mantenga el robot quieto durante unos 2 segundos durante la calibración.

Function Implementation

La siguiente es la implementación generada automáticamente de calibrateDrivetrain creada por VEXcode:

bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
  wait(200, msec);
  Brain.Screen.print("Calibrating");
  Brain.Screen.newLine();
  Brain.Screen.print("Inertial");
  DrivetrainInertial.calibrate();
  while (DrivetrainInertial.isCalibrating()) {
    wait(25, msec);
  }
  vexcode_initial_drivetrain_calibration_completed = true;
  // Clears the screen and returns the cursor to row 1, column 1.
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
}

setHeading#

Un rumbo es la dirección hacia la que se enfrenta el robot, medida en setHeading setHeading cambia el rumbo actual del robot a un nuevo valor de rumbo.

Por ejemplo, si el robot ha girado hacia la derecha, establecer el rumbo en 0 grados hace que esa posición orientada hacia la derecha sea la nueva de 0 grados. Luego, el robot puede pasar a otras posiciones en función de ese nuevo encabezado.

Available Functions
void  setHeading(
  double value,
  rotationUnits units);

Parameters

Parámetro

Tipo

Descripción

value

double

El valor de encabezado a establecer para el robot. Esto puede ser de -359 a 359 cuando se usan deg o degrees.

units

rotationUnits

La unidad de encabezado: deg (grados), rev (revoluciones) o raw (unidades RAW). Una revolución equivale a 360 grados.

Return Values

Esta función no devuelve un valor.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

La rotación es cuánto ha girado el robot, medida en grados o revoluciones. Al comienzo de un proyecto, el valor de rotación se establece en 0 grados. setRotation cambia la rotación actual del robot a un nuevo valor.

Por ejemplo, si el robot ha realizado dos giros completos a la derecha, su valor de rotación será de 720 grados. Ajustar la rotación a 0 grados restablecerá esa rotación de 720 a 0 grados. Luego, el robot puede pasar a las rotaciones en función de ese nuevo valor.

Available Functions
void  setRotation(
  double value,
  rotationUnits units);

Parameters

Parámetro

Tipo

Descripción

value

double

El valor de rotación a establecer para el robot.

units

rotationUnits

La unidad de rotación: deg (grados), rev (revoluciones) o raw (unidades RAW). Una revolución equivale a 360 grados.

Return Values

Esta función no devuelve un valor.

Examples
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

heading#

Un rumbo es la dirección hacia la que mira el robot, medida en grados. El heading devuelve el rumbo actual del robot de 0 a 359 grados.

El rumbo inicial del robot es de 0 grados.

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Parámetro

Tipo

Descripción

units

rotationUnits

Opcional. La unidad de retorno de rumbo es: degrees, deg (predeterminado), revo rawUna revolución equivale a 360 grados.

Return Values

Devuelve el encabezado actual del robot como un double en la unidad seleccionada.

Examples
// Show heading before and after turning
Brain.Screen.print("Before: %f", myDrivetrain.heading(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.heading(degrees));
myDrivetrain.stop();

rotation#

La rotación es cuánto ha girado el robot, medida en grados o revoluciones. Al comienzo de un proyecto, el valor de rotación se establece en 0 grados. La rotation devuelve la rotación actual del robot.

Girar a la derecha aumenta la rotación y girar a la izquierda disminuye la rotación. Por ejemplo, hacer dos giros completos a la derecha devolverá una rotación de 720 grados.

Available Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Parámetro

Tipo

Descripción

units

rotationUnits

Opcional. La unidad de retorno de rumbo es: degrees, deg (predeterminado), revo rawUna revolución equivale a 360 grados.

Return Values

Devuelve la rotación actual del robot como un double en la unidad seleccionada.

Examples
// Show rotation before and after turning
Brain.Screen.print("Before: %f", myDrivetrain.rotation(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.rotation(degrees));
myDrivetrain.stop();