Programmez le \l;robot\u object\bottr; pour qu'il trouve toutes les \l;croix bleues\u object\waypoint; posΘes au sol. DΦs que le robot est sur une croix, elle disparaεt. Le principe α utiliser est le suivant :
RΘpΘter α l'infini :
o Chercher une croix
o Si rien n'est trouvΘ, stopper
o Calculer la direction de la croix
o Donner une consigne de vitesse aux moteurs pour se diriger dans la bonne direction
\b;Le programme
La boucle infinie s'Θcrit avec \c;\l;while\u cbot\while;\n; :
\s;\c;while ( true )
\s;{
\s; \n;instructions...\c;
\s;}
\n;
L'instruction \c;\l;radar\u cbot\radar;\n; dΘtecte un objet. Cette instruction reτoit de 1 α 6 paramΦtres. Dans notre cas, il suffit de spΘcifier le premier paramΦtre, pour dΘtecter toutes les croix :
\s;\c;spot = radar(WayPoint);
\n;
Si toutes les croix sont trouvΘes, \c;radar\n; retourne un \l;objet nul\u cbot\null;, qu'il faut dΘtecter comme suit avec un \c;\l;if\u cbot\if;\n; :
\s;\c;if ( spot == null ) // plus rien ?
\s;{
\s; motor(0, 0); // stoppe
\s; break;
\s;}
\n;L'instruction \c;\l;break\u cbot\break;\n; sort de la boucle infinie \c;while ( true )\n;.
Le calcul de la direction est obtenu par l'instruction \c;\l;direction\u cbot\direct;(point)\n;, qui retourne l'angle permettant d'orienter le \l;robot\u object\bottr; vers le point spΘcifiΘ. La coordonnΘe de l'objet s'obtient simplement avec \c;spot.position\n;. La ligne suivante met donc dans la \l;variable\u cbot\var; \c;dir\n; l'angle correspondant α la direction de la croix :
\s;\c;dir = direction(spot.position);
\n;
L'angle obtenu est positif si le point est α gauche, et nΘgatif s'il est α droite. Si la croix α atteindre est α gauche, il faut donner une consigne de vitesse maximale au moteur droite, et une consigne proportionnelle α l'angle au moteur gauche :
direction = \c; 0\n; -> vitesse = \c; 1.0\n;
direction = \c; 45\n; -> vitesse = \c; 0.5\n;
direction = \c; 90\n; -> vitesse = \c; 0.0\n;
direction = \c;135\n; -> vitesse = \c;-0.5\n;
direction = \c;180\n; -> vitesse = \c;-1.0\n;
Le diagramme ci-dessous montre les consignes aux moteurs gauche et droite selon l'angle, pour l'instruction \c;\l;motor\u cbot\motor;\n; :
\image radar2 14 10;
Si la croix est droit devant, la direction vaut 0 degrΘs. Les deux moteurs recevront les consignes 1 et 1, ce qui signifie avancer tout droit α la vitesse maximale. Si la croix est derriΦre, la vitesse du moteur droite sera -1. Le \l;robot\u object\bottr; effectue donc un demi-tour par la droite, ce qui est bien le comportement souhaitΘ. L'\l;expression\u cbot\expr; \c;1+dir/90\n; donne exactement le rΘsultat souhaitΘ.
\s;\c;if ( dir < 0 ) // α droite ?
\s;{
\s; motor(1, 1+dir/90); // tourne plus ou moins
\s;}
\n;
Le mΩme raisonnement s'applique lorsque la direction est positive, comprise entre 0 et 180 degrΘs, et que la croix est α gauche. A vous de trouver les instructions nΘcessaires.
\s;\c;else // α gauche ?
\s;{
\s; \n;α vous de trouver ...\c;
\s;}
\n;
Pour que ce programme fonctionne, il faut encore dΘclarer toutes les variables utilisΘes, au dΘbut. \c;spot\n; est de type \c;\l;object\u cbot\object;\n;, alors que \c;dir\n; est de type \c;\l;float\u cbot\float;\n;.
\key;\key help;\norm; permet de revoir ces instructions en tout temps !
\t;Voir aussi
\l;Commandes\u command; et \l;programmation\u cbot;.