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_grouppara 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
motorpara 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 |
|---|---|---|
|
|
Los motores o grupos de motores izquierdo y derecho. Ambos parámetros deben usar el mismo tipo: dos objetos |
|
|
El sensor giroscópico utilizado por el smartdrive. |
|
|
La circunferencia de las ruedas del tren motriz. El valor predeterminado es |
|
|
La distancia entre las ruedas izquierda y derecha. El valor predeterminado es |
|
|
La distancia entre las ruedas delanteras y traseras. El valor predeterminado es |
|
|
La unidad para |
|
|
La relación de transmisión utilizada para ajustar las distancias de transmisión si se utilizan marchas. El valor predeterminado es |
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 Functions1 — Gira el robot al rumbo especificado utilizando la velocidad de giro actual.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Gira el robot al rumbo especificado a la velocidad especificada.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
La dirección hacia la que debe apuntar el robot, en grados. Esto puede ser de -359 a 359 cuando se usa |
|
|
La unidad de medida es: |
|
|
La velocidad de giro varía entre 0 % y 100 % al usar |
|
|
La unidad de velocidad: |
|
|
|
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 porquewaitForCompletionse estableció enfalse.
Ejecutar otra función de movimiento del tren motriz mientras se está ejecutando
turnToHeadinginterrumpirá el movimiento actual.turnToHeadingutiliza un rumbo objetivo, por lo queisDoneyisMovingse pueden usar con él.
// 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 Functions1 — Gira el robot a la rotación especificada utilizando la velocidad de giro actual.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
El valor de rotación al que se dirigirá el robot. |
|
|
La unidad de rotación es: |
|
|
La velocidad de giro varía entre 0 % y 100 % al usar |
|
|
La unidad de velocidad: |
|
|
|
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 porquewaitForCompletionse estableció enfalse.
Ejecutar otra función de movimiento del tren de transmisión mientras se está ejecutando
turnToRotationinterrumpirá el movimiento actual.turnToRotationutiliza una rotación objetivo, por lo queisDoneyisMovingse pueden usar con ella.
// 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.
void calibrateDrivetrain();
Esta función no acepta ningún parámetro.
Return ValuesEsta función no devuelve un valor.
NotesEl 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.
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 Functionsvoid setHeading(
double value,
rotationUnits units);
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
El valor de rumbo que se debe establecer para el robot. Este puede ser de -359 a 359 cuando se utiliza |
|
|
La unidad de medida es: |
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 Functionsvoid setRotation(
double value,
rotationUnits units);
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
El valor de rotación a establecer para el robot. |
|
|
La unidad de rotación es: |
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 Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
Opcional. La unidad de retorno de rumbo es: |
Devuelve la dirección actual del robot como un double en la unidad seleccionada.
// 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
Opcional. La unidad de medida para la rotación es: |
Returns the robot’s current rotation as a double in the selected unit.
// 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();