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_groupexistentes 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
motorexistentes 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 |
|---|---|---|
|
|
Referencias a instancias existentes de |
|
|
A reference to an existing |
|
|
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 engranajes. 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 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.
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 inercial o el Sensor giroscópico configurados en el tren motriz.
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 Functions1 — Gira la transmisión al rumbo especificado utilizando la velocidad de giro configurada actual.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
La dirección a la que debe mirar el robot, en grados. Esto puede ser de -359 a 359 cuando se usan |
|
|
La unidad de rotación: |
|
|
La velocidad para girar es de 0% a 100% cuando se usan |
|
|
La unidad de velocidad |
|
|
|
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 porquewaitForCompletionse estableció enfalse.
Ejecutar otra función de movimiento del tren motriz (como
turnodrive)turnToHeadingturnToHeading está en curso interrumpirá el movimiento actual.Debido a que
turnToHeadingse basa en un objetivo (utiliza un parámetroangle), funciones comoisDoneyisMovingfuncionan conturnToHeading.
// 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 Functions1 — 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 );
Parameters2 — 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 );
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
El valor de rotación al que se dirigirá el robot. |
|
|
La unidad de rotación: |
|
|
La velocidad para girar es de 0% a 100% cuando se usan |
|
|
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 turno, o la función regresó antes de que se completara el turno porquewaitForCompletionse estableció enfalse.
Ejecutar otra función de movimiento del tren motriz (como
turnodrive)turnToRotationturnToRotation está en curso interrumpirá el movimiento actual.Debido a que
turnToRotationse basa en un objetivo (utiliza un parámetroangle), funciones comoisDoneyisMovingfuncionan conturnToRotation.
// 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++.
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.
Mantenga el robot quieto durante unos 2 segundos durante la calibración.
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 Functionsvoid setHeading(
double value,
rotationUnits units);
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
El valor de encabezado a establecer para el robot. Esto puede ser de -359 a 359 cuando se usan |
|
|
La unidad de encabezado: |
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 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: |
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 Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
Opcional. La unidad de retorno de rumbo es: |
Devuelve el encabezado 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 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parámetro |
Tipo |
Descripción |
|---|---|---|
|
|
Opcional. La unidad de retorno de rumbo es: |
Devuelve la rotación actual del robot como un double en la unidad seleccionada.
// 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();