smartdrive#

Introduction#

The smartdrive class controls how a robot drives and turns using motors, wheels, and a sensor. A smartdrive can use an Inertial Sensor, Gyro Sensor, or GPS Sensor to track heading and rotation.

Le système smartdrive utilise un capteur pour permettre au robot de se déplacer et de tourner avec précision. Au début de chaque projet, la transmission calibre automatiquement le capteur. Maintenez le robot immobile pendant environ 2 secondes lors de la calibration afin qu’il puisse se déplacer et tourner correctement.

La classe smartdrive est basée sur la classe drivetrain. Elle peut utiliser les mêmes fonctions de conduite et de virage que drivetrain, et elle ajoute également des fonctions basées sur des capteurs comme turnToHeading et turnToRotation.

Constructeurs de classes#

1 — Crée un smartdrive en utilisant motor_group existants pour les côtés gauche (&l) et droit (&r), ainsi qu’un capteur inertiel, un capteur gyroscopique ou un capteur GPS.

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 — Crée un smartdrive en utilisant des objets motor existants pour les côtés gauche (&l) et droit (&r), ainsi qu’un capteur inertiel, un capteur gyroscopique ou un capteur GPS.

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

Destructeur de classe#

Détruit l’objet smartdrive et libère les ressources associées.

~smartdrive();

Paramètres#

Le paramètre du capteur peut être un objet inertial, gyro, ou gps.

Paramètre

Taper

Description

&l / &r

motor_group / motor

References to existing motor or motor_group instances. Both parameters must be of the same type: either two motor_group instances or two motor instances. The &l parameter refers to the left motor or motor group, and &r refers to the right motor or motor group.

&g

gyro&

Une référence à une instance existante gps, gyro, ou inertial.

wheelTravel

double

La circonférence des roues de transmission. La valeur par défaut est 320.

trackWidth

double

La distance entre les roues gauche et droite. La valeur par défaut est 320.

wheelBase

double

La distance entre les roues avant et arrière. La valeur par défaut est 130.

unit

distanceUnits

L’unité pour wheelTravel, trackWidth, et wheelBase: mm (millimètres, par défaut) ou inches.

externalGearRatio

double

Le rapport de transmission utilisé pour ajuster les distances de transmission si des engrenages sont utilisés. La valeur par défaut est 1.0.

Exemple#

/* 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

Fonctions des membres#

La classe smartdrive comprend les fonctions membres suivantes :

Actions — Faites pivoter le robot en utilisant l’orientation ou la rotation.

Paramètres — Ajuster les valeurs d’orientation et de rotation.

  • setHeading — Change le cap actuel du robot en un nouveau cap.

  • setRotation — Change la rotation actuelle du robot en une nouvelle rotation.

Valeurs — Vérifiez l’orientation et la rotation.

  • heading — Renvoie le cap actuel du robot de 0 à 359 degrés.

  • rotation — Renvoie la rotation actuelle du robot.

Un smartdrive smartdrive peut également utiliser les fonctions membres héritées de drivetrain, telles que drive, driveFor, turn, turnFor, stop, isDone, et isMoving.

Before calling any smartdrive member functions, a smartdrive instance 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 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#

Le cap est la direction vers laquelle le robot est orienté, mesurée en degrés. turnToHeading oriente le robot vers un cap spécifique compris entre -359 et 359 degrés. Le robot empruntera le chemin le plus court pour atteindre le cap cible.

Le cap initial du robot est de 0 degré.

Le projet attendra que le robot ait fini de tourner avant d’exécuter la ligne de code suivante.

Available Functions

1 — Oriente la transmission vers le cap spécifié en utilisant la vitesse de virage configurée.

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

2 — Oriente la transmission vers le cap spécifié à la vitesse spécifiée.

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

Parameters

Paramètre

Taper

Description

angle

double

La direction vers laquelle le robot doit être orienté, en degrés. Cela peut aller de -359 à 359 en utilisant deg ou degrees.

units

rotationUnits

L’unité de rotation : deg (degrés), rev (tours), ou raw (unités brutes). Un tour équivaut à 360 degrés.

velocity

double

La vitesse de rotation peut être de 0 % à 100 % avec velocityUnits::pct, de 0 à 600 tr/min avec rpm, ou de 0 à 3600 degrés par seconde avec dpsSi aucune vitesse n’est fournie, le robot tourne à la vitesse de rotation actuelle.

units_v

velocityUnits

L’unité de vitesse : velocityUnits::pct (pourcentage), rpm (rotations par minute), ou dps (degrés par seconde).

waitForCompletion

bool

true (par défaut) : le projet attend que le robot ait fini de tourner avant d’exécuter la ligne de code suivante. false  : la ligne de code suivante s’exécute immédiatement.

Return Values

Renvoie, sous forme de valeur booléenne, si le robot a atteint le cap cible.

  • true — Le robot a atteint le cap cible.

  • false — Le robot n’a pas terminé le tour, ou la fonction est retournée avant que le tour ne soit terminé parce que waitForCompletion a été défini sur false.

Notes
  • L’exécution d’une autre fonction de mouvement de transmission (telle que turn ou drive) pendant que turnToHeading est en cours interrompra le mouvement en cours.

  • Parce que turnToHeading est basé sur la cible (utilise un paramètre d’angle angle ), les fonctions telles que isDone et isMoving fonctionnent avec turnToHeading.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation fait tourner le robot selon une rotation spécifique.

La rotation correspond à l’angle de rotation du robot, mesuré en degrés ou en tours. Au début d’un projet, la valeur de rotation est fixée à 0 degré. La rotation peut également être définie à l’aide de la fonction setRotation.

Les valeurs de rotation sont absolues. Cela signifie que le sens de rotation dépend de la rotation actuelle du robot. Tourner à droite augmente la rotation, et tourner à gauche la diminue.

Par exemple, si le robot démarre à 0 degré et que vous effectuez une rotation de 720 degrés, il tournera deux fois à droite. Si vous effectuez ensuite une rotation de 360 ​​degrés, il tournera une fois à gauche, car 360 est inférieur à 720.

Le projet attendra que le robot ait fini de tourner avant d’exécuter la ligne de code suivante.

Available Functions

1 — Fait tourner la transmission dans la rotation spécifiée en utilisant la vitesse de rotation configurée.

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

2 — Fait tourner la transmission à la rotation spécifiée à la vitesse spécifiée.

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

Parameters

Paramètre

Taper

Description

angle

double

La valeur de rotation vers laquelle le robot va tourner.

units

rotationUnits

L’unité de rotation : deg (degrés), rev (tours), ou raw (unités brutes). Un tour équivaut à 360 degrés.

velocity

double

La vitesse de rotation peut être de 0 % à 100 % avec velocityUnits::pct, de 0 à 600 tr/min avec rpm, ou de 0 à 3600 degrés par seconde avec dpsSi aucune vitesse n’est fournie, le robot tourne à la vitesse de rotation actuelle.

units_v

velocityUnits

L’unité de vitesse : velocityUnits::pct (pourcentage), rpm (rotations par minute), ou dps (degrés par seconde).

waitForCompletion

bool

true (par défaut) : le projet attend que le robot ait fini de tourner avant d’exécuter la ligne de code suivante. false  : la ligne de code suivante s’exécute immédiatement.

Return Values

Renvoie, sous forme de valeur booléenne, si le robot a atteint la rotation cible.

  • true — Le robot a atteint la rotation cible.

  • false — Le robot n’a pas terminé le tour, ou la fonction est retournée avant que le tour ne soit terminé parce que waitForCompletion a été défini sur false.

Notes
  • L’exécution d’une autre fonction de mouvement de transmission (telle que turn ou drive) pendant que turnToRotation est en cours interrompra le mouvement en cours.

  • Parce que turnToRotation est basé sur la cible (utilise un paramètre d’angle angle ), les fonctions telles que isDone et isMoving fonctionnent avec turnToRotation.

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

calibrateDrivetrain#

calibrateDrivetrain calibre le capteur inertiel, le capteur gyroscopique ou le capteur GPS configuré avec le smartdrive.

L’étalonnage permet au capteur de mesurer correctement les mouvements. Maintenez le robot immobile pendant environ 2 secondes lors de l’étalonnage. Si le robot bouge pendant cette opération, le capteur risque de ne pas mesurer correctement les mouvements.

Le projet attendra la fin de l’étalonnage avant d’exécuter la ligne de code suivante.

La fonction calibrateDrivetrain est générée automatiquement par VEXcode lorsqu’une transmission est configurée avec un capteur inertiel, un capteur GPS ou un gyroscope. Elle est fournie avec le code source du projet et ne fait pas partie de l’API C++ de VEX V5.

Available Functions
void calibrateDrivetrain();

Parameters

Cette fonction n’accepte aucun paramètre.

Return Values

Cette fonction ne renvoie aucune valeur.

Notes
  • Le robot se calibre automatiquement au début de chaque projet.

  • Maintenez le robot immobile pendant environ 2 secondes lors de l’étalonnage.

Function Implementation

Voici l’implémentation générée automatiquement de calibrateDrivetrain créée par 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#

Le cap est la direction vers laquelle le robot est orienté, mesurée en degrés. La commande setHeading modifie le cap actuel du robot en lui attribuant une nouvelle valeur.

Par exemple, si le robot s’est tourné vers la droite, le fait de régler son cap à 0 degré fait de cette position (orientée vers la droite) le nouveau point de référence à 0 degré. Le robot peut ensuite se tourner vers d’autres positions en fonction de ce nouveau cap.

Available Functions
void  setHeading(
  double value,
  rotationUnits units);

Parameters

Paramètre

Taper

Description

value

double

La valeur de cap à définir pour le robot. Celle-ci peut être comprise entre -359 et 359 lors de l’utilisation deg ou degrees.

units

rotationUnits

L’unité de titre : deg (degrés), rev (tours), ou raw (unités brutes). Un tour équivaut à 360 degrés.

Return Values

Cette fonction ne renvoie aucune valeur.

Examples
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

La rotation correspond à l’angle de rotation du robot, mesuré en degrés ou en tours. Au début d’un projet, la valeur de rotation est fixée à 0 degré. La commande setRotation modifie la rotation actuelle du robot en lui attribuant une nouvelle valeur.

Par exemple, si le robot a effectué deux tours complets vers la droite, sa valeur de rotation sera de 720 degrés. Définir la rotation à 0 degré la réinitialisera de 720 à 0 degré. Le robot pourra ensuite effectuer des rotations en fonction de cette nouvelle valeur.

Available Functions
void  setRotation(
  double value,
  rotationUnits units);

Parameters

Paramètre

Taper

Description

value

double

Valeur de rotation à définir pour le robot.

units

rotationUnits

L’unité de titre : deg (degrés), rev (tours), ou raw (unités brutes). Un tour équivaut à 360 degrés.

Return Values

Cette fonction ne renvoie aucune valeur.

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

heading#

Le cap est la direction vers laquelle le robot est orienté, mesurée en degrés. La commande heading renvoie le cap actuel du robot, compris entre 0 et 359 degrés.

Le cap initial du robot est de 0 degré.

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

Paramètre

Taper

Description

units

rotationUnits

Facultatif. Unité de retour du cap : degrees, deg (par défaut), revou rawUn tour équivaut à 360 degrés.

Return Values

Renvoie le cap actuel du robot sous la forme d’un double dans l’unité sélectionnée.

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 rotation correspond à l’angle de rotation du robot, mesuré en degrés ou en tours. Au début d’un projet, la valeur de rotation est fixée à 0 degré. La commande rotation renvoie la rotation actuelle du robot.

Tourner à droite augmente la rotation, et tourner à gauche la diminue. Par exemple, deux virages complets à droite correspondent à une rotation de 720 degrés.

Available Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

Paramètre

Taper

Description

units

rotationUnits

Facultatif. Unité de rotation : degrees, deg (par défaut), revou rawUn tour équivaut à 360 degrés.

Return Values

Renvoie la rotation actuelle du robot sous la forme d’un double dans l’unité sélectionnée.

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