Aujourd'hui test de contrôle du contrôleur CM-5 avec l'Arduino.
Passage obligé si je veux pouvoir contrôler et récupérer les information des différents capteurs qui lui seront branchés
Après différentes recherches, je suis tombé sur ce lien qui m'a donc beaucoup aidé
Petite explication :
L'idée consiste à prendre le contrôle du robo en nous faisant passer pour l'ordinateur via la carte Arduino et la fiche mini jack
J'ai donc comme matériel la carte Arduino ainsi qu'une fiche mini jack audio pour la connexion entre l'Arduino et le CM-5
Pour les branchement c'est assez basique
- J'ai branché les deux fils sur les broches 2 et 3
La bibliothèque permettant de communiquer au protocole série via Arduino permet d'échanger à la même vitesse qu'un PC avec le robot, soit 57600 bauds.
Avec le PC il faut mettre le robot en mode “program” à l'aide des boutons de son boîtier. A l'aide de terminal "Robot Terminal, on peut ensuite lancer des animations, des poses, et même interroger les moteurs Dynamixels avec le clavier.
Pour jouer une animation par exemple il faut écrire au clavier
PLAY + le numéro de l'animation (PLAY 10)
Ici la carte Arduino va remplacer le clavier et communiquer à notre place avec le contrôleur du robot en lui envoyant des animation à jouer
Les animations ont déjà été paramétrées avec le logiciel RoboPlus Motion et sont enregistrées dans le CM-5
Il reste à coder l'Arduino afin qu'il donne des ordres au Contrôleur CM-5 de Robotis
// Bibliothéque de communication série
#include <SoftwareSerial.h>
#define Assis 1
#define Debout 2
byte roby_position;
SoftwareSerial roby(2,3, true);
// Initialisation des propriétés
void setup(){
Serial.begin(57600);
roby.begin(57600);
// On initialise la position de Roby à "Assis"
roby_position = Assis;
}
// Boucle principale
void loop(){
if (roby.available()){
// Récupération du message envoyé par Roby
Serial.print((char)roby.read());
roby.flush();
}else{
Serial.println("");
commande();
}
}
void commande(){
// Si Roby est assis on le fait se lever
if (roby_position == Assis){
// Retour chariot
roby.print((byte)13);
roby.println("PLAY 0");
delay(10000);
// Demande à Roby de jouer la chorégraphie 3 "Se lever"
roby.println("PLAY 3");
roby.print((byte)13);
Serial.println("demande de jouer la choregraphie 3 \"Assis_Debout\"");
// On met la position de Roby à Debout
roby_position = Debout;
}
// sinon si Roby est debout on le fait s'assoir
else if (roby_position == Debout){
roby.print((byte)13);
delay(10000);
// Demande à Roby de jouer la chorégraphie 1 "S'assoir"
roby.println("PLAY 1");
roby.print((byte)13);
Serial.println("Demande de jouer la chorégraphie 1 \"Debout_Assis\"");
// On met la position de Roby à Assis
roby_position = Assis;
}
}
- Ici le code est assez simple :
- On initialise la position du robot en position assis afin que le programme est connaissance de sa position
- On récupère les messages du robot pour les afficher dans la moniteur série de l'Arduino
Si le robot ne communique pas avec nous, on joue la méthode commande() qui va commander le robot :
- Si le robot est assis on envoie la commande "PLAY 3" qui correspond à l'animation "Assis_Debout" du CM-5
- Si le robot est debout on envoie la commande "PLAY 5" qui correspond à l'animation "Debout_Assis" du CM-5
( la façon dont se lève et se rassoie Roby à été paramétré vite fait pour la démo donc un peu d'indulgence svp )
Et voilà, nous avons notre robot qui obéit au commande envoyé par l'Arduino
Pour la démo, j'ai donc :
- créé deux animations "Assis_Debout" et "Debout_Assis"
- accroché l'Arduino avec un élastique au niveau de la tête du robot pour ensuite la connectée au CM-5 via la fiche jack
- Envoyé le fichier dans la carte Arduino
- Pour terminer la démo je relance un fichier vide dans l'Arduino