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 giroscópico conectado o el sensor inercial incorporado en el cerebro.

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.

Esta página utiliza myDrivetrain myDrivetrain como ejemplo de nombre de unidad inteligente. Reemplácelo con su propio nombre configurado según sea necesario.

Constructores de clase#

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

smartdrive(
    motor_group     &l,
    motor_group     &r,
    gyro            &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 y derecho, junto con un sensor giroscópico o un sensor inercial.

smartdrive(
    motor           &l,
    motor           &r,
    gyro            &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#

The sensor parameter can be a gyro or inertial object.

Parámetro

Tipo

Descripción

&l / &r

motor_group / motor

Los motores o grupos de motores izquierdo y derecho. Ambos parámetros deben usar el mismo tipo: ya sea dos objetos motor_group o dos objetos motor.

&g

gyro / inertial

El Sensor giroscópico o Sensor inercial utilizado por la unidad inteligente.

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 (predeterminado) 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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myInertial, // Inertial Sensor
    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.

  • turnToHeading — Gira el robot para enfrentar un rumbo específico de -359 a 359 grados. El robot girará en la dirección más corta para alcanzar el rumbo objetivo.

  • turnToRotation — Gira el robot a una rotación específica.

  • calibrateDrivetrain — Calibra el sensor configurado con el smartdrive.

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, smartdrive objeto de smartdrive.

/* 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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);

// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myInertial, // Inertial Sensor
    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 el robot al rumbo especificado utilizando la velocidad de giro actual.

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

2 — Gira el robot 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 encabezado: 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 120 rpm cuando se usan rpm, o de 0 a 720 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 turnToHeading está funcionando interrumpirá el movimiento actual.

  • turnToHeading utiliza un rumbo objetivo, por lo que isDone y isMoving se pueden usar con él.

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 robot a la rotación especificada utilizando la velocidad de giro actual.

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

2 — Gira el robot 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 120 rpm cuando se usan rpm, o de 0 a 720 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 turnToRotation está funcionando interrumpirá el movimiento actual.

  • turnToRotation utiliza una rotación objetivo, por lo que isDone y isMoving se pueden usar con ella.

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

calibrateDrivetrain#

calibrateDrivetrain calibra el sensor giroscópico conectado o el sensor inercial incorporado en el cerebro 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.

Nota: CalibrateDrivetrain calibrateDrivetrain es generado automáticamente por VEXcode cuando un tren motriz está configurado con un sensor giroscópico o un sensor inercial. Se proporciona como parte de la fuente del proyecto y no forma parte de la API de VEX IQ 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 cuando se configura un smartdrive en VEXcode.

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

Function Implementation

El siguiente es un ejemplo de la implementación autogenerada 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 medida para la rotación 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();