Actionner des servomoteurs Dynamixel avec RoboPlus task
Dans cet exemple, nous utilisons deux servomoteurs Dynamixel montés dans une configuration pan-tilt et nous utilisons les boutons d'un contrôleur Dynamixel (CM-5, CM-510 ou CM-530, attention, le contrôleur CM-700 ne possède pas de boutons) pour le commander.
Nous allons donc voir la commande directe des servomoteurs Dynamixel, la création de fonctions dans RoboPlus et l'utilisation de conditions. Ce tutoriel suppose que vous possédez les bases de l'utilisation de RoboPlus avec des servomoteurs Dynamixel. Si ce n'est pas le cas, commencez par ce tutoriel.
Montage mécanique des servomoteurs Dynamixel en configuration pan-tilt
Montez vos servomoteurs Dynamixel afin d'obtenir la configuration suivante:
Attention à bien mettre la valeur 0 des servomoteurs selon les axes suivants:
Un manuel détaillé du montage est disponible ici.
Programmation des servomoteurs Dynamixel en configuration pan-tilt
Détectez vos servomoteurs avec RoboPlus Manager puis ouvrez un nouveau fichier dans RoboPlus task.
Nous allons créer une fonction pour initialiser les positions des moteurs puis, dans la fonction principale, nous réagirons aux pressions sur les différents boutons en commandant les mouvements des servomoteurs.
Double-cliquez sur une ligne du fichier task en dehors du programme principal (le bloc 'START PROGRAM') et choisissez l'instruction 'Make function'. Appelez votre nouvelle fonction 'InitialAction'.
Dans cette fonction, nous allons initialiser les vitesses des deux servomoteurs et les mettre en position médiane: 512 si le capteur de position possède 1024 positions, 2048 pour les servomoteurs Dynamixel de la gamme MX, dont le capteur possède 4096 positions. Utilisez l'instruction 'Load (assignment value)' pour réaliser ces actions. L'asservissement ('torque enable') de vos servomoteurs est normalement activé par défaut.
Nous voulons ensuite attendre que les servomoteurs aient atteint leur position avant de passer à autre chose. Nous allons utiliser l'instruction 'Conditional stand', puis vérifier la valeur 'moving' de chaque moteur.
L'instruction ci-dessus signifie: 'Attends tant que le moteur 1 est en train de bouger ou que le moteur 2 est en train de bouger'. Il faut donc bien que les deux moteurs aient achevé leurs mouvements pour que l'attente se termine.
Dans le programme principal, faites un appel à la fonction InitialAction, puis créez une boucle infinie.
Dans cette boucle, si l'un des boutons du contrôleur est actionné, nous allons donner un ordre de mouvement aux moteurs.
Il faut d'abord vérifier que l'ordre que nous donnons ne dépasse pas les capacités du servomoteur. Pour éviter des collisions, nous allons le contraindre entre les positions 310 et 710. Il faut utiliser l'instruction 'compute (arithmetic or bit)' pour faire une opération sur un valeur (ici une addition) et l'assigner à une autre valeur (ou à la même, ici la position cible du moteur).
Il faut bien sur adapter les ID des servomoteurs ainsi que le sens de modification de la position cible en fonction du montage de vos servomoteurs.
Le programme complet est disponible ici.
Utilisation de RoboPlus Motion pour créer des mouvements pour vos robots à base de servomoteurs Dynamixel
RoboPlus Motion est un outil vous permettant de gérer les mouvements de votre robot. Il vous permet de créer et d'enregistrer des séquences qui pourrons être envoyées au contrôleur (sous forme de fichier motion *.mtn) et exécutés par le robot.
Mettez votre contrôleur en mode 'edit' ou 'program' (selon les contrôleurs). Puis, dans RoboPlus Motion, choisissez le bon port COM (ou effectuez une recherche) et cliquez sur le bouton 'connect'.
RoboPlus motion vous ouvre automatiquement le fichier motion déjà présent dans votre contrôleur. Si la partie gauche de la fenêtre reste grise, c'est que vous n'avez pas encore de fichier motion dans votre contrôleur.
L'espace de travail de RoboPlus motion est alors divisé en 3 zones.
La zone de gestion des séquences de RoboPlus Motion
La zone de gauche montre tout ce qui est contenu dans un fichier motion (et donc ce qui est envoyé au robot). Elle contient jusqu'à 255 séquences de mouvements, également appelées 'motion pages' (par exemple, lève le bras, fait un pas, ouvre la pince...).
Vous pouvez donner un nom à chaque séquence et préciser quelle séquence vient ensuite en mettant le numéro de la séquence suivante dans 'next'. Une séquence est limitée à 7 steps comme expliqué ensuite, donc des mouvements complexes doivent être divisés en plusieurs séquences.
La colonne 'exit' permet de définir un mouvement dans le cas où l'exécution est stoppée en plein milieu : vous pouvez définir un mouvement d'arrêt pour éviter au robot de s'arrêter brutalement dans une position instable.
La zone de création des séquences de RoboPlus Motion
La zone du milieu permet de gérer le contenu des séquences.
Chaque séquence contient entre 0 et 7 steps. On peut ajouter, supprimer ou déplacer les steps grâce aux boutons, on peut les copier et les coller (dans des steps déjà existants).
Un 'step' contient :
- Une 'pose', c'est à dire des valeurs de position pour les servomoteurs, définies dans la partie 'pose editor', la plus à droite
- Un temps d'exécution, entre 0.072 et 2.04 secondes, le temps que le robot prend pour atteindre la pose. Plus ce temps est court, plus le mouvement sera brusque. Vous pouvez le modifier avec le second slider.
- Un temps de pause, pendant lequel le robot restera immobile avant de commencer le mouvement suivant. Le temps de pause est compris entre 0 et 2.04 secondes. Vous pouvez le modifier avec le premier slider.
La partie basse de la zone du milieu s'applique à toute la séquence. Elle vous permet de définir le nombre de fois que le mouvement doit être répété, le 'speed ratio' pour effectuer toute la séquence plus ou moins vite (alors que le temps d'exécution d'une pose ne concerne qu'une partie de la séquence) et l'accélération maximale (appelée 'Ctrl Inertial force'). Ce paramètre prends des valeurs entre 0 et 127, avec 32 par défaut. Plus la valeur est élevée, plus l'accélération sera faible et le mouvement progressif, plus la valeur est faible, plus l'accélération pourra être forte.
Le programme calcule automatiquement le temps nécessaire pour exécuter le mouvement.
Vous pouvez également choisir le niveau de compliance du servomoteur : plus le nombre est faible, plus le couple développé sera faible. Cela permet des mouvements plus fluides mais n'est pas recommandé pour des mouvements de marche par exemple. La valeur varie de 1 (couple très faible) à 7 (couple très fort).
La zone de création des poses pour les servomoteurs Dynamixel
La zone de droite est la zone de création des poses. C'est ici que vous allez pouvoir définir la position de chaque servomoteur pour chaque step.
Elle comprends deux listes de positions de servomoteurs. La liste la plus à droite, nommée 'pose of robot' montre les positions actuelles de vos servomoteurs. Vous pouvez désactiver le couple (pour bouger vos robots à la main) en cliquant sur l'ampoule éteinte en bas.
La liste à gauche est nommée 'pose of step'. Elle contient les valeurs de la position sur laquelle vous êtes en train de travailler.
Les deux flèches vertes vous permettent soit d'appliquer la pose au robot (flèche du haut), soit d'enregistrer la position du robot en temps que pose (flèche du bas).
Les deux autres onglets sont :
- 'Pose Utility' qui contient un simulateur de robot pour les modèles Bioloid standards
- 'Edit all pages' qui permet de modifier toutes les 'motion pages' à la fois, pour ajouter ou supprimer un servomoteur ou pour changer la résolution d'un capteur (selon le modèle de servomoteur).
Utilisation du fichier Motion dans RoboPlus task pour actionner les servomoteurs Dynamixel
Une fois que vous avez défini vos poses, vos steps et vos motion pages, vous pouvez télécharger le fichier dans votre robot en utilisant la flèche verte. Si vous travaillez déjà dans le fichier présent dans le contrôleur, vous pouvez lancer le fichier directement avec le triangle rouge.
Pour lancer votre fichier motion depuis un programme task, utilisez l'instruction 'load (assignment value)' et assignez à 'motion page' le numéro correspondant à la séquence à exécuter.