smartdrive#
Introduction#
Le module smartdrive contrôle la façon dont un robot se déplace et tourne à l’aide de moteurs, de roues et d’un capteur. Un smartdrive peut utiliser un capteur gyroscopique connecté ou le capteur inertiel intégré cerveau.
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.
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 ou un capteur inertiel.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 ou un capteur inertiel.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#
Le paramètre du capteur peut être un objet gyro ou inertial.
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 ou le capteur inertiel 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 Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial 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 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 Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial 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 connecté ou le capteur inertiel intégré du cerveau 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.
Remarque : La commande calibrateDrivetrain est générée automatiquement par VEXcode lorsqu’une transmission est configurée avec un capteur gyroscopique ou un capteur inertiel. 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("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 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();