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

index

int32_t

Le port intelligent auquel le bras à 6 axes est connecté est noté PORTx, où x représente le numéro du port. Par exemple, PORT1.

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

x

double

La coordonnée x de la position cible en millimètres.

y

double

La coordonnée y de la position cible en millimètres.

z

double

La coordonnée z de la position cible en millimètres.

waitForCompletion

bool

Optionnel. true (par défaut) attend la fin du déplacement avant de continuer. false démarre le déplacement et passe immédiatement à la ligne de code suivante.

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, ou waitForCompletion a été défini sur false.

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

x

double

Distance à parcourir le long de l’axe x en millimètres.

y

double

Distance à parcourir le long de l’axe y en millimètres.

z

double

Distance à parcourir le long de l’axe z en millimètres.

waitForCompletion

bool

Optionnel. true (par défaut) attend la fin du déplacement avant de continuer. false démarre le déplacement et passe immédiatement à la ligne de code suivante.

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, ou waitForCompletion a été défini sur false.

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

yaw

double

L’angle de lacet cible en degrés.

roll

double

Facultatif. Angle de roulis cible en degrés. La valeur par défaut est 0.

pitch

double

Facultatif. Angle de tangage cible en degrés. La valeur par défaut est 0.

waitForCompletion

bool

Optionnel. true (par défaut) attend la fin du déplacement avant de continuer. false démarre le déplacement et passe immédiatement à la ligne de code suivante.

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, ou waitForCompletion a été défini sur false.

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

yaw

double

La variation du lacet, en degrés.

roll

double

Optionnel. Variation de roulis, en degrés. La valeur par défaut est 0.

pitch

double

Optionnel. La variation de hauteur, en degrés. La valeur par défaut est 0.

waitForCompletion

bool

Optionnel. true (par défaut) attend la fin du déplacement avant de continuer. false démarre le déplacement et passe immédiatement à la ligne de code suivante.

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, ou waitForCompletion a été défini sur false.

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

speed

uint32_t

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

type

endEffectorType

L’outil fixé au bras à 6 axes : magnet (outil de ramassage magnétique) ou pen (outil porte-stylo).

waitForCompletion

bool

Optionnel. true (par défaut) attend la fin de la modification avant de continuer. false lance la modification et passe immédiatement à la ligne de code suivante.

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, ou waitForCompletion a été défini sur false.

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

enabled

bool

true permet à l’aimant de saisir et de maintenir des objets. false désactive l’aimant et laisse tomber tout objet maintenu.

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

zOffset

double

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

state

bool

Optionnel. true (par défaut) active l’arrêt de la commande et empêche tout mouvement linéaire ou articulaire supplémentaire. false désactive l’arrêt de la commande.

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

timeout

int32_t

La nouvelle valeur de délai d’attente.

units

timeUnits

L’unité de temps : sec (secondes) ou msec (millisecondes).

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

x

double

La coordonnée x de la position cible en millimètres.

y

double

La coordonnée y de la position cible en millimètres.

z

double

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

x

double

Distance à parcourir le long de l’axe x en millimètres.

y

double

Distance à parcourir le long de l’axe y en millimètres.

z

double

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

yaw

double

L’angle de lacet cible en degrés.

roll

double

Facultatif. Angle de roulis cible en degrés. La valeur par défaut est 0.

pitch

double

Facultatif. Angle de tangage cible en degrés. La valeur par défaut est 0.

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

yaw

double

La variation du lacet, en degrés.

roll

double

Optionnel. Variation de roulis, en degrés. La valeur par défaut est 0.

pitch

double

Optionnel. La variation de hauteur, en degrés. La valeur par défaut est 0.

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

callback

void (*)(void)

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

callback

void (*)(void)

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