Tren de transmisión#

Introducción#

The drivetrain class controls how a robot drives and turns. A drivetrain is made of motors and wheels that work together to move the robot.

A drivetrain does not use an Inertial Sensor or Gyro Sensor for heading-based or rotation-based turns. It can drive forward or reverse and turn left or right, but it cannot turn to a specific heading or rotation. For heading-based and rotation-based turns, use the smartdrive class.

Clases derivadas#

The drivetrain class serves as a base class for the following derived classes:

  • smartdrive - This class adds Inertial Sensor or Gyro Sensor support to enable heading-based and rotation-based turns.

Constructores de clases#

1 - Creates a drivetrain using existing motor_group objects for the left (&l) and right (&r) sides.

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

2 - Creates a drivetrain using existing motor objects for the left (&l) and right (&r) sides.

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

Instructor de clase#

Destroys the drivetrain object and releases associated resources.

virtual ~drivetrain();

Parámetros#

Parámetro

Tipo

Descripción

&l / &r

motor_group / motor

The left and right motors or motor groups. Both parameters must use the same type: either two motor_group objects or two motor objects.

wheelTravel

double

The circumference of the drivetrain wheels. The default is 320.

trackWidth

double

The distance between the left and right wheels. The default is 320.

wheelBase

double

The distance between the front and back wheels. The default is 130.

unit

distanceUnits

The unit for wheelTravel, trackWidth, and wheelBase: mm (millimeters, default) or inches.

externalGearRatio

double

The gear ratio used to adjust drive distances if gears are used. The default is 1.0.

Ejemplo#

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

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

Funciones de los miembros#

There are many ways to code the drivetrain. Below is a list of all drivetrain member functions:

Acciones: Mover y girar el robot.

  • drive - Moves the robot forward or reverse forever.

  • driveFor - Moves the robot forward or reverse for a specific distance.

  • turn - Turns the robot left or right forever.

  • turnFor - Turns the robot left or right for a specific number of degrees.

  • stop - Stops the robot’s movement.

Motadores: Ajusta la configuración de la transmisión.

  • setDriveVelocity - Tells the robot how fast to drive.

  • setTurnVelocity - Tells the robot how fast to turn.

  • setStopping - Tells how the robot will stop moving: by braking, coasting, or holding.

  • setTimeout - Sets how many seconds the robot will try to finish a movement.

Obtenedores: comprobar el estado del movimiento.

  • isDone - Returns whether the robot is finished moving, as a Boolean value.

  • isMoving - Returns whether the robot is moving, as a Boolean value.

  • velocity - Returns how fast the robot is driving.

  • current - Returns how much electrical current the drivetrain is using.

  • power - Returns how quickly the drivetrain is using energy.

  • torque - Returns how much torque the drivetrain is using.

  • efficiency - Returns how efficiently the drivetrain is using power.

  • temperature - Returns how warm the drivetrain is.

  • voltage - Returns the electrical voltage supplied to the drivetrain.

Before calling any drivetrain member functions, a drivetrain object must be created, as shown below:

/* 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 drivetrain object
drivetrain myDrivetrain = drivetrain(
    leftMotor,  // left motor object
    rightMotor, // right motor object
    259.34,     // wheelTravel
    320,        // trackWidth
    40,         // wheelBase
    mm,         // unit
    1.0 );      // externalGearRatio

Comportamiento#

conducir#

drive moves the robot forward or reverse forever. The robot will continue to move until it is given another action, like turning or stopping. For RPM or DPS, the limit is changed by the gear ratio of the drivetrain.

Available Functions

1 - Conduce utilizando la velocidad de accionamiento configurada actualmente.

void drive(
    directionType dir );

2 - Conduce a la velocidad especificada.

void drive(
    directionType dir,
    double        velocity,
    velocityUnits units );

Parameters

Parámetro

Tipo

Descripción

dir

directionType

The direction the robot moves: forward or reverse.

velocity

double

The velocity to drive with from 0% to 100% when using velocityUnits::pct, from 0 to 600 rpm when using rpm, or from 0 to 3600 degrees per second when using dps. If no velocity is provided, the robot drives at the current drive velocity.

units

velocityUnits

The velocity unit: velocityUnits::pct (percent), rpm (rotations per minute), or dps (degrees per second).

Return Values

Esta función no devuelve ningún valor.

Notes
  • drive is non-waiting; the project will continue executing the next line of code immediately after the call.

  • The drivetrain will continue moving until stop is called or another drivetrain movement function (such as driveFor or turn) is executed.

  • Functions such as isDone and isMoving are not applicable to drive, since it does not use target-based movement (doesn’t have a distance parameter).

Examples
// Drive forward and back
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.drive(reverse, 25, rpm);
wait(2, seconds);
myDrivetrain.stop();

driveFor#

driveFor moves the robot forward or reverse for a specific distance. The project will wait until the robot is done moving before the next line of code runs by default. For RPM or DPS, the limit is changed by the gear ratio of the drivetrain.

Available Functions

1 - Conduce en la dirección especificada durante una distancia utilizando la velocidad de conducción configurada.

bool driveFor(
    directionType dir,
    double        distance,
    distanceUnits units,
    bool          waitForCompletion = true );

2 - Conduce en una dirección que depende de la distancia utilizando la velocidad de conducción configurada.

bool driveFor(
    double        distance,
    distanceUnits units,
    bool          waitForCompletion = true );

3 - Conduce en una dirección que depende de la distancia a la velocidad especificada.

bool driveFor(
    double        distance,
    distanceUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

4 - Conduce en la dirección especificada durante una distancia a la velocidad especificada.

bool driveFor(
    directionType dir,
    double        distance,
    distanceUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Parámetro

Tipo

Descripción

dir

directionType

The direction the robot moves: forward or reverse.

distance

double

La distancia que recorre el robot.

units

distanceUnits

The distance unit: mm (millimeters), inches, or cm (centimeters).

velocity

double

The velocity to drive with from 0% to 100% when using velocityUnits::pct, from 0 to 600 rpm when using rpm, or from 0 to 3600 degrees per second when using dps. If no velocity is provided, the robot drives at the current drive velocity.

units_v

velocityUnits

The velocity unit: velocityUnits::pct (percent), rpm (rotations per minute), or dps (degrees per second).

waitForCompletion

bool

true (default) makes the project wait until the robot is done moving before the next line of code runs. false makes the next line of code run right away.

Return Values

Devuelve, como valor booleano, si el robot alcanzó la distancia objetivo.

  • true - The robot reached the target distance.

  • false - The robot did not finish the movement, or the function returned before the movement completed because waitForCompletion was set to false.

Notes
  • Executing another drivetrain movement function (such as drive or turnFor) while driveFor is in progress will interrupt the current movement.

  • Because driveFor is target-based (uses a distance parameter), functions such as isDone and isMoving work with driveFor.

Examples
// Drive 200 mm, then back 200 mm
myDrivetrain.driveFor(forward, 200, mm);
myDrivetrain.driveFor(reverse, 200, mm);

doblar#

turn turns the robot left or right forever. The robot will continue to turn until it is given another action, like driving or stopping. For RPM or DPS, the limit is changed by the gear ratio of the drivetrain.

Available Functions

1 - Gira utilizando la velocidad de giro configurada.

void turn(
    turnType dir );

2 - Gira a la velocidad especificada.

void turn(
    turnType     dir,
    double       velocity,
    velocityUnits units );

Parameters

Parámetro

Tipo

Descripción

dir

turnType

The direction the robot turns: left or right.

velocity

double

The velocity to turn with from 0% to 100% when using velocityUnits::pct, from 0 to 600 rpm when using rpm, or from 0 to 3600 degrees per second when using dps. If no velocity is provided, the robot turns at the current turn velocity.

units

velocityUnits

The velocity unit: velocityUnits::pct (percent), rpm (rotations per minute), or dps (degrees per second).

Return Values This function does not return a value. Notes
  • turn is non-waiting; the project will continue executing the next line of code immediately after the call.

  • The drivetrain will continue turning until stop is called or another drivetrain movement function (such as turnFor or drive) is executed.

  • Functions such as isDone and isMoving are not applicable to turn, since it does not use target-based movement (doesn’t have an angle parameter).

Examples
// Turn right, then left, then stop
myDrivetrain.turn(right);
wait(2, seconds);
myDrivetrain.turn(left);
wait(2, seconds);
myDrivetrain.stop();

turnoPara#

turnFor turns the robot left or right for a specific number of degrees. The turn is relative to the current position of the robot. The project will wait until the robot is done turning before the next line of code runs by default. For RPM or DPS, the limit is changed by the gear ratio of the drivetrain.

Available Functions

1 - Gira para el ángulo especificado usando la velocidad de giro configurada actualmente.

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

2 - Gira en la dirección especificada para un ángulo utilizando la velocidad de giro configurada.

bool turnFor(
    turnType      dir,
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

3 - Giros para el ángulo especificado a la velocidad especificada.

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

4 - Gira en la dirección especificada para un ángulo a la velocidad especificada.

bool turnFor(
    turnType      dir,
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

Parámetro

Tipo

Descripción

dir

turnType

The direction the robot turns: left or right.

angle

double

El ángulo de giro del robot.

units

rotationUnits

The turn unit: deg (degrees), rev (revolutions), or raw (raw units). One revolution is equal to 360 degrees.

velocity

double

The velocity to turn with from 0% to 100% when using velocityUnits::pct, from 0 to 600 rpm when using rpm, or from 0 to 3600 degrees per second when using dps. If no velocity is provided, the robot turns at the current turn velocity.

units_v

velocityUnits

The velocity unit: velocityUnits::pct (percent), rpm (rotations per minute), or dps (degrees per second).

waitForCompletion

bool

true (default) makes the project wait until the robot is done turning before the next line of code runs. false makes the next line of code run right away.

Return Values

Devuelve, como valor booleano, si el robot alcanzó el ángulo objetivo.

  • true - The robot reached the target angle.

  • false - The robot did not finish the turn, or the function returned before the turn completed because waitForCompletion was set to false.

Notes
  • Executing another drivetrain movement function (such as turn or drive) while turnFor is in progress will interrupt the current movement.

  • Because turnFor is target-based (uses an angle parameter), functions such as isDone and isMoving work with turnFor.

Examples
// Turn right then left
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
myDrivetrain.turnFor(left, 90, degrees);

detener#

stop stops the robot’s movement. If a stopping mode is provided, it controls how the robot stops for this function call.

Available Functions

1 - Detiene el tren motriz utilizando el modo de parada configurado actualmente.

void stop();

2 - Detiene la transmisión utilizando el modo de frenado especificado.

void stop(
    brakeType mode );

Parameters

Parámetro

Tipo

Descripción

mode

brakeType

How the robot will stop:

  • brake - Stops immediately.
  • coast - Slows to a stop.
  • hold - Stops immediately and holds the wheels’ position.

Return Values

Esta función no devuelve ningún valor.

Examples
// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);

Mutadores#

establecerVelocidadDeConducción#

setDriveVelocity tells the robot how fast to drive. A higher percentage makes the robot drive faster and a lower percentage makes the robot drive slower. For RPM or DPS, the limit is changed by the gear ratio of the drivetrain.

Todos los proyectos comienzan con el robot conduciendo al 50% de su velocidad por defecto.

Nota: Una mayor velocidad hace que el robot se desplace más rápido, pero puede ser menos preciso. Una menor velocidad hace que el robot se desplace más despacio, pero puede ser más preciso.

Available Functions
void  setDriveVelocity(
  double velocity,
  velocityUnits units );

Parameters

Parámetro

Tipo

Descripción

velocity

double

The velocity to drive with from 0% to 100% when using velocityUnits::pct, from 0 to 600 rpm when using rpm, or from 0 to 3600 degrees per second when using dps.

units

velocityUnits

The velocity unit: velocityUnits::pct (percent), rpm (rotations per minute), or dps (degrees per second).

Return Values

Esta función no devuelve ningún valor.

Notes
  • The drive velocity applies to all subsequent drivetrain movement functions (such as drive and driveFor) unless a specific velocity is provided in the function call.

Examples
// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);

establecerVelocidadDeGiro#

setTurnVelocity tells the robot how fast to turn. A higher percentage makes the robot turn faster and a lower percentage makes the robot turn slower. For RPM or DPS, the limit is changed by the gear ratio of the drivetrain.

Todos los proyectos comienzan con el robot girando al 50% de su velocidad por defecto.

Nota: Una mayor velocidad hace que el robot gire más rápido, pero puede ser menos preciso. Una menor velocidad hace que el robot gire más despacio, pero puede ser más preciso.

Available Functions
void  setTurnVelocity(
  double velocity,
  velocityUnits units );

Parameters

Parámetro

Tipo

Descripción

velocity

double

The velocity to turn with from 0% to 100% when using velocityUnits::pct, from 0 to 600 rpm when using rpm, or from 0 to 3600 degrees per second when using dps.

units

velocityUnits

The velocity unit: percent or pct (percent), rpm (rotations per minute), or dps (degrees per second).

Return Values

Esta función no devuelve ningún valor.

Notes
  • The turn velocity applies to all subsequent drivetrain turning functions (such as turn and turnFor) unless a specific velocity is provided in the function call.

Examples
// Try default, slow, then fast
myDrivetrain.turnFor(right, 360, degrees);
wait(1, seconds);
myDrivetrain.setTurnVelocity(20, percent);
myDrivetrain.turnFor(right, 360, degrees);
wait(1, seconds);
myDrivetrain.setTurnVelocity(100, percent);
myDrivetrain.turnFor(right, 360, degrees);

establecerDetención#

setStopping sets how the robot will stop moving: by braking, coasting, or holding.

Available Functions
void setStopping(
  brakeType mode );

Parameters

Parámetro

Tipo

Descripción

mode

brakeType

How the robot will stop:

  • brake - Stops immediately.
  • coast - Slows to a stop.
  • hold - Stops immediately and holds the wheels’ position.

Return Values

Esta función no devuelve ningún valor.

Notes
  • The stopping mode applies to all subsequent stop calls unless a specific stopping mode is provided in the function call.

establecerTiempoDeEspera#

setTimeout sets how many seconds the robot will try to finish a movement. If the robot cannot finish in that time, it will stop trying and move on to the next line of code. This keeps the robot from getting stuck on a movement.

Available Functions
void  setTimeout(
  int32_t time,
  timeUnits units );

Parameters

Parámetro

Tipo

Descripción

time

int32_t

El tiempo que el robot puede intentar para completar un movimiento. Debe ser un número entero positivo.

units

timeUnits

The unit of time: sec (seconds) or msec (milliseconds).

Return Values

Esta función no devuelve ningún valor.

Notes
  • The timeout only applies to target-based drivetrain movement functions (such as driveFor and turnFor).

Examples
// Start turning if driving takes too long
myDrivetrain.setTimeout(1, seconds);
myDrivetrain.driveFor(forward, 25, inches);
myDrivetrain.turnFor(right, 90, degrees);

Getters#

estáHecho#

isDone returns whether the robot is finished moving, as a Boolean value. This can be used to control the timing of other behaviors based on the robot’s movement.

Available Functions
bool isDone( void );

Parameters

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

Return Values
  • true - The robot is finished moving.

  • false - The robot is still moving.

Notes
  • isDone is compatible with target-based drivetrain movements (functions that move to a target, such as driveFor and turnFor).

  • isDone is not compatible with functions such as drive and turn, since they do not use target-based movement.

se está mudando#

isMoving returns whether the robot is moving, as a Boolean value. This can be used to control the timing of other behaviors based on the robot’s movement.

Available Functions
virtual bool isMoving( void );

Parameters

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

Return Values
  • true - The robot is moving.

  • false - The robot is not moving.

Notes
  • isMoving is compatible with target-based drivetrain movements (functions that move to a target, such as driveFor and turnFor).

  • isMoving is not compatible with functions such as drive and turn, since they do not use target-based movement.

velocidad#

velocity returns how fast the robot is driving.

Un valor positivo significa que el robot avanza. Un valor negativo significa que el robot retrocede.

Available Functions
double velocity(
  velocityUnits units );

Parameters

Parámetro

Tipo

Descripción

units

velocityUnits

The velocity unit: percent or pct (percent), rpm (rotations per minute), or dps (degrees per second).

Return Values

Returns the drivetrain velocity as a double in the selected unit.

Examples
// Show velocity before and during motion
Brain.Screen.print("Resting: %f", myDrivetrain.velocity(percent));
myDrivetrain.drive(forward, 100, velocityUnits::pct);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("Moving: %f", myDrivetrain.velocity(percent));
myDrivetrain.stop();

actual#

current returns how much electrical current the drivetrain is using. Current is the amount of electricity flowing through the drivetrain. It can be returned in amps (amperes) or as a percentage, depending on the unit.

Un valor de corriente más alto significa que el sistema de transmisión está utilizando más corriente eléctrica. Esto puede ocurrir cuando el robot empuja contra un objeto o intenta moverse cuando está atascado.

Esto puede utilizarse para comprobar si el sistema de transmisión tiene dificultades durante el movimiento. Si la corriente se mantiene alta, el sistema de transmisión puede sobrecalentarse o consumir energía de forma menos eficiente.

Available Functions

1 - Devuelve la corriente eléctrica del tren motriz en amperios.

double current(
    currentUnits units = currentUnits::amp );

2 - Devuelve la corriente eléctrica del tren motriz como un porcentaje del máximo.

double current(
    percentUnits units );

Parameters

Parámetro

Tipo

Descripción

units

currentUnits

The unit to return current in: amp (amps, default).

units

percentUnits

The unit to return current in: percent or pct.

Return Values

Returns the drivetrain current as a double in the selected unit.

fuerza#

power returns how much power the drivetrain is using, measured in watts. Power shows how quickly the drivetrain is using energy.

Un valor de potencia más alto significa que el sistema de transmisión consume energía más rápidamente. Esto puede ocurrir cuando el robot empuja contra un objeto o intenta moverse cuando está atascado.

Esto puede utilizarse para comparar movimientos o comprobar si la transmisión está teniendo dificultades. Si la potencia se mantiene alta, la transmisión puede calentarse o consumir energía de forma menos eficiente.

Available Functions
double power(
  powerUnits units = powerUnits::watt );

Parameters

Parámetro

Tipo

Descripción

units

powerUnits

The power unit: watt (watts, default).

Return Values

Returns drivetrain power as a double in watts.

esfuerzo de torsión#

El par motor indica la fuerza con la que el sistema de transmisión puede empujar o tirar mientras las ruedas giran.

torque returns how much torque the drivetrain is using, measured in Newton-meters (Nm) or inch-pounds (InLb).

Un valor de par motor más elevado indica que el sistema de transmisión está ejerciendo mayor fuerza de empuje o tracción. Esto puede ocurrir cuando el robot empuja contra un objeto o intenta moverse estando atascado.

Esto puede utilizarse para comprobar si el sistema de transmisión está teniendo dificultades o para comparar la fuerza que requieren los diferentes movimientos.

Available Functions
double torque(
  torqueUnits units = torqueUnits::nm );

Parameters

Parámetro

Tipo

Descripción

units

torqueUnits

The unit to return torque in: Nm (newton meters, default) or InLb (inch pounds).

Return Values

Returns drivetrain torque as a double in the selected unit.

eficiencia#

efficiency returns how efficiently the drivetrain is using power, as a percentage from 0% to 100%.

La eficiencia indica cuánta potencia del sistema de transmisión se utiliza para el movimiento. Un valor de eficiencia más alto significa que se utiliza más potencia del sistema de transmisión para el movimiento. Un valor de eficiencia más bajo puede ocurrir cuando el sistema de transmisión trabaja intensamente pero no genera mucho movimiento, como cuando el robot está atascado o empujando contra un objeto.

Esto puede utilizarse para comparar movimientos o comprobar si el sistema de transmisión está desperdiciando energía en lugar de utilizarla para el movimiento.

Available Functions
double efficiency(
  percentUnits units = percentUnits::pct );

Parameters

Parámetro

Tipo

Descripción

units

percentUnits

The unit to return efficiency in: percent or pct (default).

Return Values

Returns drivetrain efficiency as a double in the selected unit.

temperatura#

temperature returns the average temperature of the drivetrain as a percentage from 0% to 100%.

La temperatura indica el grado de calentamiento de los motores del sistema de transmisión. Una temperatura más alta significa que los motores se calientan durante su funcionamiento. Para que los motores funcionen a pleno rendimiento, deben mantenerse por debajo de los 55 °C.

Si los motores se sobrecalientan, reducirán su corriente máxima para protegerse. A 70 °C, los motores dejarán de funcionar hasta que se enfríen.

Esto puede utilizarse para comprobar si el sistema de transmisión se calienta demasiado durante movimientos repetidos, recorridos largos o cuando ejerce presión contra un objeto.

Available Functions
double temperature(
  percentUnits units );

Parameters

Parámetro

Tipo

Descripción

units

percentUnits

The unit to return temperature in: percent or pct.

Return Values

Returns the average drivetrain temperature as a double in the selected unit.

Notes
  • A returned value of 50% indicates that the average motor temperature is approximately 45°C (113°F).

  • The typical operating temperature range for the drivetrain is approximately 20°C (68°F) to 70°C (158°F).

Voltaje#

voltage returns the electrical voltage supplied to the drivetrain.

El voltaje es la presión eléctrica que se suministra a los motores del sistema de transmisión. Este valor, junto con la corriente y la potencia, permite comprender cómo el sistema de transmisión utiliza la energía eléctrica.

Available Functions
double  voltage(
  voltageUnits units = voltageUnits::volt );

Parameters

Parámetro

Tipo

Descripción

units

voltageUnits

The unit to return voltage in: volt (volts, default) or voltageUnits::mV (millivolts).

Return Values

Returns drivetrain voltage as a double in the selected unit.