Bras à 6 axes#

Introduction#

Le bras robotique VEX 6 axes peut déplacer un effecteur terminal dans l’espace tridimensionnel, contrôler son orientation à l’aide de rotations de lacet, de roulis et de tangage, et utiliser des outils attachés tels que l’outil de ramassage magnétique ou l’outil porte-stylo.

Le bras à 6 axes n’est pas configuré comme un périphérique dans VEXcode V5. Pour l’utiliser dans un projet Python VEX V5, créez manuellement un objet Arm dans le code avec le port intelligent auquel le bras à 6 axes est connecté.

Les exemples de cette page utilisent un bras à 6 axes construit manuellement nommé arm1.

Vous trouverez ci-dessous la liste de toutes les méthodes disponibles :

Actions — Déplacer le bras à 6 axes vers des positions ou des orientations.

  • move_to — Déplace l’effecteur final vers une coordonnée x, y et z spécifiée.

  • move_inc — Déplace l’effecteur terminal d’une distance spécifiée à partir de sa position actuelle.

  • move_end_effector_to — Fait pivoter l’effecteur terminal vers une orientation de lacet, de roulis et de tangage spécifiée.

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

  • set_speed — Définit la vitesse de déplacement utilisée par le bras à 6 axes.

  • set_end_effector_type — Définit le type d’effecteur terminal attaché au bras à 6 axes.

  • set_end_effector_magnet — Engage ou libère l’outil de ramassage magnétique.

  • set_pen_offset — Définit le décalage de l’axe z utilisé avec l’outil Porte-stylo.

  • set_control_stop — Active l’arrêt de contrôle pour le bras à 6 axes.

  • set_timeout — Définit le délai d’attente utilisé par les méthodes de mouvement du bras à 6 axes.

Getters — Renvoie l’état du mouvement, la position, l’orientation et les valeurs de connexion.

  • is_done — Renvoie si le bras à 6 axes a fini de se déplacer.

  • is_crashed — Renvoie si le bras à 6 axes s’est écrasé pendant son déplacement.

  • get_x — Renvoie la position x actuelle de l’effecteur terminal.

  • get_y — Renvoie la position y actuelle de l’effecteur terminal.

  • get_z — Renvoie la position z actuelle de l’effecteur terminal.

  • get_pitch — Renvoie la hauteur actuelle de l’effecteur terminal.

  • get_roll — Renvoie le roulement actuel de l’effecteur terminal.

  • get_yaw — Renvoie le lacet actuel de l’effecteur terminal.

  • can_arm_reach_to — Renvoie si le bras à 6 axes peut atteindre une position spécifiée.

  • can_arm_reach_inc — Renvoie si le bras à 6 axes peut se déplacer d’une distance spécifiée.

  • can_end_effector_reach_to — Renvoie si l’effecteur terminal peut atteindre une orientation spécifiée.

  • can_end_effector_reach_inc — Renvoie si l’effecteur terminal peut pivoter d’une quantité spécifiée.

  • get_timeout — Renvoie la valeur de délai d’attente actuelle utilisée par les méthodes de déplacement.

  • is_connected — Renvoie si le bras à 6 axes est connecté au cerveau V5.

Rappels — Exécuter des fonctions lorsque des événements ARM se produisent.

  • control_stopped — 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é.

Constructeur — Créez manuellement un objet Bras à 6 axes.

  • Arm — Crée un objet Bras à 6 axes.

Actes#

move_to#

La commande move_to 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 can_arm_reach_to avant cette méthode si la position cible peut se trouver en dehors de l’espace de travail accessible du bras à 6 axes.

Usage:
arm1.move_to(x, y, z, wait)

Paramètre

Description

x

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

y

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

z

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

wait

Optionnel. wait=True (par défaut) : le projet attend la fin du déplacement avant de continuer. wait=False  : le déplacement démarre et passe immédiatement à la ligne de code suivante.

# Move the 6-Axis Arm to (40, 140, 210)
arm1.move_to(40, 140, 210)

# Start moving, then print the y-position while the arm moves
arm1.move_to(-100, 200, 100, wait=False)

while not arm1.is_done():
    brain.screen.print(arm1.get_y())
    brain.screen.next_row()
    wait(0.25, SECONDS)

move_inc#

move_inc 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 méthode pour vous déplacer par rapport à la position actuelle de l’effecteur terminal. Utilisez can_arm_reach_inc avant cette méthode si le mouvement risque de placer le bras à 6 axes hors de son espace de travail accessible.

Usage:
arm1.move_inc(x, y, z, wait)

Paramètre

Description

x

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

y

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

z

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

wait

Optionnel. wait=True (par défaut) : le projet attend la fin du déplacement avant de continuer. wait=False  : le déplacement démarre et passe immédiatement à la ligne de code suivante.

# Move the 6-Axis Arm 100 millimeters along the y-axis
arm1.move_inc(0, 100, 0)

move_end_effector_to#

La commande move_end_effector_to 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.

Usage:
arm1.move_end_effector_to(yaw, roll, pitch, wait)

Paramètre

Description

yaw

L’angle de lacet cible, en degrés.

roll

L’angle de roulis cible, en degrés.

pitch

L’angle de tangage cible, en degrés.

wait

Optionnel. wait=True (par défaut) : le projet attend la fin du déplacement avant de continuer. wait=False  : le déplacement démarre et passe immédiatement à la ligne de code suivante.

# Rotate the end effector to 90 degrees of roll
arm1.move_end_effector_to(0, 90, 0)

move_end_effector_inc#

move_end_effector_inc 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 méthode pour effectuer une rotation par rapport au lacet, au roulis ou au tangage actuel de l’effecteur terminal.

Usage:
arm1.move_end_effector_inc(yaw, roll, pitch, wait)

Paramètre

Description

yaw

La variation du lacet, en degrés.

roll

Le changement de roulis, en degrés.

pitch

Le changement de hauteur, en degrés.

wait

Optionnel. wait=True (par défaut) : le projet attend la fin du déplacement avant de continuer. wait=False  : le déplacement démarre et passe immédiatement à la ligne de code suivante.

# Rotate the end effector -50 degrees in pitch
arm1.move_end_effector_inc(0, 0, -50)

Mutateurs#

set_speed#

set_speed définit la vitesse de déplacement utilisée par le bras à 6 axes pour les méthodes de déplacement.

La vitesse du bras à 6 axes est réglée à 50 % au début d’un projet.

Usage:
arm1.set_speed(speed)

Paramètre

Description

speed

La vitesse de déplacement du bras à 6 axes, de 1 à 100 pour cent.

# Set the 6-Axis Arm speed to 30%
arm1.set_speed(30)

set_end_effector_type#

set_end_effector_type définit le type d’effecteur terminal attaché au bras à 6 axes.

Lorsque le type d’effecteur est modifié, le bras à 6 axes ajuste automatiquement son décalage Z en fonction de l’outil sélectionné. Le type d’effecteur est défini sur MAGNET au début d’un projet.

Usage:
arm1.set_end_effector_type(type)

Paramètre

Description

type

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

# Set the end effector type to the Pen Holder Tool
arm1.set_end_effector_type(PEN)

set_end_effector_magnet#

set_end_effector_magnet engage ou libère l’outil de ramassage magnétique.

The magnet state stays active until another set_end_effector_magnet method changes it. The magnet state is reset to False at the start of a project.

Usage:
arm1.set_end_effector_magnet(state)

Paramètre

Description

state

L’état de l’outil de ramassage magnétique : True pour ramasser et maintenir des objets ou False pour laisser tomber tout objet tenu et arrêter de ramasser de nouveaux objets.

# Pick up objects and then drop them
arm1.set_end_effector_type(MAGNET)
arm1.set_end_effector_magnet(True)
wait(2, SECONDS)
arm1.set_end_effector_magnet(False)

set_pen_offset#

set_pen_offset 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 méthode, définissez le type d’effecteur sur PEN Si l’outil Porte-stylo n’est pas sélectionné, cette méthode 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. Au début d’un projet, ce décalage est défini sur 0Un décalage de 0 place l’origine de l’axe Z du bras au point de connexion du porte-stylo au bras à 6 axes.

Usage:
arm1.set_pen_offset(zOffset)

Paramètre

Description

zOffset

Valeur du décalage du stylo en millimètres.

# Set the end effector type to the Pen Holder Tool and set the pen offset
arm1.set_end_effector_type(PEN)
arm1.set_pen_offset(25)

set_control_stop#

set_control_stop active l’arrêt de contrôle pour le bras à 6 axes.

Lorsque l’arrêt de contrôle est activé, le bras à 6 axes arrête immédiatement tout mouvement et n’exécutera plus aucune méthode de mouvement du bras jusqu’à ce que le projet soit redémarré.

Usage:
arm1.set_control_stop(state)

Paramètre

Description

state

Facultatif. True (par défaut) active l’arrêt contrôlé. False désactive l’arrêt contrôlé.

# Stop the 6-Axis Arm and prevent further movement
arm1.set_control_stop()

set_timeout#

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

Usage:
arm1.set_timeout(timeout, units)

Paramètre

Description

timeout

La nouvelle valeur de délai d’attente.

units

Facultatif. L’unité de temps : MSEC (millisecondes, par défaut), SECONDSou SEC.

# Set the 6-Axis Arm timeout to 2 seconds
arm1.set_timeout(2, SECONDS)

Getters#

is_done#

is_done indique si le bras à 6 axes a terminé son mouvement.

Cette méthode est utile après qu’une méthode de mouvement soit appelée avec wait=False.

  • True — Le bras à 6 axes a terminé son mouvement.

  • False — Le bras à 6 axes est toujours en mouvement.

Usage:
arm1.is_done()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Display the 6-Axis Arm's y-position while it moves
arm1.move_to(-100, 200, 100, wait=False)

while not arm1.is_done():
    brain.screen.print(arm1.get_y())
    brain.screen.next_row()
    wait(0.25, SECONDS)

is_crashed#

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

  • True — Le bras à 6 axes s’est écrasé.

  • False — Le bras à 6 axes ne s’est pas écrasé.

Usage:
arm1.is_crashed()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Quickly move to a new location
arm1.set_speed(100)
arm1.move_to(-30, 240, 40, wait=False)

# While moving, check for a crash
while True:
    if arm1.is_crashed():
        # Indicate a crash with the Brain screen
        brain.screen.print("Crash Detected")
        break

    wait(5, MSEC)

get_x#

get_x renvoie la position x actuelle de l’effecteur terminal en millimètres.

Utilisez cette méthode pour lire la position actuelle de l’effecteur terminal le long de l’axe x.

Usage:
arm1.get_x()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Print the current x position of the 6-Axis Arm
brain.screen.print(arm1.get_x())

get_y#

get_y renvoie la position y actuelle de l’effecteur terminal en millimètres.

Utilisez cette méthode pour lire la position actuelle de l’effecteur terminal le long de l’axe y.

Usage:
arm1.get_y()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Print the current y position of the 6-Axis Arm
brain.screen.print(arm1.get_y())

get_z#

get_z renvoie la position z actuelle de l’effecteur terminal en millimètres.

Utilisez cette méthode pour lire la position actuelle de l’effecteur terminal le long de l’axe z.

Usage:
arm1.get_z()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Print the current z position of the 6-Axis Arm
brain.screen.print(arm1.get_z())

get_pitch#

get_pitch renvoie le pas actuel de l’effecteur terminal en degrés.

Usage:
arm1.get_pitch()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Print the current pitch of the end effector
brain.screen.print(arm1.get_pitch())

get_roll#

get_roll renvoie le roulis actuel de l’effecteur terminal en degrés.

Usage:
arm1.get_roll()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Print the current roll of the end effector
brain.screen.print(arm1.get_roll())

get_yaw#

get_yaw renvoie le lacet actuel de l’effecteur terminal en degrés.

Usage:
arm1.get_yaw()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Print the current yaw of the end effector
brain.screen.print(arm1.get_yaw())

can_arm_reach_to#

La fonction can_arm_reach_to 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 méthode pour vérifier une position cible avant d’utiliser move_to.

  • True — Le bras à 6 axes peut atteindre la position demandée.

  • False — Le bras à 6 axes ne peut pas atteindre la position demandée.

Usage:
arm1.can_arm_reach_to(x, y, z)

Paramètre

Description

x

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

y

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

z

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

# Move the 6-Axis Arm to (100, -20, 50) if it can reach
if arm1.can_arm_reach_to(100, -20, 50):
    arm1.move_to(100, -20, 50)

can_arm_reach_inc#

can_arm_reach_inc indique 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 méthode pour vérifier un mouvement relatif avant d’utiliser move_inc.

  • True — Le bras à 6 axes peut effectuer le mouvement demandé.

  • False — Le bras à 6 axes ne peut pas effectuer le mouvement demandé.

Usage:
arm1.can_arm_reach_inc(x, y, z)

Paramètre

Description

x

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

y

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

z

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

# Increment the 6-Axis Arm 100 mm along the x-axis if possible
if arm1.can_arm_reach_inc(100, 0, 0):
    arm1.move_inc(100, 0, 0)

can_end_effector_reach_to#

can_end_effector_reach_to renvoie si l’effecteur terminal peut pivoter vers une orientation de lacet, de roulis et de tangage spécifiée.

Utilisez cette méthode pour vérifier une orientation cible avant d’utiliser move_end_effector_to.

  • True — L’effecteur terminal peut atteindre l’orientation demandée.

  • False — L’effecteur terminal ne peut pas atteindre l’orientation demandée.

Usage:
arm1.can_end_effector_reach_to(yaw, roll, pitch)

Paramètre

Description

yaw

L’angle de lacet cible, en degrés.

roll

L’angle de roulis cible, en degrés.

pitch

L’angle de tangage cible, en degrés.

# Rotate the end effector to 90 degrees of roll if possible
if arm1.can_end_effector_reach_to(0, 90, 0):
    arm1.move_end_effector_to(0, 90, 0)

can_end_effector_reach_inc#

can_end_effector_reach_inc 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 méthode pour vérifier un mouvement d’orientation relative avant d’utiliser move_end_effector_inc.

  • True — L’effecteur terminal peut effectuer la rotation demandée.

  • False — L’effecteur terminal ne peut pas effectuer la rotation demandée.

Usage:
arm1.can_end_effector_reach_inc(yaw, roll, pitch)

Paramètre

Description

yaw

La variation du lacet, en degrés.

roll

Le changement de roulis, en degrés.

pitch

Le changement de hauteur, en degrés.

# Increment the end effector by 10 degrees of pitch if possible
if arm1.can_end_effector_reach_inc(0, 0, 10):
    arm1.move_end_effector_inc(0, 0, 10)

get_timeout#

get_timeout renvoie la valeur de délai d’attente utilisée par les méthodes de mouvement du bras à 6 axes en millisecondes.

Usage:
arm1.get_timeout()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Print the current movement timeout in milliseconds
brain.screen.print(arm1.get_timeout())

is_connected#

is_connected indique si le bras à 6 axes est connecté au cerveau V5.

  • True — Le bras à 6 axes est connecté au cerveau V5.

  • False — Le bras à 6 axes n’est pas connecté au cerveau V5.

Usage:
arm1.is_connected()

Paramètres

Description

Cette méthode ne comporte aucun paramètre.

# Print whether the 6-Axis Arm is connected
brain.screen.print(arm1.is_connected())

Rappels#

control_stopped#

control_stopped enregistre une fonction qui s’exécute lorsque l’arrêt du contrôle est activé.

Cette méthode renvoie une instance de la classe Event.

Usage:
arm1.control_stopped(callback, arg)

Paramètre

Description

callback

Une fonction précédemment définie qui s’exécute lorsque l’arrêt du contrôle est activé.

arg

Facultatif. Un tuple contenant les arguments à transmettre à la fonction de rappel. Voir Utilisation des fonctions avec paramètres pour plus d’informations.

# Define a function to run when control stop is enabled
def when_control_stopped():
    brain.screen.print("The arm has been control stopped")

# Run when_control_stopped when the 6-Axis Arm is control stopped
arm1.control_stopped(when_control_stopped)

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.

Usage:
arm1.crashed(callback)

Paramètre

Description

callback

Une fonction définie précédemment qui s’exécute lorsqu’un plantage est détecté.

# Define what happens if a crash is detected
def arm_crash():
    brain.screen.print("Crash Detected")

# Run arm_crash when the 6-Axis Arm crashes
arm1.crashed(arm_crash)

Constructeurs#

Arm#

La commande Arm crée un objet Bras à 6 axes. Ce bras à 6 axes doit être construit manuellement dans VEXcode V5 avant de pouvoir être utilisé dans un projet.

Usage:
Arm(smartport)

Paramètre

Description

smartport

Le Smart Port auquel le bras à 6 axes est connecté est écrit sous la forme Ports.PORTx, où x est le numéro de port.

# Construct a 6-Axis Arm named arm1 with the Arm class
arm1 = Arm(Ports.PORT1)