DΘplacer le \l;robot\u object\bottr; le plus rapidement possible, α l'aide de l'instruction \c;motor( )\n;. Il faudra programmer une dΘcΘlΘration en bout de piste, pour ne pas percuter les \l;mines\u object\mine;.
Un programme avec \c;\l;move\u cbot\move;(25);\n; fonctionnerait parfaitement, mais le but est ici d'apprendre le fonctionnement de l'instruction \c;\l;motor\u cbot\motor;\n;.
Cette instruction reτoit deux valeurs :
1) La consigne pour le moteur gauche.
2) La consigne pour le moteur droite.
\s;\c; motor( left, right );
\n;
Il s'agit de deux valeurs comprises entre -1 et 1 :
-1 = marche arriΦre
0 = arrΩt
1 = marche avant
Par exemple, \c;motor(0.5, 0.5);\n; fait avancer le \l;robot\u object\bottr; α mi-vitesse, jusqu'α ce qu'une autre consigne soit donnΘe.
Avec l'instruction \c;motor(0.5, 0.6);\n;, le \l;robot\u object\bottr; avance α mi-vitesse en tournant lΘgΦrement α gauche, puisque le moteur de droite va un peu plus vite (\c;0.6\n;) que le moteur de gauche (\c;0.5\n;).
\b;Principe
L'idΘe consiste α avancer α fond les 23 premiers mΦtres, puis α diminuer progressivement la vitesse les 2 derniers mΦtres.
L'instruction \c;\l;distance\u cbot\dist;(p1, p2);\n; retourne la distance entre deux points. Il suffit donc de mΘmoriser la position de dΘpart, puis de calculer la distance parcourue avec \c;distance(position, start)\n;.
La \l;variable\u cbot\object; \c;position\n; donne la position actuelle du \l;robot\u object\bottr;. Donc, \c;distance(position, start);\n; retourne la distance parcourue.
\b;Marche α suivre
1) MΘmoriser la position de dΘpart :
\s;\c; point start;
\s; start = position;
\n;
2) DΘmarrer α donf :
\s;\c; motor(1, 1);
\n;
3) Faire une boucle infinie \c;\l;while\u cbot\while;\n; :
\s;\c; while ( true )
\s; {
\s; float len = distance(position, start);
\s; if ( len > 25-2 )
\s; {
\s; motor( moins qu'avant ! );
\s; }
\s; }
\n;
Tant que la longueur est plus petite que 23 mΦtres, on n'effectue pas les instructions aprΦs le \c;\l;if\u cbot\if;\n;. Les moteurs conservent donc les consignes initiales \c;\l;motor\u cbot\motor;(1,1);\n;, vitesse maximale.
Pour ralentir progressivement, il faut donner une consigne de vitesse proportionnelle au reste de la distance α parcourir :
o S'il reste \c;2.0\n; mΦtres -> consigne = \c;1.00\n; (maximum)
o S'il reste \c;1.5\n; mΦtres -> consigne = \c;0.75\n;
o S'il reste \c;1.0\n; mΦtre -> consigne = \c;0.50\n;
o S'il reste \c;0.5\n; mΦtre -> consigne = \c;0.25\n;
o S'il reste \c;0.0\n; mΦtre -> consigne = \c;0.00\n; (arrΩt)
\image tdragst1 12 6;
L'\l;expression\u cbot\expr; \c;(25-len)/2\n; est donc parfaite pour cela.
A vous de terminer le programme ...
\b;Remarque
Si les consignes donnΘes sont des valeurs plus grandes que 1, le \l;robot\u object\bottr; n'avance pas plus vite.
\key;\key help;\norm; permet de revoir ces instructions en tout temps !
\t;Voir aussi
\l;Commandes\u command; et \l;programmation\u cbot;.