mardi 15 janvier 2008

MOC : Synchronisation des moteurs NXT

Pour certains robots il est nécessaire de synchroniser 2 moteurs
du NXT :
- Par exemple pour un véhicule tribot à direction différentielle (un moteur pour la roue droite et un moteur pour la roue gauche), si le véhicule doit se déplacer en ligne droite il est indispensable d'avoir les deux moteurs parfaitement synchronisés.
- Dans mon cas je souhaite faire un robot marcheur et pouvant effectuer des virages, il fonctionne beaucoup mieux si les jambes sont synchronisées, il se déplace plus rapidement et est plus stable.

Voici donc le code en NXC, un langage qui ressemble au C (voir ici pour en savoir plus sur NXC) ainsi qu'une vidéo des tests.




#include "NXCDefs.h"
long b,c,t; // attention a utiliser un long au lieu de int
int p;

task main()
{
SetSensor(S1, SENSOR_TOUCH);
// RAZ des compteurs
SetIOMA(OutputIOUpdateFlags(OUT_B), UF_UPDATE_RESET_ROTATION_COUNT);
SetIOMA(OutputIOUpdateFlags(OUT_C), UF_UPDATE_RESET_ROTATION_COUNT);

p=100; // puissance
OnFwd(OUT_BC,p);
b=0;
c=0;

while ( 1 ) // boucle infinie
{
// acquisition position moteurs
b=MotorRotationCount(OUT_B);
c=MotorRotationCount(OUT_C);
// calcul le décalage en degres (t)
t=(c-b)/360;
t=c-b-(360*t);
if ( t >180 ) t=t-360;

if (Sensor(S1)) // on stoppe le moteur B
{
c=MotorRotationCount(OUT_C);
OnFwd(OUT_C,p);
Off(OUT_B);
// attend que le moteur C ait fait presque 1 tour
while ( MotorRotationCount(OUT_C) <>
}
else // moteurs B+C
{
if (t > 30) // marge de 30 degrés avant de stopper un moteur
{
OnFwd(OUT_B,p);
Off(OUT_C);
}
else if (t > 8) // marge de 8 degrés avant de ralentir un moteur
{
OnFwd(OUT_B,p);
OnFwd(OUT_C,p/2);
}
else if (t < -30)
{
OnFwd(OUT_C,p);
Off(OUT_B);
}
else if (t < -8)
{
OnFwd(OUT_C,p);
OnFwd(OUT_B,p/2);
}
else // pas de correction
{
OnFwd(OUT_BC,p);
}
}
}
}


2 commentaires:

  1. Effectivement c'est possible avec le NXT-G. Mais je souhaitais utiliser le NXC car l'exécution du programme est beaucoup plus rapide, je n'ai pas trouvé de fonction en nxc qui permette cela.

    RépondreSupprimer
  2. Bonjour, je viens de découvrir votre site très intéressant. J'ai un RCX et un NXT mais je suis novice. Pouvez vous me dire ce qu'est unle NXT-G ? un langage ? est-il accessible facilement ? que faut il avoir comme matériel ? le NXT a t il évolué au niveau logiciel depuis 2006 ? existe t-il une caméra ? j'ai beaucoup de questions...merci pour votre blog !!!

    RépondreSupprimer

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.