PDA

Afficher la version complète : Repérage dans l'espace



MadProf
09/02/2009, 19h28
Bonjour à tous,

Ça tombe bien cette nouvelle section, j'ai un paquet de questions :D

Je cherche notamment un moyen de faire de la localisation 2D dans un environnement non dynamique et certains.

Seulement la contrainte (il en faut sinon c pas marrant)c'est sans GPS, sans boussole et sans moteur pas à pas. J'ai à disposition : un capteurs IR Sharp sur tourelle, une webcam et un PC Portable, divers capteurs infra rouge, sonore, luminosité. Je me sers d'une carte Arduino pour faire la liaison PC/matériel électronique.

La reconnaissance de visages et formes fonctionne alors je m'était dit qu'un système à base de reconnaissance de pictogrammes placés dans une pièce pourrait fonctionner également (un peu comme le principe du RFID).

Ou bien encore un balayage des alentours par le capteur IR afin de se faire une "idée" de l'environnement.

Si un spécialiste du genre à une idée... je précise que je connais que dalle en électronique mais que je me débrouille en dev. Je cherche pas un truc tout fait, mais des pistes à explorer.

A++

MadProf

kanda
15/02/2009, 12h46
Tu utilises quoi pour la reconnaissance de visages et formes ?

kanda
15/02/2009, 13h00
Je suis un peu dans ton cas, mis à part les 2-3 formules de bases ou le code couleur des resistances, je connais pas grand chose en electronique mais je suis par contre plutôt experimenté en dev (assembleur, C/C++). Pour me simplifier le probléme j'utilise des phidgets branchés une usb, et ça régle à peu pres les problémes de l'electronique.

Pour ton probléme, l'IR je pense que ca ne sera pas suffisant. Des ultra sons seraient plus adaptés et tu couvrirais un plus gros radius autour de toi et plus fiable (l'IR c'est bien mais les differentes surfaces risquent de refleter et renvoyer des valeurs bien differentes pour être exploitable au delà de la distance proche). Avec plusieurs capteurs ultrasons ou un capteur monté sur tourelle, tu peux te construire une map de ta piéce je pense.

Dans ton cas, si tu as une webcam je pense que c'est encore plus simple, avec quelques traitements d'image de base tu dois pouvoir retrouver le sol et identifier les obstacles et donc faire diriger ton robot sur la surface du sol. De plus, tu peux l'utiliser conjointement avec un capteur infrarouge ou mieux les ultra sons pour rendre plus robuste ta solution (ya tjrs des cas speciaux ou de l'inattendu, comme la transition etre 2 surfaces tel qu'un tapis sur le sol ou une feuille de papier posée sur ton parquet...

MadProf
17/02/2009, 15h16
Salut Kanda,

Effectivement j'utilise aussi des phidgets branchés sur une carte Arduino qui fait la liaison avec mon PC. le traitement de l'image de la webcam est effectué par le PC. J'utilise la librairie OpenCV qui implémente pleins de fonctions pour la reconnaissance. Après le choix de la méthode est en fonction des attentes. J'utilise le Haartraining pour les visages et les formes complexes spécifiques, et la transformée de Hough pour la reconnaissance d'objets basiques (cercles, triangles...).

En fait je voudrai pouvoir faire une "carte" de l'environnement et y appliquer par la suite un pathfinding traditionnel. Seulement ce n'est pas possible uniquement en scrutant les environs avec un capteur IR ou même un sonar vu que ceux-ci ne peuvent voir à travers les objets.

kanda
17/02/2009, 16h25
L'ideal ce serait que ton robot ait une comprehension de son environement et qu'il memorize les obstacles en les reliant les uns aux autres en mémoire, ainsi au lieu de faire un pathfinding sur map/plan 2d, tu localises ta destination dans ce graph d'objets / repéres et tu fais un A* sur ce graph, et tu vas vers ta destination en atteignant successivements les objets du graphs se trouvant sur le chemin qui mêne à ton but. Si c'est trop lourd pour toi de reconnaitre les objets, tu peux remplacer par des balises de couleurs differentes.

Le probléme de la generation de map plus precise c'est que ca necessiterait un encodeur sur tes moteurs, que tu puisses savoir tout le temps precisément où tu te trouves....Si c'est le cas, tu peux faire construire la map par ton robot. Tu le laisses se ballader librement, en decoupant l'environement en "cases" et tu fais deplacer ton robot dans chaque cases, si tu reussis à rejoindre la case voisine, tu tag la casesde ta map en memoire comme étant accessible, sinon tu la tag comme etant interdite. Aprés à toi de regler selon l'environement les tailles des cases. Le principe est simple mais ca necessite un asservissement ultra precis sur ton robot...histoire qu'au bout de 10 cases il se retrouve bien au bon endroit et non sur une cases voisine...Le genre de truc facile à faire sur simulateur mais plus problématique en réel...

C'est pour ça que je proposais la premiere solution. Laisser ton robot vadrouiller et memorizer des objets / endroits clés et les relier entre eux pour la façon de les atteindre. Pratique, universel, adapté probabement à tous les environements je pense...mais plus dure à mettre en oeuvre.

Sinon le plus simple, si ton environement est pas trop gigantesque et pas trop encombré, ceux serait de placer des balises de couleur un peu partout, style sur les encadrement de portes par example, avec une couleur par piece. Si ca demande trop de couleurs, tu peux imaginer de faire un code composé de 2-3 ronds de couleurs cote à cote et en deduire un code de piéce ou de lieu. (3 ronds ca donne deja 8 valeurs possibles pour identifier ta piece ou ton lieu, et en utilisant seulement 3 couleurs differentes à reconnaitre !)

Sinon un autre dernier truc, si tu as un asservissement precis, c'est de laisser se ballader ton robot partout dans son environement et par example tout les xxx cm tu met a jour un map en ajoutant une valeur dans la case de ta carte en memoire pour les endroits accédés par ton robot : il en resultera une map en niveau de gris ou les valeur les plus grosses seront les endroits où ton robot sera passé le plus souvent, permettant de deduire les endroits les plus accessibles ou de generer un graph de navigation complété par des "poids" entre chaque point de passage permettant une navigation optimum.

L'ennui des grilles ou plans generés, c'est que ca demande un asservissement precis, et que ca supporte pas bien le changement, par example si tu places pas bien le robot au depart il sera perdu. Il faut qu'il sache precisement où il se trouve au demarrage... Avec une reconnaissance plus poussée de son environement, pas de soucis...

MadProf
17/02/2009, 16h48
Salut Kanda,

Je vois qu'on a a peu près les même idées :D

J'ai bien pensé à A* pour le pathfinding, surtout que je l'utilise déjà pour d'autres applications. Mais il me faut absolument savoir ou se trouve mon point d'arrivée et comme tu le dis, je n'utilise pas de moteur pas à pas donc aucun moyen de savoir par rapport au déplacement ou je me trouve actuellement de façon suffisamment précise. Il ne m'est donc pas possible de me construire une grille, ce qui aurai été la soluce la plus simple à mon avis, me permettant d'utiliser les algo de parcours de graphes.
J'ai pensé (et déjà commencé) à un système de balises. Exactement comme tu l'expliques j'ai mis des carrés avec un symbole précis au niveau des prises électriques de mon atelier pour que le robot puisse se repérer. Un peu comme des codes barres. La reconnaissance marche pas trop mal (seul problème, avec le Haartraining, pour avoir un résultat convenable il faut environ 1500 photos positives de l'objet, 3500 négatives, et environ 3-4 jours de calculs sur un PC dédié, ce qui est vachement long).


C'est pour ça que je proposais la première solution. Laisser ton robot vadrouiller et mémoriser des objets / endroits clés et les relier entre eux pour la façon de les atteindre. Pratique, universel, adapté probablement à tous les environnements je pense...mais plus dure à mettre en œuvre.
Je vais essayer d'explorer cette piste, sinon j'ai bien pensé à mettre un émetteur IR dans chaque coin de la pièce pour permettre de se déplacer précisément. Mais là ça devient contraignant et pas très évolutif.

En tout cas merci de t'intéresser à mon problème.

++

Madprof

kanda
22/02/2009, 00h55
tu as recu mon msn en MP ?

MadProf
22/02/2009, 20h33
Oui je t'ai répondu sur ta boite mail ;)

psykokwaky
12/03/2009, 11h41
Regarde du coté des algo de slam.
Plus précisément de son petit frère : le visual slam. Ca devrait répondre à tes besoins.
Tu trouvera pas mal de doc et d'implem (libre) sur le net.

kanda
31/03/2009, 09h59
Salut Mad,

J'avais une question, je connais pas du tout la carte arduino, mais ca a l'air sympa. Comment tu fait fonctionner les widgets dessus ? Tu peux installer un linux dessus ????

Merci d'avance

MadProf
31/03/2009, 11h49
Salut Kanda,

pour ce qui est de la carte Arduino, franchement je trouve que c'est un très bon moyen de débuter en automatisme quand on a pas de connaissances en électro comme moi. En revanche faut savoir développer, l'environnement fourni est en C. Il y a 14 entrées/sorties digitales et 6 entrées analogiques, donc les widgets sont très faciles à utiliser. De plus tu trouves pleins de board spécifiques Arduino que tu as juste à brancher.
La liaison au PC se fait grâce à une sortie USB via COM mais tu ne peux pas installer d'OS dessus. Il existe une carte Arduino Bluetooth qui permet de supprimer cette liaison physique avec le PC.

Et puis surtout ce qui est bien pratique c'est qu'il existe une multitude de projets et de docs sur le net.

++

MadProf

kanda
31/03/2009, 13h13
Merci pour ta reponse rapide MadProf. Néanmoins j'ai besoin de precisions (je suis dans le même cas que toi pour l'electro, par contre pas de soucis pour le dev). Si je comprends bien, l'arduino sert u peu de hub USB pour les phidgets ? Dans ce cas, si tu es obligé d'avoir un PC (sans utiliser le BT) pourquoi ne pas brancher directement les phidgets sur le pc ?

kanda
31/03/2009, 13h15
Je viens de m'apercevoir d'un truc, je parle de phidgets et tu parles de widgets, en fait on parle pas du tout de la même chose ??? lol

MadProf
31/03/2009, 13h56
ah oui il doit y avoir un amalgame de ma part, je parle de la marque Phidget, mais qui fait des capteurs que l'on peut facilement utiliser :

Capteur lumière Phidget (http://www.robotshop.ca/capteur-lumiere-phidgets-1127-3.html)

La carte Arduino peut servir de hub USB comme tu dis mais surtout elle comprend une mémoire interne. Du coup c'est vraiment facile à utiliser et offre de nombreuses possibilités, en autonome ou couplé avec un PC.
J'ai pu ainsi faire mon première robot, un petit char à chenilles autonome avec 2 moteurs, un servos et un capteur IR (le servos sers de tête). C'était ma première expérience avec Arduino et l'automatisme et la facilité de mise en place est très motivante (environ 3-4 heures pour le montage et le dev).

Enfin, vu que la communauté est assez importante, il y a de nombreuses librairies dispo, donc t'as pas à réinventer la roue à chaque fois...

Vidéo premier essai (http://www.pouliquen-gildas.info/modelisme/arduino/videos/01.avi) , il s'arrêtait toutes les 2 secondes car je savais pas si j'allais pas faire cramer la carte.

http://www.pouliquen-gildas.info/modelisme/arduino/photos/01.jpg

En non autonome, j'ai fait une webcam monté sur servos qui suit le visage ou une balle.

A++, hésite pas si tu as des questions, je suis sur msn en journée.

MadProf

kanda
31/03/2009, 14h06
Je te vois pas online sur msn :(

Ok donc on parle bien des phidgets tous les deux. C'est là que je comprends pas comment tu fais : pour utiliser les phidgets sur windows il faut installer un drivers. Je comprends pas comment tu peux utiliser tes phidgets sur ton arduino en mode autonome, comme tu "adresses" les phidgets ?

Merci pour ton aide :)

MadProf
31/03/2009, 14h25
Bah je suis sur msn, avec mon adresse de taff gildas.p.....@hotmail..
Je t'ai peut être donné la perso que j'utilise pas trop (madprof...)
Pour les phidgets, en fait tu peux les brancher direct sur ta carte arduino, comme par exemple le détecteur de lumière que je t'ai mis en lien (j'en ai un ca marche bien). A mon avis je me trompe encore dans les termes mais comme c'est une marque j'ai l'impression qu'il font des deux

kanda
31/03/2009, 14h29
J'ai regardé ta video, c'est trés sympa. Effectivement il s'arrete toute les 2 secs mais c'est un excellent debut. Peut être a l'avenir pourras-tu "balayer" avec le capteur infrarouge pendant le deplacement pour eviter ces arrets ?

Ton chassis me dis vaguement quelques chose, j'ai dû le voire en trainant sur un site. Je trouve ca super les chenilles, bien que beaucoup trouve ca imprecis, c'est quand même le reilief un peu accidenté, tapis etc. etc. !!!

J'ai pris une voie differente pour mon premier robot, un chassi alu + 2 moteurs. Voila une photo du dessous :

http://www.theoldentales.com/kanda/Hari/Chassis640x480.jpg

Pour les premiers tests je vais utiliser un laptop et ensuite je switcherais pour une ou deux Epia mini ITX de Via. J'aurais beaucoup aimé des chenilles mais c'est pas evident à mettre en oeuvre, et surtout je veux pouvoir deplacer plusieurs kgs...

EDIT: A noter que sur la photo les moteurs ne sont pas complétement fixés et ne sont pas vraiment alignés sur les trous.

kanda
31/03/2009, 14h37
En effet j'ai ton autre adresse msn, j'ai pas celle de ton taff :-)

Bon j'ai trouvé pourquoi on se comprends pas grace à ton lien. En fait moi je parlais des phidgets USB, les platines E/S ou certains capteurs directement branchés en USB. De ton coté tu parlais directement des capteurs, qu'on relie soit sur une carte E/S phidgets, soit sur tout autre carte E/S (dans ton cas l'arduino). Mais en fait tu ne les branches pas en USB, mais juste sur des ports analogiques ou digitaux selon le capteur. En fait l'incomprehension vient du fait que Phidgets vends trois types de produits : carte E/S à brancher sur port USB, capteurs USB, et capteurs analogiques à brancher soit sur leurs cartes E/S Usb soit sur tout autre carte E/S. C'est pour ça que je demandais si tu te servais de la carte comme un hub usb, je pensais que tu branchais les capteurs sur ta carte directement en USB, mais en fait non :-) Ouf :-)
D'ailleurs en quelques sorte ta carte equivaut aux carte E/S USB. Chacunes ayant leurs avantages / inconvenients.

^^

MadProf
31/03/2009, 14h47
C'est exactement ca pour les phidgets, l'avantage de cette carte c'est de pouvoir fonctionner en autonome ET en tant que hub.

J'ai trouvé le châssis sur un site anglais à 42€, je voulais celui de Tamiya mais finalement celui là a l'air mieux. Je préfère les chenilles pour des raisons esthétiques. Comme tu le suggères, maintenant il balaye en continu et s'oriente en fonction. Mais ça reste limité comme navigation.

C'est pour ça que j'ai commencé à regarder du cote des lib de traitement de l'image. malheureusement le PC portable que j'ai est encore trop gros pour que je le mette dessus d'où l'idée de la carte Arduino Bluetooth, ou encore l'utilisation de ceci :
Arm board (http://cgi.ebay.fr/ws/eBayISAPI.dll?ViewItem&ssPageName=STRK:MEWAX:IT&item=220309326869#ebayphotohosting)
Pour augmenter la capacité de calcul et rajouter des modules camera ou wifi à pas cher. Après faut avoir envie de développer avec le compact framework .net mais c'est pas difficile. Du VB en plus simple (Pléonasme ?)
Je te renvoi mon adresse msn, je suis dispo en journée mais au taff donc je répond pas systématiquement.

++

MadProf

kanda
31/03/2009, 14h48
Au fait perso j'utilise la carte phidgets E/S LCD-8/8/8. Super facile à programmer, et en plus tu as un ecran d'affichage de bonne qualité.

http://www.robotshop.ca/lcd-usb-bleu-phidgets-2.html

J'ai aussi une carte phidgets 8 servos ainsi qu'une carte phidgets de controle de 2 moteurs ( http://www.robotshop.ca/phidgetmotorcontrol-hc-1064-phidgets-4.html ).

A propos, tu les commandes où tes phidgets ?

MadProf
31/03/2009, 14h51
je commande mes phidgets sur robotshop comme toi, ou libellium. j'ai l'impression qu'on a les même besoin (controleur moteurs + capteurs+ecran lcd) et je crois que la solution arduino coute moins cher. J'utilise un seul port usb sur ma machine pour tout, après la carte arduino est reliée à un moteur shield qui commande 4 moteur DC ou 2 pas à pas, elle ne coute que 30$ et un LCD board à 20$.

kanda
31/03/2009, 14h55
Tu pourrais peut-être utilisé un pocket pc ou un netbook sinon si c'est un probléme de taille ^_^ Effectivement un laptop c'est pas forcement pratique et lourd ! (d'où l'itx à terme !)

Tu as une video de ton robot sans les pauses ?

MadProf
31/03/2009, 15h00
Bah j'ai un pocket pc mais il a pas de port USB, et ceux qui en ont c juste pour des périphériques de stockage (pas encore de host USB sur pocket pc). La board que j'ai mis en lien en a justement un, par contre les drivers ça risque d'être complique.
J'ai pas de vidéo de robot sans la pause ici car je suis au boulot, d'ailleurs faut que je m'y remette sinon je vais me faire cramer... J'essaierai de la poster ce soir.

++

kanda
31/03/2009, 15h20
je commande mes phidgets sur robotshop comme toi, ou libellium. j'ai l'impression qu'on a les même besoin (controleur moteurs + capteurs+ecran lcd) et je crois que la solution arduino coute moins cher. J'utilise un seul port usb sur ma machine pour tout, après la carte arduino est reliée à un moteur shield qui commande 4 moteur DC ou 2 pas à pas, elle ne coute que 30$ et un LCD board à 20$.
Oui on a les même besoins : controller des moteurs, des servos et une batterie de capteurs, et un pc et sa puissance de calcul !

En fait quand j'ai choisis le system phidgets plutôt que Arduino pour une simple raison : je ne connaissais pas arduino :-) J'ai eus une excellente carte Labjack, mais j'ai preféré me lancer avec les phidgets au final :

Deja, elles sont super simple à programmer. Il existe des drivers sous windows, linux, Mac. Un outils est fourni pour tester directements tous les modules et capteurs sous windows. Et surtout comme j'ai besoin de pas mal de trucs differents (capteurs, carte relais, controle de moteurs, encodeur, carte servos...) il m'a paru plus naturel d'uniformiser les appels aux E/S en utilisant une seule et même technologie. De plus les phidgets ont l'avantage d'être en general bien travaillées : par example la carte moteur est pensée pour eviter les interferences etc. etc. Je dis pas que tout est parfait, j'ai pas assez de recul. Par contre effectivement c'est un peu cher, surtout en comparaison de l'arduino. Mais bon tout depends de l'usage finalement. C'est claire que je choisirais plutot une arduino pour une application plus simple, en mode autonome. Mais là je me destine plutot à embarquer un PC avec qd même pas mal de capteurs et servos. J'espére que ca fonctionnera bien.

Par contre je n'achéte plus mes phidgets sur roboshop. Ni même sur le site phidgets. J'ai eus un peu mal aux fesses avec la douane et les frais de ports. Du coup je passe par ActiveRobots en angleterre, c'est rapide, pas de taxes supplémentaires et frais de ports corrects. http://www.active-robots.com/products/phidgets/index.shtml

kanda
03/04/2009, 10h19
Des nouvelles de la videos sans pause Mad ? :-)

MadProf
03/04/2009, 12h11
Ah non désolé Kanda j'ai zappé et là je suis en séminaire à Paris. J'essaye de pas oublier samedi de la poster.

kanda
03/04/2009, 12h50
ca marche, bon seminaire alors :-)