L3-37 : Tutoriel pour la version Dynamixel

.

Sommaire :

 

 

.

separateur-redohm-001

 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.

separateur-redohm-001

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 : 

 

Mappage du Joystik

Mappage du Joystik

.

Retour en haut de page

 

.

separateur-redohm-001

 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 :

//
//
//*************************************************************
//* 
//* 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

.

.

.

separateur-redohm-001

 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

.

//
//
//*************************************************************
//* 
//* 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

.