Sommaire :
- Matériel utile pour suivre les tutoriels
- Modification de l’identifiant du servo
- Etude des deplacements de la tête avec les servo Dynamixel
- Pilotage d’un Dynamixel par le biais d’un potentiometre
- Retour au menu
Matériel utile pour suivre les tutoriels |
.
ArbotiX-M Robocontroller
Spécifications techniques du Robocontroller ArbotiX-M :
- Microcontrôleur AVR 16 MHz (ATMEGA644p).
- 2 ports série, 1 dédié aux servo-contrôleurs Dynamixel, l’autre au module radio Xbee.
- 32 E / S, dont 8 peuvent fonctionner comme entrées analogiques.
- Embases servo 3 broches (Gnd, Vcc, signal), sur les 8 entrées analogiques et sur les 8 E / S numériques.
- Deux pilotes de moteur 1 A avec en-têtes moteur / encodeur combinés.
- Module radio Xbee vendu séparément. Une installation typique nécessite 2 modules radio Xbee et un module explorateur Xbee pour vous permettre de contrôler votre robot à distance depuis votre ordinateur.
- Ce contrôleur nécessite l’utilisation d’un câble FTDI ou ISP. Nous recommandons la carte de déploiement FTDI 3,3 V avec connecteur à 6 broches.
- Avec des dimensions de 7,11 × 7,11 cm (2,8 « × 2,8 »), ce contrôleur a été conçu pour être utilisé avec les servomoteurs Dynamixel .
Ressources pour le Robocontroller ArbotiX-M
Le Robocontroller ArbotiX-M peut être utilisé avec l’environnement de développement Arduino. Un certain nombre de bibliothèques permettant de contrôler les servomoteurs AX-12 sont disponibles dans la liste de téléchargement ci-dessous.
- Manuel d’utilisation du Robocontroller ArbotiX-M
- Site Web Google Code avec des instructions pour télécharger et configurer le logiciel ArbotiX-M
Module joystick Gravity DFR0061
Module joystick Gravity DFRobot basé sur 2 potentiomètres (axes X et Y) et d’un bouton-poussoir pour des applications spécifiques. Il délivre deux sorties analogiques en fonction de la position des deux potentiomètres et une sortie logique en fonction du bouton-poussoir. Il est livré avec 3 cordons.
- Alimentation : 5 Vcc
- Sorties : 2 analogiques et 1 digitale
- Dimensions : 37 x 32 x 25 mm
Référence DFRobot: DFR0061
Remarque: la nouvelle version du mappage des broches du port du capteur analogique a été modifiée comme ci-dessous :
.
Retour en haut de page
Etude des deplacements de la tête avec les servo Dynamixel |
.
Materiel utile pour le tuto :
- Un module ArbotiX-M Robocontroller
.
Nous allons vous initiez à lire les registres se trouvant à l’intérieur du servomoteur qui nous permet de définir le déplacement de notre servo , ceci afin de déterminer la butée basse et haute que l’on devra appliquer par logiciel pour les mouvements de la tête.
Pour pouvoir lire ses registres, il faut déverrouiller le couple afin pouvoir déplacer la base de la tête de L3 -37 manuellement Avant de se lancer dans l’explication du programme, nous allons vous faire une démonstration du déverrouillage et de la lecture des registres de déplacement par le biai du tuto ci-dessous .
.
.
Programme :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
// // //************************************************************* //* //* IDE Arduino 1.0.6 //* //* Mesure de deplacement des moteurs dynamixel //* et verouillage du couple //* //* H-Mazelin //* 29/10/2020 //* //************************************************************* //librairie qui permet d'implémentez le code de communication série //de bas niveau pour communiquer avec le bus Bioloid. #include <ax12.h> //Cette librairies vous permet interagir avec les servos AX et MX #include <BioloidController.h> // definition de la vitesse de transmission // le debit en bauds détermine la vitesse de communication serie entre // le controleur et le servo Dynamixel BioloidController bioloid = BioloidController(1000000); /* * Un programme Arduino doit impérativement contenir cette fonction * Elle ne sera exécuter une seule fois au démarrage du microcontroleur * Elle sert à configurer globalement les entrées sorties * */ void setup () { //ouvre le port série et fixe le debit de communication à 9600 bauds Serial.begin(9600); // on attent que le port de communication soit pret delay(5000); // Information a l'operateur de l'ouverture du port de communication // sur le moniteur serie Serial.println("========================================"); Serial.println("Communication etablie"); Serial.println("========================================"); // Lecture de la temperature du servo de droite actuel int temperature_d =ax12GetRegister(2,43,1); // Lecture de la temperature du servo de gauche actuel int temperature_g =ax12GetRegister(3,43,1); // Affichage de la lecture des registres contenant la temperature Serial.print("Temperature du servo de droite : "); Serial.print(temperature_d);Serial.println(" Degres"); Serial.print("Temperature du servo de gauche : "); Serial.print(temperature_g);Serial.println(" Degres"); Serial.print(" "); Serial.println("Demarrage *********************"); // Procedure d'ecriture dans le registre 24 pour desactiver le couple // // modification de la valeur 1 par la valeur 0 // 1 parametre : numero d'identifiant du servo // 2 parametre : numero de registre a modifier // 3 parametre : Active ou desactive le couple ax12SetRegister(2,24,0); ax12SetRegister(3,24,0); Serial.println("Couple desactive sur le moteur de droite et de gauche"); } /* *Le programme principal s’exécute par une boucle infinie appelée Loop () * */ void loop() { // Procedure de lecture pour la position du servo dans le registre 36 // // // 1 parametre : numero d'identifiant du servo // 2 parametre : numero de registre a lire // 3 parametre : nombre d'octet a lire int deplacement_d =ax12GetRegister(2,36,2); int deplacement_g =ax12GetRegister(3,36,2); // Affichage de la lecture des registres contenant le deplacement Serial.print("Deplacement du moteur de gauche : "); Serial.print(deplacement_g);Serial.print(" en points "); Serial.print("Deplacement du moteur de droite : "); Serial.print(deplacement_d);Serial.println(" en points "); } |
.
Retour en haut de page.
.
Pilotage d’un Dynamixel par le biais d’un potentiometre |
.
Ce tutoriel a pour but de vous initier à la programmation des servomoteurs Dynamixel . Nous avons pris comme base la tête de L3 -37 qui est une réalisation de RedOhm pour vous expliquer l’étalonnage et le fonctionnement pour piloter celle-ci avec un joystick. Le tuto s’articule en 4 phases :
la première étant la présentation de la base de la tête, le câblage d’un joystick et la carte contrôleur, vous avez aussi une explication sur le fonctionnement de la manette de jeu, et enfin une explication détaillée du programme.
.
.
Materiel utile pour le tuto :
- Un module ArbotiX-M Robocontroller
-
Module joystick Gravity DFR0061
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
// // //************************************************************* //* //* IDE Arduino 1.0.6 //* //* Exemple de pilotage d'un servo Dynamixel //* avec un joystick pour la tete de L3-37 //* //* H-Mazelin //* 16/11/2020 //* //************************************************************* //librairie qui permet d'implémenter le code de communication série //de bas niveau pour communiquer avec le bus Bioloid. #include <ax12.h> //Cette librairie vous permet interagir avec les servos AX et MX #include <BioloidController.h> // definition de la vitesse de transmission // le debit en bauds détermine la vitesse de communication serie entre // le controleur et le servo Dynamixel BioloidController bioloid = BioloidController(1000000); // broche sur lequel est branche le potentiometre const int broche1 = A1; const int broche7 = A7; // variable contenant la valeur du potentiometre int valeurPotar1 = 0; int valeurPotar7 = 0; // valeur du potentiometre remis a l'echelle int valeurPotar7_re = 0; int valeurPotar1_re= 0; /* * Un programme Arduino doit impérativement contenir cette fonction * Elle ne sera exécutee une seule fois au démarrage du microcontroleur * Elle sert à configurer globalement les entrées sorties * */ void setup () { //ouvre le port série et fixe le debit de communication à 9600 bauds Serial.begin(9600); // on attent que le port de communication soit pret delay(5000); // Information a l'operateur de l'ouverture du port de communication // sur le moniteur serie Serial.println("========================================"); Serial.println("Communication etablie"); Serial.println("========================================"); // Lecture de la temperature du servo de droite actuel int temperature_d =ax12GetRegister(2,43,1); // Lecture de la temperature du servo de gauche actuel int temperature_g =ax12GetRegister(3,43,1); // Affichage de la lecture des registres contenant la temperature Serial.print("Temperature du servo de droite : "); Serial.print(temperature_d);Serial.println(" Degres"); Serial.print("Temperature du servo de gauche : "); Serial.print(temperature_g);Serial.println(" Degres"); Serial.print(" "); Serial.println("Demarrage *********************"); } /* *Le programme principal s’exécute par une boucle infinie appelée Loop () * */ void loop() { // lecture de la valeur du potentiomètre (valeur entre 0 et 1023) valeurPotar1=analogRead( broche1); valeurPotar7=analogRead( broche7); // mise a l'échelle (valeur entre 0 et 300 // Ré-étalonne un nombre d'une fourchette de valeur vers une autre fourchette. // Ainsi, une valeur basse source sera étalonnée en une valeur basse de destination valeurPotar7_re = map( valeurPotar7,0,1023,0,350); valeurPotar1_re = map( valeurPotar1,0,1023,0,350); // Affichage de la valeur des potentiometre Serial.print("A7 - deplacement en x du potentiometre x -> "); Serial.println(valeurPotar7); Serial.print("A1 - deplacement en y du potentiometre x -> "); Serial.println(valeurPotar1); // Affichage de la valeur re-etalonne des potentiometre Serial.print("A7 - Re-etalonne le deplacement en x du potentiometre -> "); Serial.println(valeurPotar7_re); Serial.print("A7 - Re-etalonne le deplacement en y du potentiometre -> "); Serial.println(valeurPotar1_re); // envoie l'information de deplacement au servomoteur dynamixel340 SetPosition(2,340+valeurPotar7_re); // envoie l'information de deplacement au servomoteur dynamixel // moteur de gauche SetPosition(3,340+valeurPotar1_re); // Affichage du code pour le moteur x avec le calcul Serial.print("Valeur de la position du moteur x => SetPosition(3,340+"); Serial.print(valeurPotar7_re); Serial.println(");"); Serial.print("Valeur du deplacement de moteur x => "); Serial.println(340 + valeurPotar7_re) ; Serial.println(""); Serial.print("Valeur de la position du moteur y => SetPosition(3,340+"); Serial.print(valeurPotar1_re); Serial.println(");"); Serial.print("Valeur du deplacement de moteur y => "); Serial.println(340 + valeurPotar1_re) ; Serial.println("------------------"); delay (100); } |
.
Retour en haut de page.