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.