SuiveurFox : Différence entre versions
(→Programme en NXC) |
(→Programme en NXC) |
||
Ligne 84 : | Ligne 84 : | ||
La commande sert à compiler le fichier nxc et à l'envoyer sur le robot via le port USB : | La commande sert à compiler le fichier nxc et à l'envoyer sur le robot via le port USB : | ||
− | + | <strong>nbc warrior.nxc -d -S=usb</strong> | |
+ | |||
+ | Les sources sont accessibles sur ce <a href=about.home>lien</a> | ||
== Problèmes a résoudre == | == Problèmes a résoudre == |
Version du 15 avril 2011 à 07:05
Robot téléguidé avec système embarqué - Vincent BLONDEAU - Remi BOUTON
Sommaire
Présentation du projet
Nous avons choisi la partie la plus difficile du projet, celle du contrôle à distance du robot. La difficulté viens du fait de l'ajout d'un nouvel élément en complément de la NXT : une foxboard. Ce module complémentaire, un ordinateur miniature, permet de contrôler à distance le robot. Cette FoxBoard contient un serveur Web accessible par Wifi dans l'école faisant l'intermédiaire entre l'utilisateur (via le Wifi) et le Robot (via le Bluetooth).
Robot V1
Dans un premier temps nous avions eu l'idée de créer un robot sur patte (pour sortir du lot dirions nous) grâce à une technique bien connu des amateurs. Seulement nous avons été confronté au problème du poids du robot, de son empattement, et du manque de puissance des moteurs. De plus le robot ne tenait pas forcement correctement la ligne droite ... projet abandonné.
Robot V2
Dans un second temps nous avons créé une base mobile stable, simple et solide, nous permettant un accès facile à la brique NXT (sauf au boîtier pile mais c'est un autre problème), et un positionnement aisée de la FOXBOARD en position verticale à l'arrière du robot. Cependant le kit LEGO MINDSTORM ne contenait pas assez de pièce pour concevoir un robot à 2 roues motrices et une roue "folle", nous avons donc décidé de munir notre robot d'une roue "folle" achetée à part. Ainsi la maniabilité du robot est accrue et le fait de tourner n'engendre pas de contraintes supplémentaires aux moteurs (déjà faibles en puissance). A noter que cette version définitive comporte tous les capteurs en position et branché. Ainsi nous pouvons d'avantage nous préoccuper de la programmation que sur l'architecture même de notre robot. Dans sa construction nous avons tenu compte des poids à équilibrer (surtout pour les batteries, qui sont d'ailleurs au plus proche du centre de rotation du robot). Ainsi bien qu'imposant il est tout à fait maniable et prêt à concourir !
Missions effectuées
La configuration de la Fox étant trop compliquée pour nous, nous nous sommes donc concentrés sur le programme contenu dans le robot Lego. Dans un premier temps, nous avons essayé de programmer via le logiciel Lego fourni. Le logiciel permettant de recevoir et d'envoyer des instructions par Bluetooth, nous avons exploré cette voie. Pour cela comme la fox n'était pas utilisable, nous avons aussi acquis un logiciel permettant de nous en dispenser. Il envoie via une clé bluetooth un signal en théorie compréhensible par le logiciel Lego. Nous pouvions transférer des entiers, des booléens et même des chaînes de caractères. Mais en réalité nous n'avons pu qu'envoyer des booléens. Ce qui n'est pas l'idéal.
Nous avons donc pu utiliser un équivalent du logiciel Lego. Le NXC, acronyme pour "Not eXactly C", permet de lire facilement les messages envoyés par la fox, et de les traiter afin de commander le robot a distance. Nous avons donc du apprendre le langage C ainsi que les principales commandes qui permettent de piloter le robot. En se connectant sur le serveur de la fox (172.26.165.210), nous pouvons via l'adresse de la page Web envoyer des requêtes Php sous forme de nombre : Pour le diriger d'une part :
- 0 : Stop
- 1 : Marche Avant
- 2 : Marche Arrière
- 3 : Gauche
- 4 : Droite
Et pour le suivi de ligne d'autre part :
- 17 : Suivi de ligne Bleue dans un sens
- 16 : Suivi de ligne bleue dans l'autre sens
- 19 : Suivi de ligne Rouge dans un sens
- 18 : Suivi de ligne rouge dans l'autre sens
- 32 : Recharge du robot (suivi ligne jaune sous certaines conditions)
Pour la recharge du robot s'effectue de la manière suivante (en théorie puisque ce n'a jamais été testé) :
- Les robots cherchent la ligne jaune et dès que un robot en a trouvée une,
- Le robot envoie le message aux autres robots qu'il est sur la borne de recharge
- Les autres robots continuent alors de suivre leur ligne courante (bleue ou rouge)
Nous avons aussi réfléchi à la manière d'informer le robot de la ligne a suivre (Principale, Réserve, Rechargement) via les puces RFID.
Cependant il reste un problème de taille à traiter : la vitesse de transfert des données. En effet la connexion wifi de Polytech n'est pas tout à fait optimisée pour ce type de contrôle, ainsi à chaque ordre émis par l'ordinateur la connexion wifi se réinitialise. Ainsi nous ne pouvons pas contrôler réellement en "direct" notre robot à cause du décalage de temps action/réaction. Ce problème a été résolu, le temps de réponse est d'environ 1/2 seconde ce qui est largement acceptable pour commander le robot a distance.
Programme en NXC
Nous avons choisi d'écrire le programme du Lego dans le langage NXC, qui est un langage plus léger et prtique à utiliser que le Labview (logiciel fourni avec le Lego Mindstrorm). Le programme est divisé en pusieurs parties (tâches) :
- La réception : permet de recevoir les ordres données par la fox et de lui en transmettre
- La détection d'obstacles : permet de savoir grâce au capteur ultrason si un obstacle est devant le robot
- La detection de couleur : permet de reconnaitre les couleurs lues par le capteur RGB du robot. Le programme compare les valeurs en rouge bleu et vert envoyées par le capteur RGB et suivant ces valeurs il peut savoir s'il lit du BLANC, NOIR, BLEU, ROUGE, JAUNE ou une autre couleur.
- La tâche principale : Traite les instructions reçues par la fox et les variables renvoyées par les tâches secondaire décrites ci-dessus. Elle est divisée en deux parties : le suivi de ligne et le contrôle a distance.
J'ai fait une version appelée "couleur.nxc" qui me permettai d'étalonner les seuils pour la détection des couleurs.
L'autre version plus complète, "warrior.nxc", contient toutes les tâches decrites ci-dessus.
La commande sert à compiler le fichier nxc et à l'envoyer sur le robot via le port USB : nbc warrior.nxc -d -S=usb
Les sources sont accessibles sur ce <a href=about.home>lien</a>
Problèmes a résoudre
Dans un premier temps, il nous est indispensable de mieux comprendre la syntaxe C et les principales fonctions du langage NXC qui est très complet.
L'interface de la page Web a été modifiée afin de la rendre interactive. On peut dire au robot d'aller a gauche, droite, devant, arrière. Cependant on ne peut pas recevoir de donnée du robot, ni envoyer d'autres instructions comme le changement de couleur de ligne, la vitesse des moteurs...
De plus il faudra réfléchir à faire envoyer par le robot des informations d'état du Robot (à définir).