Bras CTE#
Introduction#
La classe arm permet de contrôler le bras à 6 axes utilisé dans la cellule de travail CTE. En VEX EXP C++, ce bras peut déplacer un effecteur terminal vers des positions dans l’espace tridimensionnel, faire pivoter cet effecteur, vérifier la faisabilité des mouvements et contrôler les outils qui y sont attachés, tels que l’outil de préhension magnétique ou le porte-stylo.
Les exemples de cette page utilisent un bras à 6 axes configuré nommé Arm.
Constructeurs#
arm#
arm crée un objet Bras à 6 axes.
Fonction disponible
arm(int32_t index);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Le port intelligent auquel le bras à 6 axes est connecté est noté |
Exemple
// Create a 6-Axis Arm named Arm on Port 1
arm Arm = arm(PORT1);
Destructeur#
~arm#
~arm détruit l’objet arm et libère les ressources associées.
Fonction disponible
~arm();
Fonctions des membres#
La classe arm comprend les fonctions membres suivantes :
Actions — Déplacer le bras à 6 axes vers des positions ou des orientations.
moveTo— Déplace l’effecteur final vers une coordonnée x, y et z spécifiée.moveInc— Déplace l’effecteur final d’une distance spécifiée par rapport à sa position actuelle.moveEndEffectorTo— Fait pivoter l’effecteur terminal vers une orientation de lacet, de roulis et de tangage spécifiée.moveEndEffectorInc— Fait pivoter l’effecteur terminal d’une valeur spécifiée de lacet, de roulis et de tangage.
Modificateurs — Configurez les mouvements, les outils et les paramètres de contrôle.
setSpeed— Définit la vitesse de déplacement utilisée par le bras à 6 axes.setEndEffectorType— Définit le type d’effecteur terminal attaché au bras à 6 axes.setEndEffectorMagnet— Active ou désactive l’outil de ramassage magnétique.setPenOffset— Définit le décalage de l’axe z utilisé avec l’outil Porte-stylo.setControlStop— Active ou désactive l’arrêt de contrôle pour le bras à 6 axes.setTimeout— Définit le délai d’attente utilisé par les fonctions de mouvement du bras à 6 axes.
Getters — Renvoie l’état du mouvement, la position, l’orientation et les valeurs de connexion.
isDone— Renvoie si le bras à 6 axes a fini de se déplacer.isCrashed— Renvoie si le bras à 6 axes s’est écrasé pendant son déplacement.getX— Renvoie la position x actuelle de l’effecteur terminal.getY— Renvoie la position y actuelle de l’effecteur terminal.getZ— Renvoie la position z actuelle de l’effecteur terminal.getYaw— Renvoie le lacet actuel de l’effecteur terminal.getRoll— Renvoie le jet actuel de l’effecteur terminal.getPitch— Renvoie le pitch actuel de l’effecteur terminal.canArmReachTo— Renvoie si le bras à 6 axes peut atteindre une position spécifiée.canArmReachInc— Renvoie si le bras à 6 axes peut se déplacer sur une distance spécifiée.canEndEffectorReachTo— Renvoie si l’effecteur terminal peut atteindre une orientation spécifiée.canEndEffectorReachInc— Renvoie si l’effecteur terminal peut pivoter d’une quantité spécifiée.isConnected— Renvoie si le bras à 6 axes est connecté au cerveau EXP.timestamp— Renvoie l’horodatage du dernier paquet d’état reçu du bras à 6 axes.installed— Indique si le bras à 6 axes est connecté.
Rappels — Exécuter des fonctions lorsque des événements ARM se produisent.
controlStopped— Enregistre une fonction à exécuter lorsque l’arrêt du contrôle est activé.crashed— Enregistre une fonction à exécuter lorsqu’un plantage est détecté.
Actes#
moveTo#
La commande moveTo déplace le bras à 6 axes vers une coordonnée x, y et z spécifiée.
Les coordonnées x, y et z décrivent la position de l’effecteur terminal dans l’espace tridimensionnel. Utilisez canArmReachTo avant cette fonction si la position cible peut se trouver en dehors de l’espace de travail accessible du bras à 6 axes.
Fonction disponible
bool moveTo(
double x,
double y,
double z,
bool waitForCompletion = true
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
La coordonnée x de la position cible en millimètres. |
|
|
La coordonnée y de la position cible en millimètres. |
|
|
La coordonnée z de la position cible en millimètres. |
|
|
Optionnel. |
Valeur de retour
Renvoie une valeur booléenne.
true— Le bras à 6 axes a atteint la position cible.false— Le bras à 6 axes n’a pas atteint la position cible, ouwaitForCompletiona été défini surfalse.
Exemples
// Move the 6-Axis Arm to (200, 0, 100)
Arm.moveTo(200, 0, 100);
// Start moving, then print the y-position while the arm moves
Arm.moveTo(-100, 200, 100, false);
while (!Arm.isDone()) {
Brain.Screen.print(Arm.getY());
Brain.Screen.newLine();
wait(0.25, seconds);
}
moveInc#
moveInc déplace le bras à 6 axes d’une distance spécifiée à partir de sa position actuelle le long des axes x, y et z.
Utilisez cette fonction pour vous déplacer par rapport à la position actuelle de l’effecteur terminal. Utilisez canArmReachInc avant cette fonction si le mouvement risque de placer le bras à 6 axes hors de son espace de travail accessible.
Fonction disponible
bool moveInc(
double x,
double y,
double z,
bool waitForCompletion = true
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Distance à parcourir le long de l’axe x en millimètres. |
|
|
Distance à parcourir le long de l’axe y en millimètres. |
|
|
Distance à parcourir le long de l’axe z en millimètres. |
|
|
Optionnel. |
Valeur de retour
Renvoie une valeur booléenne.
true— Le bras à 6 axes a atteint la position demandée.false— Le bras à 6 axes n’a pas atteint la position demandée, ouwaitForCompletiona été défini surfalse.
Exemple
// Move the 6-Axis Arm 100 millimeters along the y-axis
Arm.moveInc(0, 100, 0);
moveEndEffectorTo#
La commande moveEndEffectorTo fait pivoter l’effecteur terminal du bras à 6 axes vers une orientation de lacet, de roulis et de tangage spécifiée.
L’orientation décrit la rotation de l’effecteur terminal. yaw rotation autour de l’axe z, roll rotation autour de l’axe x et pitch rotation autour de l’axe y.
Fonction disponible
bool moveEndEffectorTo(
double yaw,
double roll = 0,
double pitch = 0,
bool waitForCompletion = true
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
L’angle de lacet cible en degrés. |
|
|
Facultatif. Angle de roulis cible en degrés. La valeur par défaut est |
|
|
Facultatif. Angle de tangage cible en degrés. La valeur par défaut est |
|
|
Optionnel. |
Valeur de retour
Renvoie une valeur booléenne.
true— L’effecteur terminal a atteint l’orientation cible.false— L’effecteur final n’a pas atteint l’orientation cible, ouwaitForCompletiona été défini surfalse.
Exemple
// Rotate the end effector to 90 degrees of roll
Arm.moveEndEffectorTo(0, 90, 0);
moveEndEffectorInc#
moveEndEffectorInc fait pivoter l’effecteur terminal du bras à 6 axes d’une valeur spécifiée de lacet, de roulis et de tangage par rapport à son orientation actuelle.
Utilisez cette fonction pour effectuer une rotation par rapport au lacet, au roulis ou au tangage actuel de l’effecteur terminal.
Fonction disponible
bool moveEndEffectorInc(
double yaw,
double roll = 0,
double pitch = 0,
bool waitForCompletion = true
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
La variation du lacet, en degrés. |
|
|
Optionnel. Variation de roulis, en degrés. La valeur par défaut est |
|
|
Optionnel. La variation de hauteur, en degrés. La valeur par défaut est |
|
|
Optionnel. |
Valeur de retour
Renvoie une valeur booléenne.
true— L’effecteur terminal a atteint l’orientation demandée.false— L’effecteur final n’a pas atteint l’orientation demandée, ouwaitForCompletiona été défini surfalse.
Exemple
// Rotate the end effector -50 degrees in pitch
Arm.moveEndEffectorInc(0, 0, -50);
Mutateurs#
setSpeed#
setSpeed définit la vitesse de déplacement utilisée par le bras à 6 axes.
Fonction disponible
void setSpeed(uint32_t speed);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
La vitesse à laquelle le bras à 6 axes doit se déplacer, en millimètres par seconde. |
Valeur de retour
Cette fonction ne renvoie aucune valeur.
Exemple
// Set the 6-Axis Arm movement speed
Arm.setSpeed(100);
setEndEffectorType#
setEndEffectorType définit le type d’effecteur terminal attaché au bras à 6 axes.
Lorsque le type d’effecteur terminal est modifié, le bras à 6 axes ajuste automatiquement son décalage Z pour correspondre à l’outil sélectionné.
Fonction disponible
bool setEndEffectorType(
endEffectorType type,
bool waitForCompletion = true
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
L’outil fixé au bras à 6 axes : |
|
|
Optionnel. |
Valeur de retour
Renvoie une valeur booléenne.
true— Le type demandé a été défini.false— Le type demandé n’a pas été défini, ouwaitForCompletiona été défini surfalse.
Exemple
// Set the end effector type to the Magnet Pickup Tool
Arm.setEndEffectorType(magnet);
setEndEffectorMagnet#
setEndEffectorMagnet active ou désactive l’outil de ramassage magnétique.
Fonction disponible
void setEndEffectorMagnet(bool enabled);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
|
Valeur de retour
Cette fonction ne renvoie aucune valeur.
Exemple
// Pick up objects and then drop them
Arm.setEndEffectorType(magnet);
Arm.setEndEffectorMagnet(true);
wait(2, seconds);
Arm.setEndEffectorMagnet(false);
setPenOffset#
setPenOffset définit le décalage de l’axe z utilisé lorsque l’outil porte-stylo est fixé au bras à 6 axes.
Avant d’utiliser cette fonction, définissez le type d’effecteur sur pen Si l’outil Porte-stylo n’est pas sélectionné, cette fonction est sans effet.
Le décalage du stylo correspond à la distance entre le haut du porte-stylo et la pointe du marqueur effaçable à sec. Une valeur z positive déplace le décalage vers le haut par rapport au point de fixation de l’outil.
Fonction disponible
void setPenOffset(double zOffset);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Valeur du décalage du stylo en millimètres. |
Valeur de retour
Cette fonction ne renvoie aucune valeur.
Exemple
// Set the end effector type to the Pen Holder Tool and set the pen offset
Arm.setEndEffectorType(pen);
Arm.setPenOffset(25);
setControlStop#
setControlStop active ou désactive l’arrêt de contrôle pour le bras à 6 axes.
Lorsque la fonction d’arrêt de contrôle est activée, le bras à 6 axes arrête immédiatement tout mouvement et empêche tout mouvement linéaire ou articulaire ultérieur.
Fonction disponible
void setControlStop(bool state = true);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Optionnel. |
Valeur de retour
Cette fonction ne renvoie aucune valeur.
Exemple
// Stop the 6-Axis Arm and prevent further movement
Arm.setControlStop();
setTimeout#
setTimeout définit la valeur du délai d’attente utilisé lors du déplacement du bras à 6 axes.
Si un mouvement ne se termine pas avant l’expiration du délai, le projet passe à la ligne de code suivante.
Fonction disponible
void setTimeout(
int32_t timeout,
timeUnits units
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
La nouvelle valeur de délai d’attente. |
|
|
L’unité de temps : |
Valeur de retour
Cette fonction ne renvoie aucune valeur.
Exemple
// Set the 6-Axis Arm timeout to 2 seconds
Arm.setTimeout(2, sec);
Getters#
isDone#
isDone renvoie si le bras à 6 axes a terminé son mouvement.
Cette fonction est utile après qu’une fonction de mouvement soit appelée avec waitForCompletion défini sur false.
Fonction disponible
bool isDone();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur booléenne.
true— Le bras à 6 axes a terminé son mouvement.false— Le bras à 6 axes est toujours en mouvement.
Exemple
// Display the 6-Axis Arm's y-position while it moves
Arm.moveTo(-100, 200, 100, false);
while (!Arm.isDone()) {
Brain.Screen.print(Arm.getY());
Brain.Screen.newLine();
wait(0.25, seconds);
}
isCrashed#
isCrashed indique si le bras à 6 axes s’est écrasé pendant son déplacement.
En cas de collision, le bras à 6 axes arrête le mouvement du moteur et peut sembler inerte. Cela réduit les contraintes et contribue à protéger les moteurs contre les dommages accidentels.
Fonction disponible
bool isCrashed();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur booléenne.
true— Le bras à 6 axes s’est écrasé.false— Le bras à 6 axes n’a pas planté.
Exemple
// Quickly move to a new location
Arm.setSpeed(100);
Arm.moveTo(-40, 250, 40, false);
// While moving, check for a crash
while (true) {
if (Arm.isCrashed()) {
// Indicate a crash with the Signal Tower and Brain screen
Brain.Screen.print("Crash Detected");
SignalTower6.setColor(signaltower::green, signaltower::off);
SignalTower6.setColor(signaltower::red, signaltower::on);
break;
}
wait(5, msec);
}
getX#
getX renvoie la position x actuelle de l’effecteur terminal en millimètres.
Utilisez cette fonction pour lire la position actuelle de l’effecteur terminal le long de l’axe x.
Fonction disponible
float getX();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur flottante float représentant la position x de l’effecteur terminal en millimètres.
Exemple
// Print the current x position of the 6-Axis Arm
Brain.Screen.print(Arm.getX());
getY#
getY renvoie la position y actuelle de l’effecteur terminal en millimètres.
Utilisez cette fonction pour lire la position actuelle de l’effecteur terminal le long de l’axe y.
Fonction disponible
float getY();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur flottante float représentant la position y de l’effecteur terminal en millimètres.
Exemple
// Print the current y position of the 6-Axis Arm
Brain.Screen.print(Arm.getY());
getZ#
getZ renvoie la position z actuelle de l’effecteur terminal en millimètres.
Utilisez cette fonction pour lire la position actuelle de l’effecteur terminal le long de l’axe z.
Fonction disponible
float getZ();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur flottante float représentant la position z de l’effecteur terminal en millimètres.
Exemple
// Print the current z position of the 6-Axis Arm
Brain.Screen.print(Arm.getZ());
getYaw#
getYaw renvoie le lacet actuel de l’effecteur terminal en degrés.
Fonction disponible
float getYaw();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur flottante float représentant le lacet actuel de l’effecteur terminal en degrés.
Exemple
// Print the current yaw of the end effector
Brain.Screen.print(Arm.getYaw());
getRoll#
getRoll renvoie le roulis actuel de l’effecteur terminal en degrés.
Fonction disponible
float getRoll();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur flottante float représentant le roulis actuel de l’effecteur terminal en degrés.
Exemple
// Print the current roll of the end effector
Brain.Screen.print(Arm.getRoll());
getPitch#
getPitch renvoie le pas actuel de l’effecteur terminal en degrés.
Fonction disponible
float getPitch();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur flottante float représentant l’inclinaison actuelle de l’effecteur terminal en degrés.
Exemple
// Print the current pitch of the end effector
Brain.Screen.print(Arm.getPitch());
canArmReachTo#
La fonction canArmReachTo indique si le bras à 6 axes peut déplacer l’effecteur terminal vers une coordonnée x, y et z spécifiée.
Utilisez cette fonction pour vérifier une position cible avant d’utiliser moveTo.
Fonction disponible
bool canArmReachTo(
double x,
double y,
double z
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
La coordonnée x de la position cible en millimètres. |
|
|
La coordonnée y de la position cible en millimètres. |
|
|
La coordonnée z de la position cible en millimètres. |
Valeur de retour
Renvoie une valeur booléenne.
true— Le bras à 6 axes peut atteindre la position demandée.false— Le bras à 6 axes ne peut pas atteindre la position demandée.
Exemple
// Move the 6-Axis Arm to (100, -20, 50) if it can reach
if (Arm.canArmReachTo(100, -20, 50)) {
Arm.moveTo(100, -20, 50);
}
canArmReachInc#
canArmReachInc renvoie si le bras à 6 axes peut déplacer l’effecteur terminal d’une distance x, y et z spécifiée à partir de sa position actuelle.
Utilisez cette fonction pour vérifier un mouvement relatif avant d’utiliser moveInc.
Fonction disponible
bool canArmReachInc(
double x,
double y,
double z
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Distance à parcourir le long de l’axe x en millimètres. |
|
|
Distance à parcourir le long de l’axe y en millimètres. |
|
|
Distance à parcourir le long de l’axe z en millimètres. |
Valeur de retour
Renvoie une valeur booléenne.
true— Le bras à 6 axes peut effectuer le mouvement demandé.false— Le bras à 6 axes ne peut pas effectuer le mouvement demandé.
Exemple
// Increment the 6-Axis Arm 100 mm along the x-axis if possible
if (Arm.canArmReachInc(100, 0, 0)) {
Arm.moveInc(100, 0, 0);
}
canEndEffectorReachTo#
La fonction canEndEffectorReachTo indique si l’effecteur terminal peut pivoter selon une orientation de lacet, de roulis et de tangage spécifiée.
Utilisez cette fonction pour vérifier une orientation cible avant d’utiliser moveEndEffectorTo.
Fonction disponible
bool canEndEffectorReachTo(
double yaw,
double roll = 0,
double pitch = 0
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
L’angle de lacet cible en degrés. |
|
|
Facultatif. Angle de roulis cible en degrés. La valeur par défaut est |
|
|
Facultatif. Angle de tangage cible en degrés. La valeur par défaut est |
Valeur de retour
Renvoie une valeur booléenne.
true— L’effecteur terminal peut atteindre l’orientation demandée.false— L’effecteur terminal ne peut pas atteindre l’orientation demandée.
Exemple
// Rotate the end effector to 90 degrees of roll if possible
if (Arm.canEndEffectorReachTo(0, 90, 0)) {
Arm.moveEndEffectorTo(0, 90, 0);
}
canEndEffectorReachInc#
canEndEffectorReachInc renvoie si l’effecteur terminal peut pivoter d’une valeur spécifiée de lacet, de roulis et de tangage à partir de son orientation actuelle.
Utilisez cette fonction pour vérifier un mouvement d’orientation relative avant d’utiliser moveEndEffectorInc.
Fonction disponible
bool canEndEffectorReachInc(
double yaw,
double roll = 0,
double pitch = 0
);
Paramètre |
Taper |
Description |
|---|---|---|
|
|
La variation du lacet, en degrés. |
|
|
Optionnel. Variation de roulis, en degrés. La valeur par défaut est |
|
|
Optionnel. La variation de hauteur, en degrés. La valeur par défaut est |
Valeur de retour
Renvoie une valeur booléenne.
true— L’effecteur terminal peut effectuer la rotation demandée.false— L’effecteur final ne peut pas effectuer la rotation demandée.
Exemple
// Increment the end effector by 10 degrees of pitch if possible
if (Arm.canEndEffectorReachInc(0, 0, 10)) {
Arm.moveEndEffectorInc(0, 0, 10);
}
isConnected#
isConnected indique si le bras à 6 axes est connecté au cerveau EXP.
Il s’agit d’une fonction de compatibilité qui renvoie la même valeur que installed.
Fonction disponible
bool isConnected();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur booléenne.
true— Le bras à 6 axes est connecté au cerveau EXP.false— Le bras à 6 axes n’est pas connecté au cerveau EXP.
Exemple
// Print whether the 6-Axis Arm is connected
Brain.Screen.print(Arm.isConnected());
timestamp#
timestamp renvoie l’horodatage du dernier paquet d’état reçu du bras à 6 axes.
Fonction disponible
uint32_t timestamp();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie l’horodatage du dernier paquet d’état sous la forme d’un uint32_t uint32_t en millisecondes.
installed#
installed indique si le bras à 6 axes est connecté.
Fonction disponible
bool installed();
Paramètres
Cette fonction ne possède pas de paramètres.
Valeur de retour
Renvoie une valeur booléenne.
true— Le bras à 6 axes est connecté.false— Le bras à 6 axes n’est pas connecté.
Rappels#
controlStopped#
controlStopped enregistre une fonction qui s’exécute lorsque l’arrêt du contrôle est activé.
Fonction disponible
void controlStopped(void (* callback)(void));
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Une fonction qui s’exécute lorsque l’arrêt du contrôle est activé. |
Valeur de retour
Cette fonction ne renvoie aucune valeur.
Exemple
// Called when the 6-Axis Arm is control stopped
void onControlStopped() {
Brain.Screen.print("Arm control stopped");
}
int main() {
vexcodeInit();
Arm.controlStopped(onControlStopped);
}
crashed#
crashed enregistre une fonction qui s’exécute lorsque le bras à 6 axes a planté pendant son déplacement.
En cas de collision, le bras à 6 axes arrête le mouvement du moteur et peut sembler inerte. Cela réduit les contraintes et contribue à protéger les moteurs contre les dommages accidentels.
Fonction disponible
void crashed(void (* callback)(void));
Paramètre |
Taper |
Description |
|---|---|---|
|
|
Une fonction qui s’exécute lorsque le bras à 6 axes s’est bloqué en cours de déplacement. |
Valeur de retour
Cette fonction ne renvoie aucune valeur.
Exemple
// Called when the 6-Axis Arm crashes while moving
void onArmCrashed() {
Brain.Screen.print("Crash detected");
SignalTower6.setColor(signaltower::green, signaltower::off);
SignalTower6.setColor(signaltower::red, signaltower::on);
}
int main() {
vexcodeInit();
Arm.crashed(onArmCrashed);
}