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_groupexistants 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
motorexistants 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 |
|---|---|---|
|
|
Les moteurs ou groupes de moteurs gauche et droit. Les deux paramètres doivent utiliser le même type : soit deux objets |
|
|
Le capteur gyroscopique utilisé par le smartdrive. |
|
|
La circonférence des roues de transmission. La valeur par défaut est |
|
|
La distance entre les roues gauche et droite. La valeur par défaut est |
|
|
La distance entre les roues avant et arrière. La valeur par défaut est |
|
|
L’unité pour |
|
|
Le rapport de transmission utilisé pour ajuster les distances de transmission si des engrenages sont utilisés. La valeur par défaut est |
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 Functions1 — Oriente le robot vers le cap spécifié en utilisant la vitesse de rotation actuelle.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — 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 );
Paramètre |
Taper |
Description |
|---|---|---|
|
|
La direction vers laquelle le robot doit être orienté, en degrés. Cela peut aller de -359 à 359 en utilisant |
|
|
L’unité de titre : |
|
|
La vitesse de rotation peut être de 0 % à 100 % avec |
|
|
L’unité de vitesse : |
|
|
|
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 quewaitForCompletiona été défini surfalse.
L’exécution d’une autre fonction de mouvement de transmission pendant que
turnToHeadingest en cours d’exécution interrompra le mouvement en cours.turnToHeadingutilise un cap cible, doncisDoneetisMovingpeuvent être utilisés avec lui.
// 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 Functions1 — 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 );
Parameters2 — 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 );
Paramètre |
Taper |
Description |
|---|---|---|
|
|
La valeur de rotation vers laquelle le robot va tourner. |
|
|
L’unité de rotation : |
|
|
La vitesse de rotation peut être de 0 % à 100 % avec |
|
|
L’unité de vitesse : |
|
|
|
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 quewaitForCompletiona été défini surfalse.
L’exécution d’une autre fonction de mouvement de transmission pendant que
turnToRotationest en cours interrompra le mouvement en cours.turnToRotationutilise une rotation cible, doncisDoneetisMovingpeuvent être utilisés avec lui.
// 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.
void calibrateDrivetrain();
Cette fonction n’accepte aucun paramètre.
Return ValuesCette fonction ne renvoie aucune valeur.
NotesLe 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.
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 Functionsvoid setHeading(
double value,
rotationUnits units);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
La valeur de cap à définir pour le robot. Celle-ci peut être comprise entre -359 et 359 lors de l’utilisation |
|
|
L’unité de titre : |
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 Functionsvoid setRotation(
double value,
rotationUnits units);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Valeur de rotation à définir pour le robot. |
|
|
L’unité de rotation : |
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 Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Facultatif. Unité de retour du cap : |
Renvoie le cap actuel du robot sous la forme d’un double dans l’unité sélectionnée.
// 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 Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Facultatif. Unité de rotation : |
Renvoie la rotation actuelle du robot sous la forme d’un double dans l’unité sélectionnée.
// 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();