Accueil arrow ER1 Evolution Robotics arrow Commander le robot ER1 en C++

Le Podcast des robots et de l'intelligence artificielle
Talking Robots







Intelligence artificielle


Rechercher



WebSite  
  



Commander le robot ER1 en C++ Version imprimable Suggérer par mail
20-08-2006

L'API officielle fournit par Evolution Robotics utilise directement l'application fournie avec le robot. Pour pouvoir commander l'ER1, l'API dialogue avec cette application par une connexion telnet, qui permet alors d'accéder à toutes les fonctionnalités de l'application avec quelques restrictions toutefois. En premier lieu, les commandes que l'on peut envoyer aux moteurs ne permettent pas de tourner et d'avancer en même temps. De plus, les commandes qui permettent de tourner et d'avancer doivent être envoyées en degrés et en cm. Bien que cela puisse être d'abord un avantage de simplicité, cette limitation devient vite gênante quand on veut exécuter au robot des mouvements précis et optimisés, comme le contour d'un obstacle.

Même si Evolution Robotics ne fournit pas le code de son API, il existe une solution de contournement, qui permet pour le coup de se passer complètement de l'application d'Evolution Robotics. Attention toutefois, on pert également la partie détection d'objets de l'api d'Evolution Robotics. Cette API alternative a été codée par reverse engineering, en écoutant le port usb qui est relié aux RCM, le petit boitier situé sous le robot.

 


Image
Le RCM dans son boitier
 
Image
Détail de la carte carte

L'auteur de cette API est Yau Lam Yiu. Elle est disponible en téléchargement sur sa page  http://www.cs.ust.hk/~yiu/robot/. Le code est développé pour Microsoft Visual C++ 6 et est facilement portable sur les versions ultérieures du framework.

Il existe également une version Linux que je n'ai pas encore testé, disponible sur http://robotics.naist.jp/~osamu-m/software/er1-linux/.

Voila ci-dessous le code nécessaire pour initialiser et faire avancer le robot.
On commence d'abord par l'initialisation du port et du moteur.
RCMotion RCDev;
   dwErr=RCMDev.RCMInit("COM4");
   RCMDev.WheelInit();
 


Aprés cette initialisation, on peut directement utiliser les fonctions disponibles pour avancer et tourner :
Voici la commande moteur pour avancer

RCMDev.WheelSetVelocity(0x0001F77E);
RCMDev.WheelUpdate();
 


(attention, le robot ne va pas s'arréter à moins d'envoyer la commande RCMDev.WheelSetVelocity(0x0);)


Et voici la commande moteur tourner sur place
RCMDev.WheelSetTurn(0x0001F77E);
RCMDev.WheelUpdate();
 


Enfin voici les deux lignes nécessaires pour arrêter les moteurs.
RCMDev.WheelSetVelocity(0x0);
   RCMDev.WheelSetPower(0x0);
 


Personnellement, la fonctionnalité principale qui m'interessait dans cette api était le fait de pouvoir tourner en avançant. Voici donc la fonction que j'ai ajouté, qui permet de donner une commande différente pour chacun des moteurs.
void RCMotion::WheelSetMove(DWORD dwLeft, DWORD dwRight )
{
WheelSetPower(0x4CC0);
SendCmd_DW(1,SetVelocity,dwLeft);
SendCmd_DW(0,SetVelocity,dwRight);
}
 

À vous ensuite de calculer les valeurs dwLeft et dwRight afin de donner le rayon de courbure que vous souhaitez. Pour cela, il faut utiliser un modèle d'odométrie pour roues différentielles.

commentaire(s)

Commenter
  • Veuiller laisser un commentaire en relation avec l'objet.
Nom:
Titre:
BBCode:Web Address Email Address Load Image from Web Bold Text Italic Text Underlined Text Quote Code Open List List Item Close List
Commentaire:



Cette image contient un texte  brouillé , il utilise une combinaison de couleurs, de taille de polices, fond d
Veuillez introduire ce que vous voyez: *
Truc: Cliquer Recharger la page avant d'écrire un texte si vous avez des difficultés pour lire les caractères dans l'image

Powered by AkoComment 2.0! and SecurityImage 3.0.8

 

Publicité


Annuaire informatique Robotique Moteur de Recherche. Inscription Gratuite. Lookdir.net Annuaire du Web Claire Delaunay