smartdrive#

Introducción#

La clase smartdrive controla cómo un robot se desplaza y gira utilizando motores, ruedas y un sensor giroscópico. Un smartdrive utiliza un sensor giroscópico conectado para rastrear la dirección y la rotación.

El sistema smartdrive utiliza el giroscopio para ayudar al robot a moverse y girar con precisión. Al inicio de cada proyecto, el sistema de transmisión calibra automáticamente el giroscopio. Mantenga el robot inmóvil durante aproximadamente 2 segundos durante la calibración para que pueda moverse y girar correctamente.

La clase smartdrive se basa en la clase drivetrain. Un smartdrive puede usar las mismas funciones de conducción y giro que drivetrain, y también agrega funciones basadas en sensores como turnToHeading y turnToRotation.

Esta página utiliza myDrivetrain como nombre de ejemplo para smartdrive. Reemplácelo con el nombre que haya configurado según sea necesario.

Constructores de clase#

1 — Crea un smartdrive utilizando los objetos existentes motor_group para los lados izquierdo y derecho, junto con un sensor giroscópico.

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 un sistema de accionamiento inteligente utilizando los objetos existentes motor para los lados izquierdo y derecho, junto con un sensor giroscópico.

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 objeto smartdrive y libera los recursos asociados.

~smartdrive();

Parámetros#

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: dos objetos motor_group o dos objetos motor.

&g

gyro

El sensor giroscópico utilizado por el smartdrive.

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 marchas. 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 Gyro Sensor object.
gyro myGyro = gyro(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myGyro,     // Gyro Sensor
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

Funciones de los miembros#

La clase smartdrive incluye las siguientes funciones miembro:

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

  • turnToHeading — Gira el robot para que mire hacia una dirección específica de -359 a 359 grados. El robot girará en la dirección más corta para alcanzar la dirección objetivo.

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

  • calibrateDrivetrain — Calibra el sensor giroscópico configurado con el smartdrive.

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

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

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

Valores — Compruebe el rumbo y la rotación.

  • heading — Devuelve la dirección 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.

Before calling any smartdrive member functions, a smartdrive object must be created.

/* 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 Gyro Sensor object.
gyro myGyro = gyro(PORT3);

// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
    leftMotor,  // left motor
    rightMotor, // right motor
    myGyro,     // Gyro Sensor
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

turnToHeading#

El rumbo es la dirección hacia la que apunta el robot, medida en grados. turnToHeading hace que el robot gire para apuntar a un rumbo específico, desde -359 hasta 359 grados. El robot girará en la dirección más corta para alcanzar el rumbo deseado.

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 hacia la que debe apuntar el robot, en grados. Esto puede ser de -359 a 359 cuando se usa deg o degrees.

units

rotationUnits

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

velocity

double

La velocidad de giro varía entre 0 % y 100 % al usar velocityUnits::pct, entre 0 y 120 rpm al usar rpm, o entre 0 y 720 grados por segundo al usar dpsSi no se proporciona ninguna velocidad, el robot gira a la velocidad de giro actual.

units_v

velocityUnits

La unidad de velocidad: velocityUnits::pct (porcentaje), rpm (revoluciones 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 ejecutar la siguiente línea de código. false hace que la siguiente línea de código se ejecute inmediatamente.

Return Values

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

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

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

Notes
  • Ejecutar otra función de movimiento del tren motriz mientras se está ejecutando turnToHeading 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 indica cuánto ha girado el robot, medida en grados o revoluciones. Al inicio de un proyecto, el valor de rotación se establece en 0 grados. La rotación también se puede configurar mediante 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 es: deg (grados), rev (revoluciones) o raw (unidades brutas). Una revolución equivale a 360 grados.

velocity

double

La velocidad de giro varía entre 0 % y 100 % al usar velocityUnits::pct, entre 0 y 120 rpm al usar rpm, o entre 0 y 720 grados por segundo al usar dpsSi no se proporciona ninguna velocidad, el robot gira a la velocidad de giro actual.

units_v

velocityUnits

La unidad de velocidad: velocityUnits::pct (porcentaje), rpm (revoluciones 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 ejecutar la siguiente línea de código. false hace que la siguiente línea de código se ejecute inmediatamente.

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 giro, o la función regresó antes de que el giro se completara porque waitForCompletion se estableció en false.

Notes
  • Ejecutar otra función de movimiento del tren de transmisión mientras se está ejecutando turnToRotation 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 configurado con el smartdrive.

La calibración ayuda al sensor giroscópico 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 giroscópico 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 se genera automáticamente mediante VEXcode cuando se configura un sistema de transmisión con un sensor giroscópico. Se proporciona como parte del código fuente del proyecto y no forma parte de la API C++ de VEX IQ.

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("Gyro");
  DrivetrainGyro.calibrate();
  while (DrivetrainGyro.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 apunta el robot, medida en grados. 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 rumbo que se debe establecer para el robot. Este puede ser de -359 a 359 cuando se utiliza deg o degrees.

units

rotationUnits

La unidad de medida es: deg (grados), rev (revoluciones) o raw (unidades brutas). 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 indica cuánto ha girado el robot, medida en grados o revoluciones. Al inicio de un proyecto, el valor de rotación se establece en 0 grados. El comando 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 es: deg (grados), rev (revoluciones) o raw (unidades brutas). 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#

El rumbo es la dirección hacia la que apunta el robot, medida en grados. heading devuelve el rumbo actual del robot, que va 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 la dirección 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 indica cuánto ha girado el robot, medida en grados o revoluciones. Al inicio de un proyecto, el valor de rotación se establece en 0 grados. 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

Returns the robot’s current rotation as a double in the selected unit.

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();