smartdrive#

Introduction#

The smartdrive class controls how a robot drives and turns using motors, wheels, and a Gyro Sensor. A smartdrive uses a connected Gyro Sensor to track heading and rotation.

Le système de transmission smartdrive utilise un capteur gyroscopique pour assurer la précision des mouvements et des virages du robot. Au début de chaque projet, le système de transmission calibre automatiquement le capteur gyroscopique. 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. Un smartdrive peut utiliser les mêmes fonctions de conduite et de virage que drivetrain, et il ajoute également des fonctions basées sur des capteurs comme turnToHeading et turnToRotation.

Cette page utilise myDrivetrain comme nom de pilote intelligent à titre d’exemple. Remplacez-le par le nom que vous avez configuré, selon vos besoins.

Constructeurs de classes#

1 — Crée un smartdrive en utilisant motor_group existants pour les côtés gauche et droit, ainsi qu’un capteur gyroscopique.

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

smartdrive(
    motor           &l,
    motor           &r,
    gyro            &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#

Paramètre

Taper

Description

&l / &r

motor_group / motor

Les moteurs ou groupes de moteurs gauche et droit. Les deux paramètres doivent utiliser le même type : soit deux objets motor_group , soit deux objets motor.

&g

gyro

Le capteur gyroscopique utilisé par le smartdrive.

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

Fonctions des membres#

La classe smartdrive comprend les fonctions membres suivantes :

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

  • 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.

  • turnToRotation — Fait tourner le robot vers une rotation spécifique.

  • calibrateDrivetrain — Calibre le capteur gyroscopique configuré avec le smartdrive.

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.

Avant d’appeler une smartdrive , un objet smartdrive doit être créé.

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

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 le robot vers le cap spécifié en utilisant la vitesse de rotation actuelle.

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

2 — Oriente le robot 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 titre : 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 à 120 tr/min avec rpm, ou de 0 à 720 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 a renvoyé 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 pendant que turnToHeading est en cours d’exécution interrompra le mouvement en cours.

  • turnToHeading utilise un cap cible, donc isDone et isMoving peuvent être utilisés avec lui.

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 le robot selon la rotation spécifiée en utilisant la vitesse de rotation actuelle.

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

2 — Fait tourner le robot selon 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 à 120 tr/min avec rpm, ou de 0 à 720 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 a renvoyé 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 pendant que turnToRotation est en cours interrompra le mouvement en cours.

  • turnToRotation utilise une rotation cible, donc isDone et isMoving peuvent être utilisés avec lui.

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

calibrateDrivetrain#

calibrateDrivetrain calibre le capteur gyroscopique configuré avec le smartdrive.

L’étalonnage permet au capteur gyroscopique de mesurer correctement les mouvements. Maintenez le robot immobile pendant environ 2 secondes lors de l’étalonnage. Si le robot bouge pendant cette phase, le capteur gyroscopique 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 gyroscopique. Elle est fournie avec le code source du projet et ne fait pas partie de l’API C++ de VEX IQ.

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 lorsqu’un smartdrive est configuré dans VEXcode.

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

Function Implementation

Voici un exemple d’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("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#

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