Roby

Prsentation du projet sur le forum Robot-Maker
Il s'agit d'un robot d'exploration qui a vocation de devenir autonome (comme une grande partie des robots ;)).

Le projet s'articule sur 3 composants : une base mobile, un "cerveau" et un "observateur de rsultat" (je les dtaille un peu plus bas).
Cela se fera a base Arduino et d'Android.

La base mobile est un DFRobot 4WD (plateforme a 4 roues motrices... mais seulement deux dans la realit), celle-ci se voit quip d'une carte micro-contrleur DFRobot Romo v1.0, associ un module DFRobot Bluetooth v3, 4 switchs de distance, une tourelle tilt/pan ou est log le "cerveau" (avec deux servos moteurs).

Le cerveau est un tlphone mobile HTC Dsire qui communiquera avec la plateforme via Bluetooth. Celui-ci est solidaire de la plateforme mobile (en haut de la tourelle mobile).
Sa camera servira la reconnaissance et l'analyse du territoire (soft en cours de dveloppement, bas sur la dtection de lignes et de reconstruction 3d en temps-rel si c'est possible), il sera aussi le transmetteur des informations l'"observateur" (streaming audio/video, prise de photos) via Wi-Fi.
Pour info, HTC a supprim le profil SPP (Serial Port Protocol) du firmware officiel (froyo 2.2), le tlphone a donc t root et une version de Cyanogen 7.1.0 R1 a t installe (Gingerbread 2.3.4).

L'observateur est, dans le cas prsent, une tablette Acer A500 (Honeycomb 3.2, mais pourrait etre tout autre appareil mobile sous Android avec un cran large) qui sera connectable via Wi-Fi au cerveau. Il recevra les informations (positions, capteurs, flux video) mais pourra, bien sur, prendre le pas sur le commandement du robot.

Ou en suis-je actuellement sur le projet ?
La plateforme mobile est assembl, les switches rgls, la communication avec le cerveau est tablie ainsi que la communication entre le cerveau et l'observateur. Le cerveau ne sert pour le moment que de relai de commande depuis l'observateur. en parallle, je continu mon travail sur la dtection des lignes (algorithme choisi est une simplification de l'algo "RANSAC"... une autre voie est la transforme de Hough).
Qui reste encore a faire : le streaming audio/video et l'envoi des photos du cerveau vers (qui sont stock sur le portable pour le moment).
Matriellement, je prvois encore une amlioration majeur : l'ajout d'un capteur de distance a ultrason (type DFRobot URM04) qui serait solidaire et orient dans le sens de la camera (pour la reconstruction 3d).
Et bien sur, l'IA reste entirement a faire :)
Maintenant, je ne suis pas sur que le HTC Dsire soit assez puissant pour tout faire la fois... c'est donc aussi un dfi a ce niveau l :)

Dans un premier temps, je finalise le "remote control" entre le cerveau et l'observateur (streaming video en priorit).
Puis je reprends le dev sur la reconnaissance de territoire.
Et ensuite l'IA...

...

Pour la reconstruction 3D, je ne compte pas utiliser de librairie ou de soft dj existant... c'est clair que certaines librairies existent dj, et rpondrait partiellement a ce que je pense faire (comme OpenCV, qui implmentent la transforme de Hough pour la detection des lignes dans une image ou les SIFT point d'intrt d'une image).
Mais, le but est de tout faire "a la main" (sinon c'est pas drle ;)).

Donc, grosso modo, l'ide est de se baser sur l'omographie entre deux images. On utilise plutt ce type d'algo dans le sens inverse en ralit augmente (repr un modle 2d dans un image, et ensuite extrapoler sa position 3d), ou dans la creation des panoramas a partir d'images multiples.
Je connais l'angle entre les deux images, grace aux servos de la tourelle et/ou au capteur d'angles et/ou au gyroscope du portable, et je devrais avoir une estimation de la distance grce a un capteur de distance.
Je m'aide des lignes droites (dans un monde industrialis comme le notre, les lignes droites abondent) et des croisements de ces lignes comme point de "rfrence".
A partir de l, faire une estimation de la profondeur devrait ne pas tre trop compliqu et donc d'ensuite d'en extraire les volumes (on le fait dans les moteurs 3d, grce l'inversement de la perspective).

Bon, par contre, apparemment, l'ide du sonar n'est pas si bonne... donc, je vais me rabattre sur un capteur IR ou laser.
L'ide du capteur de distance est juste d'estimer la distance de certains points dtectes par le RANSAC, donc d'orient la tourelle dans la direction du "point" d'avoir la distance... et ainsi de suite (le robot etant statique a ce moment la). Lorsque lenvironnement virtuel de l'endroit ou ce situe le robot a t tabli, celui-ci repart vers a un autre endroit et refait le scan autour de lui... tant qu'il n'est pas environnement connu, il est en mode dtection.

Pour le stockage de lenvironnement, je pense partir sur un monde reprsent en voxel.

Les algos de reconstruction 3d existent deja a partir de l'extraction de point dintrt (SIFT, SURF) ou la dtection de point de fuite...

C'est l'ide gnrale... reste la concrtiser ^^

...

Un petit update pour monter l'avancement du projet.
La premire version appel RemoteControl.
Une application Android qui prends le contrle a distance de Roby via Bluetooth.
Roby est dsormais quip d'un kit Bluetooth et d'un capteur de distance Infrarouge (malheureusement dfectueux :() accroch la tourelle.

Image attache: IMAG0089_m.jpg

J'attends un nouveau Sharp GP2Y0A02YK (20 150cm) de pied ferme pour continuer a travailler sur le "radar" en voxel.
J'ai aussi command un sonar Ultrasonique SeeedStudio qui sera lui aussi placer sur la tourelle (3cm a 6m).

Voila un screenshot de l'interface
Image attache: remote_capture.png
A gauche : le virtualpad de commande du corps de Roby
Au centre : la distance du capteur IR (en cm)
A droite : le virtualpad de commande de la tourelle

Prochaine tape :
Une application Android tournant sur l'observateur qui reliera en Wifi le smartphone, accroch dans sa magnifique tourelle en carton (bientt refaite en alu et plexiglas).

...
Dans ce qui se voit :
- une interface remani : plus complte, gestion de la vitesse des moteurs, la tourelle est contrle par un "pad analogique"
- le scanning : via deux modes en ligne et en mode radar avec deux options.
Un point de scan est la moyenne de 5 prises de capteur 5 ms d'intervalle, 25ms au total plus le temps de dplacement de la tourelle.
Le mode en ligne scanne la ligne d'horizon (1 dimension).
Le mode radar scanne un zone (2 dimensions).
Option "1/2" de la surface de fonctionnement : l'amplitude de la tourelle passe de 160 a 70 horizontalement, et de 60 a 35 verticalement;
Option "Qik" qui scanne par pas de 5 la place de 1, ce qui permet dtre beaucoup plus rapide en scanner mais moins prcis l'affichage.
Le dgrade de bleu indique la profondeur (de 30 a 150cm, bleu vers noir), le gris indique la limite minimum atteinte par le capteur IR.
- les switches s'affichent lorsqu'ils rencontrent un obstacle moins de 15cm (une zone rouge aux quatres coins s'affiche selon les switches affects).

Dans ce qui ne se voit pas :
- la stack protocolaire BlueTooth entirement revu (plus sur en cas d'interference ou de perte de donnes partielles)
- amlioration du core arduino (ajout du code de scan et du code de dplacement non utilis pour le moment)

Je ne release pas les sources pour le moment : il reste encore deux ou trois bugs au niveau de l'interface et dans le core arduino.
Voila deux screenshots pour faire patienter ;)

La mme scne vue par :
le mode "scan en ligne" rapide Image attache: device-2011-11-06-151454.png
le mode "radar" rapide : Image attache: device-2011-11-06-151326.png

Pour la suite (version 0.3), je vais ajout le sonar pour avoir une distance jusqu 6 mtres (ds que la mesure de l'IR sera plus grande que 130cm, hop je switche sur le sonar... moins prcis et moins rapide).
Et finir lodomtre bas sur le temps d'activit des moteurs de propulsion (malheureusement pas trs prcis car dpendant de lnergie disponible des piles).

Et lorsque que tout sera stabilis, je passerai enfin au module "Cerveau + Observateur" (avec un peu de chance ^^).

J'en profite pour demander si quelqu'un sait comment faire pour connaitre le niveau des piles a partir de la carte DFRobot Romeo.
Ou si il y a un montage facile a faire pour avoir le status de lnergie disponible.
J'envisage de passer sur une batterie type "modlisme" ou batterie de tlphone portable la place des 5 piles de 1.5v.
Est-ce qu'il est prfrable de garder les piles pour l'alimentation des moteurs et un batterie pour les servos et la carte contrleur ? ou trois batteries ?

...

Le scan radar angle large dtaill (Le plus "impressionnant" et le plus complet : 8 minutes et 45 secondes de scan)
Image attache: device-2011-11-08-185512.png
Le meme scan en rapide (on saut de 5 en 5 pour la prise de captation en hauteur et en largeur : soit x25 moins "prcis"... temps 45 secondes)
Image attache: device-2011-11-08-185632.png
Le scanline plan large dtaille (40 secondes)
Image attache: device-2011-11-08-185655.png
Le scanline large rapide (12 secondes)
Image attache: device-2011-11-08-185715.png

le scan radar angle court dtaille (6 minutes)
Image attache: device-2011-11-08-191154.png
le scan radar rapide (30 secondes)
Image attache: device-2011-11-08-190832.png
le scanline dtaille (9 secondes)
Image attache: device-2011-11-08-190906.png
le scanline rapide (4 secondes)
Image attache: device-2011-11-08-190847.png

...

J'ai fait plusieurs changement sur la base Arduino du robot :
- la premire modification, la plus notable pour un oeil averti, "exit la tte en carton, et bonjour la tte en plexy". Le tout est nettement plus rigide et permet de faire des scans radar plus prcis.
La tourelle mobile (la tte donc) reoit en plus un capteur UltraSon SeeedStudio qui permet maintenant d'avoir une estimation de distance jusqu' 6 mtres. J'ai gard le capteur IR beaucoup plus prcis et rapide pour les distances entre 25cm et 140cm.
- la caisse du robot a t remanie elle aussi. j'ai supprim les switchs InfraRouge de devant et remplacer par un capteur IF, j'ai dplace l'un de ces switchs vers l'arrire (qui compte maintenant 3 switchs IR).
- J'ai suivi le conseil de BlackTemplar en ajoutant des encodeurs sur les roues avant (maintenant je connais la distance parcourue par le robot), ainsi qu'en ajoutant une boussole (avec acclromtre) ce qui me permet de savoir dans quelle direction pointe la caisse du robot.
- j'ai aussi ajout un LCD 2x20 pour des diagnostiques internes (sans avoir a connecter le tlphone par Bluetooth).
- et le problme d'alimentation a t rgl par l'ajout d'une batterie supplmentaire ddie aux servos.

Encore quelques volutions matrielles sont au programme :
- une seconde tte en plexy va tre raliser pour recevoir le tlphone et donc de pouvoir utiliser les images de la camera ainsi que les capteurs (GPS...) de celui-ci.
- le capteur IR frontal devrait etre changer par un capteur porte plus courte (comme le GP2D120 IR Sharp de 4 30 cm ou le GP2Y0A21YK0F de 10 a 80cm... actuellement c'est un GP2Y0A02YK0F de 30 150cm qui est utilis).
- trouver une boussole I2C plus ractive que celle que j'ai prise (Deventech CPMS10, qui est trop lente mon gout, presque 2 secondes pour avoir un "cap" fiable, peut tre dt un problme dtalonnage).

A part quelque soudures pour amliorer les liaisons (carte bluetooth) et protger les encodeurs (le bumper avant de la caisse ne rentre plus, il faut supprimer les pins en soudant directement), je pense que je "tiens", grosso-modo, la base matriel du robot (de toute faon, je suis arriver au bout de toutes les entres de la carte Romo ;)).

Grce aux encodeurs et la boussole, j'ai tout ce qu'il faut pour commencer le logiciel de cartographie et de la partie AI qui rendra le robot autonome !

Une photo de la bte :)
Image attache: IMAG0113_s.jpg