Aller au contenu

Projet DRP - Daryl Robot Project


Messages recommandés

Bonjour à tous!

Je me présente:

Je suis critok, ingénieur dans le domaine de la qualité logiciel. Je suis également un passionné de robotique depuis mon plus jeune âge. J'adore le monde de l'informatique et toutes les geekeries qui vont avec :roll:

Le projet:

Je me suis lancé depuis peu dans un projet robotique (DRP pour Daryl Robot Project).

En effet, je suis actuellement en train de construire un robot autonome (nommé Daryl), basé sur Arduino Uno, et ayant la particularité d'être piloté via un UMPC (Viliv S5) depuis une application Java développée par mes soins (communication grâce à la librairie Java RXTX).

J'ai choisi cette implémentation car je suis très à l'aise avec Java. Par contre, je suis un débutant total en électronique.

L'architecture de Daryl:

Voici un schéma représentant l'architecture matériel de Daryl:

archi_maj.png

Voici la liste des éléments qui composent Daryl:

- D'un châssis Lynxmotion Terminator avec ajout d'un étage en Lexan

- De 4 Moteurs 12V 50:1 GHM-02

- D'une batterie NiMH 4Ah 12V

- D'un contrôleur de moteur Pololu TRex DMC01

- D'un contrôleur de servomoteur Pololu Micro Maestro

- D'une tourelle tilt/pan avec 2 servomoteurs

- De trois capteurs infrarouge Sharp GP2D120 (10-30 cm)

- D'un capteur ultrasons Ping ))) Parallax

- D'un module bluetooth MDFly

- D'un SensorShield V4

- D'un Arduino Uno

- D'un UMPC Viliv S5

- D'une Webcam Microsoft LifeCam Cinema

- D'un diviseur de tension (12V vers 6V)

- De deux boutons antivandalismes

Les fonctionnalités actuelles:

Je viens de finaliser le robot lui même il y a peu de temps. Daryl ne possède donc pas encore beaucoup de fonctionnalités.

Actuellement, Daryl peut:

- Se mettre en mode autonome et éviter des obstacles grâce à ces capteurs (algo simple pour le moment)

- Se mettre en mode manuel afin d'être télécommandé via le Viliv S5 en bluetooth

- Parler grâce à la mise en place d'une synthèse vocale

Daryl est commandé via une application Java Swing déployée sur le Viliv S5. Cette application permet d'activer les modes manuel et automatique, mais aussi de monitorer les capteurs IR.

Les fonctionnalités à venir:

Je suis dors et déjà en train de mettre en place un serveur Jetty au sein de Daryl (embarqué dans mon application Swing actuelle) qui me permettra de commander le robot via un Ipad ou Iphone, grâce à une interface développée sous JQuerie Mobile.

Il sera possible d'activer le mode manuel et donc de le commander via un Ipad par exemple, d'activer le mode automatique et d'autres options.

Je pense également développer un algorithme de déplacement plus complexe (mode découverte) et un algorithme de suivi de personne.

J'aimerais également implémenter d'autres fonctionnalités comme m'avertir de l'arrivée de nouveaux e-mails, me donner la météo...

Enfin, comme Daryl est déjà pourvu d'une webcam, j'aimerais implémenter des fonctionnalités de recherche de tags ou reconnaissance de visage...

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Si mon projet vous intéresse, vous pouvez aller jeter un coup d'oeil sur mon blog: http://darylrobotproject.wordpress.com

J'ai créé ce blog pour expliquer la démarche globale de mon projet, pour expliquer comment aborder certaines problématiques, mais également pour expliquer comment faire fonctionner certains éléments (arduino, contrôleur, modules, java...). En effet, j'ai parfois eu beaucoup de mal à trouver des tutos sur certains éléments.

J'essaye de mettre le blog régulièrement à jour, et de faire quelques vidéos.

N'hésitez pas à apporter vos critiques que ce soit sur le robot, ou bien le blog.

Merci à vous

critok

Lien vers le commentaire
Partager sur d’autres sites

Je viens de lire ton dernier article: belle investigation sur tes parasites IR ! :yes:

Content de voir que l'idée des cônes pour guider les ondes IR se soit révélée efficace, pas mal aussi pour l'algo de lissage...

Par contre, si tu n'as plus de parasites malgré le croisement des capteurs c'est bien parce-que tu les utilises à la demande nan, de façon séquentielle ?

:chinois:

Lien vers le commentaire
Partager sur d’autres sites

Je viens de lire ton dernier article: belle investigation sur tes parasites IR ! :yes:

Content de voir que l'idée des cônes pour guider les ondes IR se soit révélée efficace, pas mal aussi pour l'algo de lissage...

Par contre, si tu n'as plus de parasites malgré le croisement des capteurs c'est bien parce-que tu les utilises à la demande nan, de façon séquentielle ?

:chinois:

Pour ma part, je ne pourrais plus croiser les capteurs (droite et gauche) car j'ai fixé les supports et ça va être un peu dur de modifier la disposition. Normalement il est recommandé de les croiser pour ne pas avoir de parasites(les rayons IR étant opposés, les capteurs ne doivent plus interférer entre eux), mais perso j'y crois moyen.

Pour l'utilisation à la demande, idem ça ne change pas grand chose au final. Dans mes tests, j'ai constaté que ça réduisait un peu les parasites mais c'est pas extra ordinaire.

Je pense que les mesures sont tellement rapides que, même si le capteur 1 est éteins, lorsque le capteur 2 prend ça mesure, il doit resté des rayons IR qui se ballades. Mais comme je l'ai expliqué sur le blog, vu la vitesse de la lumière ça me parait étrange qu'il reste des IR qui se baladent. J’avoue que je ne sais pas trop sur ce coup, ça reste un mystère pour moi.

Lien vers le commentaire
Partager sur d’autres sites

Je pense que les mesures sont tellement rapides que, même si le capteur 1 est éteins, lorsque le capteur 2 prend ça mesure, il doit resté des rayons IR qui se ballades. Mais comme je l'ai expliqué sur le blog, vu la vitesse de la lumière ça me parait étrange qu'il reste des IR qui se baladent. J’avoue que je ne sais pas trop sur ce coup, ça reste un mystère pour moi.

C'est peut-être un phénomène type ampoule incandescente... Quand tu éteins l'ampoule, le filament se refroidit "doucement" mais continu à émettre un peu de rayonnement lumineux/IR... :roll:

:chinois:

Lien vers le commentaire
Partager sur d’autres sites

Je pense que les mesures sont tellement rapides que, même si le capteur 1 est éteins, lorsque le capteur 2 prend ça mesure, il doit resté des rayons IR qui se ballades. Mais comme je l'ai expliqué sur le blog, vu la vitesse de la lumière ça me parait étrange qu'il reste des IR qui se baladent. J’avoue que je ne sais pas trop sur ce coup, ça reste un mystère pour moi.

C'est peut-être un phénomène type ampoule incandescente... Quand tu éteins l'ampoule, le filament se refroidit "doucement" mais continu à émettre un peu de rayonnement lumineux/IR... :roll:

:chinois:

Normalement non, les LED ont une vitesse de switch très grande. Normalement, on ne devrait pas avoir ce genre de problèmes. La preuve en est que les LED IR des télécommandes sont switchées sur une bande porteuse entre 30 et 60Khz, donc jusqu'à 60 000 fois par secondes on-off. Peut être peut on imaginer les rayons IR reflétés, combien de fois un rayon se reflète il?

pour ma part, vu que la fréquence de rafraîchissement du capteur IR est TRES élevée, je fais une moyenne des X dernières mesures, ça filtre les données erratiques.

Après, j'ai été très séduit par le rangefinder IR de maxbotix, qui ne donne que 20 mesures par seconde, mais ultra-stables, et de 10cm à 6m (et il existe une version à précision millimétrique...)!

Peut être pourrais tu mettre tes IR rangefinders dans des tubes pour bloquer tout rayonnement qui ne soit pas dans l'axe? Pour ma part, pour l'analyse directionnelle du faisceau IR, je pense m'appuyer sur un micro servo pour faire le balayage.

EN tous cas, voila un bien beau robot, bien équipé :) Il doit valoir son pesant de cacahuètes ;)

Edit : oups, je vois que tu as déjà trouvé les solutions ^^

par contre, une possibilité, c'est que ce soit le rayonnement IR ambiant, je n'ai pas trouvé si ces capteurs (moi j'ai la version 10-80cm) envoient simplement de l'IR, ou s'ils envoient de l'IR sur une bande porteuse. Dans le premier cas, si on se rappelle que tout corps chaud émet des IR, on peut peut être avoir des perturbations...

Par contre une chose que je ne saisis pas : si tu as un capteur ultrasonique, pourquoi ajouter 3 capteurs IR?

Et un second point : pourquoi avoir pris des capteurs de courte portée, alors qu'en IR on peut en avoir qui font 10-80cm ou 20-150cm?

Lien vers le commentaire
Partager sur d’autres sites

Salut sky99,

Merci pour ton éclairage concernant les capteurs.

Effectivement comme tu l'as dit, j'ai testé la mise en place de cônes sur les capteurs et plus de parasites + amélioration de la précision. Donc je vais partir sur cette solution en confectionnant des cônes en plastiques...

Pour les maxbotix, tu es sûr qu'il s'agit de capteur IR? Je ne trouve que des capteurs ultrasons sur leur site?

Pour les parasites IR des rayonnements ambients, c'est bien possible qu'il y en ai. Mais dans mon cas, lorsque je met mon doigt devant le capteur ir du millieu plus de parasites sur le capteur gauche donc ca me parait flagrant... De plus je pense que mon algo filtre ce genre de parasites IR ambient désormais.

Sinon pour répondre à tes questions:

-Par contre une chose que je ne saisis pas : si tu as un capteur ultrasonique, pourquoi ajouter 3 capteurs IR?

En gros, lorsque j'ai concu mon robot, mon idée etait d'avoir droit capteurs IR Sharp 4-30 montés à l'avant du robot pour détecter les obstacles directement devant le robot et pour l'arrêter en conséquence (donc un à droite, un à gauche et un au milieu sur ma tourelle), plus un capteur ultrason sur la tourelle utilisé pour scanner l'environnement plus lointain (jusqu'a 3m)

Pour l'instant le robot n'utilise que les capteur IR: s'arrête si obstacle à moins de 10cm, tourne de 90° de tel ou tel côté (suivant le capteur qui a capté) puis repart.

A terme, j'aimerais la même chose mais aprés avoir tourné de 90° alors la tourelle scanne, je réalise une espèce de map de l'environnement devant mon robot et je me dirige vers "les trous", un peu comme un mode découverte.

-Et un second point : pourquoi avoir pris des capteurs de courte portée, alors qu'en IR on peut en avoir qui font 10-80cm ou 20-150cm?

Tout simplement car j'arrête mon robot à 10cm d'un obstacle, j'ai donc juger que les 4-30 suffiraient, ce qui à l'air d'être le cas.

++

Lien vers le commentaire
Partager sur d’autres sites

Pour le maxbotix, il s'agit d'un capteur ultrasonique. Désolé si ma formulation à laissé penser le contraire.

Je t'en parlais, car ton schéma précise "capteur ultrasons de 3 à 30cm", donc je pensais que c'était un capteur courte portée. Du coup s'il va a 3m, je comprends.

Je comprends ton approche "anticollision" avec les capteurs IR courte portée. Ceci dit je pense qu'il est possible de faire la même chose avec un capteur à plus grande portée, ce qui permet de voir l'obstacle de plus loin. Ceci dit, je comprends que tu aie préféré le capteur ultrasonique pour la longue portée. Mais dans tous les cas, il me semble possible de détecter les objets uniquement à partir du capteur ultrasons...

Le gros défaut de l'ultrason, c'est la largeur du faisceau. Du coup on détecte précisément les objets devant, mais dans une zone plus large que le IR. (ça et la fréquence d’échantillonnage de 20Hz qui pourrait ne pas suffire pour des cas spécifiques/extrêmes). De ce fait, le capteur ultrasons est censé être incapable de détecter les objets trop fins, comme un pied de chaise.

Et c'est la que ta solution est originale, car souvent les capteurs ultrasons sont fixes, et les capteurs IR sur tourelle pour faire un balayage!

Mais du coup ça se comprend parfaitement, les capteurs IR servent de capteurs anticollision, alors que le capteur ultrasonique, s'il est utilisé pour faire du mapping, permettra de faire de la planification et de l'évitement par une trajectoire pré calculée, plutôt qu'un comportement réactif "j'avance, OH, un obstacle, je tourne". Du coup j'imagine que ta routine de mapping ultrasonique sera la plus utilisée, mais la routine d'évitement IR aura la priorité au cas ou un obstacle à courte portée est détecté....

Pour ma part, j'avais choisi de faire tourner le robot jusqu'à ce qu'aucun obstacle ne soit plus détecté. Du coup, ça fait qu'on évite toujours par le même coté les obstacles. Mais pour le robot raspberry pi, je compte également procéder à du mapping, de la planification de trajectoire, mais en utilisant le capteur ultrasonique.

Par rapport à tes capteurs, avec le capteur ultrasonique, à plus longue portée, une fois qu'il a repéré un objet à longue portée, tu peux permettre au robot de calculer sa vitesse en fonction de la distance parcourue... ça peut être intéréssant pour évaluer sa vitesse propre, et également la difficulté du terrain, etc...

En tous cas, vu la richesse en capteurs de ton robot, je pense que tu pourra faire tourner plein d'algos intéressants. L'un de ceux que j'ai envisagés, c'est un déplacement aléatoire, mais avec une mémoire des mouvements effectués, et des obstacles détectés. Par analyse de tous ces paramètres, je pense qu'on peut dessiner une carte de l’environnement.

J'ai hâte de voir la suite de tes travaux en tous cas :)

Lien vers le commentaire
Partager sur d’autres sites

Saloute!

Ah ok pour le maxbotix, je me disais aussi... Apparemment ces capteurs ne sont pas trop mals, j'en ai lu du bien...

Effectivement, petite coquillette dans mon shéma il faut lire 3cm à 3m et non 3cm lol ;) Bien vu!

Concernant la largeur des capteurs ultrasons, cela dépend du capteur, il y a d'excellent capteur (faible largeur) mais chères, et d'autres moins chères mais avec un cône de détection énorme. Le Ping))) est de bonne facture. Et pour avoir testé rapidement, le cône est trés trés fin (presque la largeur du capteur jusqu'a 1m), aprés 1m le cône s'élargit pour former comme un champignon. Mais vis à vis du capteur IR, je le trouve plutôt bon, voir meilleur. Comme je l'ai expliqué sur mon blog (vidéo à l'appuie), la précision des capteurs IR n'est pas trés bonne (Voir mon explication cas1 & cas2). J'ai pris des IR car un peu moins cher mais si j'avais su, je n'aurais pris que des capteurs Ping)))

Sinon pour l'algo mémoire et la carte j'y ai pensé également mais ca me parait plus tendu, car il me faudrait des encodeurs sur mes roues pour connaitre le déplacement précis du robot (ce que je n'ai pas) et vu que les capteurs ne sont pas ultra précis, j'ai peur que la carte soit pas tip top. enfin je vais deja déployer mon algo plus complexe, et je verrais par la suite ;)

++

Lien vers le commentaire
Partager sur d’autres sites

Sinon pour l'algo mémoire et la carte j'y ai pensé également mais ca me parait plus tendu, car il me faudrait des encodeurs sur mes roues pour connaitre le déplacement précis du robot (ce que je n'ai pas) et vu que les capteurs ne sont pas ultra précis, j'ai peur que la carte soit pas tip top. enfin je vais deja déployer mon algo plus complexe, et je verrais par la suite ;)

Pour les capteurs de mouvement, il y a deux solutions simples :

un capteur hall, qui détecte un champ magnétique, est fixé sur le châssis du robot, en face de chaque roue. Tu places un petit aimant dans le bon sens, et le capteur hall détecte à chaque passage de l'aimant un tour de roue. Le capteur hall coûte environ 2$, et est très simple à utiliser (capteur digital, alimenté en 5V, une seconde patte sur le ground, et la troisième dans un port numérique du arduino). Lorsque le pôle sud de l'aimant est présent, il renvoie 1, 0 sinon (ou le contraire).

Une autre solution est d'utiliser une LED et une photorésistance (ou peut etre une photodiode, je n'en ai jamais utilisé ceci dit, uniquement des photorésistances) de part et d'autre de la roue. A chaque fois qu'un montant de la roue passe entre les deux, il interrompt le faisceau, ou en diminue l'intensité, et si on connait l'angle des montants de ta roue, on peut calculer la rotation de la roue. L'avantage est que du coup la résolution est supérieure, puisqu'on peut connaitre le déplacement par fraction de tour. En revanche, il y aura un peu de traitement, mais rien de difficile non plus.

Enfin, je pensais au départ à une solution purement logique, une estimation du mouvement. Sur un terrain donné, ton robot a une accélération quelconque, et donc tu peux connaitre le temps avant qu'il atteigne sa vitesse nominale (il est peut être même négligeable). Il a ensuite une vitesse de croisière, donc si tu connais la durée du déplacement en ligne droite, tu connais à peu près la distance. Donc si tu rencontres un obstacle, le robot marque cet obstacle à des coordonnées arbitraires. Le robot tourne, et donc sait que sa trajectoire sera selon une droite donnée, et sait ou il s'arrête sur cette droite pour le prochain obstacle. Du coup, tu connais la position du second obstacle par rapport au premier. Au bout d'un certain temps, tu dois avoir la position approximative des objets de l'environnement...

Au passage, il y a un point intéressant, c'est que tu disposes d'un capteur ultrasonique a longue portée. Si le robot est au centre d'une pièce, il est à priori capable de détecter les obstacles dans un cercle de 6m au tour de lui. Du coup en balayant la tourelle, tu peux avoir une "image radar" des objets détectés selon l'angle, avec leur distance...

Dernier point, pour mesurer le déplacement. Si le robot est face à un obstacle à 2m, en le faisant avancer vers cet obstacle sur 1m, et en mesurant le temps pris, tu peux avoir la vitesse linéaire du robot... Du coup en trackant un objet fixe, le robot peut aussi savoir de combien il s'est déplacé!

Ps : désolé Killator je n'avais pas fait gaffe au nombre de quotes.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...