jeudi 16 décembre 2010


Aujourd'hui dans le courrier : 2 capteurs US achetés sur ebay. La documentation technique est limitée, j'ignore s'ils pourront être utilisé comme le Ping))) déjà installé sur le robot.
Le capteur Parallax réagit à un ordre unique : envoi d'une onde sonore, puis chronométrage du temps nécessaire au retour de l'écho.
Il semble que ces capteurs bon marché envoient des ultrasons en permanence... Quel est la nature du signal retour ? Comment faire récupérer ce signal par le micro-contrôleur ?

Il faudra quelques essais pour être fixé...



mardi 14 décembre 2010

Reconnaître une cible - Target recognition

J'ai voulu ajouter la vision à la routine de recherche et d'approche d'une cible. Le nouvel objectif du robot est donc de renverser toutes les quilles qu'il rencontre jusqu'à ce qu'il trouve celle qui comporte ce superbe symbole graphique distinctif :



Comment ça marche ?

La caméra est active en permanence. Le flux vidéo est traité par le PC embarqué, dit "PC104", à l'aide de RoboRealm qui est configuré avec les modules suivants :

Image brute : la cible et son symbole graphique. A noter, la lumière blafarde de mon bureau, avec par exemple une belle ombre au pied de la quille... Il faut en tenir lors du traitement !
Vitesse d'acquisition avant traitement : 20 FPS

Module Flood Fill 255, qui regroupe les pixels par couleurs similaires, et moyenne les teintes.

Recherche d'arête Canny 0-255

Les arêtes sont élargies avec le module Dilate pour assurer la clôture des contours

Le module Fill remplit les espaces fermés présents sur l'image : ça ressemble à l'original

Le module Shape_Match renvoit la confiance de reconnaissance des 2 "tâches" présentes sur l'image. La meilleure valeur est aussi stockée dans la variable "SHAPE_CONFIDENCE"

Pour chaque image traitée, la valeur absolue de "SHAPE_CONFIDENCE" est envoyée au Basic Stamp par le port série, précédée du caractère "A".
En sortie, ce traitement d'image est largement assez performant pour la mission : en moyenne 4 FPS.
A noter : les déformations du support du symbole et l'effet de perspective ont pu être négligés. Profitons, ce n'est pas toujours le cas...
Fin de la partie Vision.


Le début de la mission est identique à celles précédemment décrites. Après l'approche d'une cible, le micro-contrôleur lit ce qui arrive sur son entrée 1, utilisée pour les communications série avec le PC104. Dès qu'un "A" est reçu, le Basic Stamp est averti que l'octet suivant devra être stocké dans une variable "confiance".

  • Si confiance < 50, la quille est renversée et la procédure est reprise du début.
  • Si confiance > 50, la cible est identifiée, c'est la fin de la mission !


Target recognition : the closest target is knocked over unless it includes a known symbol


lundi 13 décembre 2010

Vidéos

Pas le temps de jouer avec le robot ce soir.

Par contre, les vidéos sont désormais partagées via YouTube. En cours traitement au moment où j'écris. Elles seront donc accessibles depuis vos mobiles de geeks nomades...



Videos are now shared with YouTube: you should be able to watch them on your cellphone...

dimanche 12 décembre 2010

The closest target, update

In my previous post, the robot was first looking for the closest target around using the Ping))) sensor, then it aimed this target, drove toward it and stopped at about 2 inches.

Now, what if the target moves ? At this time, my goal is not to deal with moving targets, but programming a robot means dealing with error accumulation. If this accumulation leads the robot to lose its target, the path has to be adjusted.

To do so, the traveled distance is monitored by counting the pulses sent to the servos. On my Boe-Bot, the ratio is around 2 mm/pulse at slowspeed or 0.48 pulses/mm. Comparing the "pulses distance" and the "ping distance" allows to check if the target has been missed and if the whole process has to be started over.

Code sample :

'approche la cible
DO
PULSOUT 12,730
PULSOUT 13,770
GOSUB getdistance
pulsecount=pulsecount+1
IF pulsecount>(minidist*48/10) THEN 'translate the mini distance given by the ping into pulses before comparing it
  FREQOUT 4,100,3000
  GOTO main
ENDIF
PAUSE 15
LOOP UNTIL distance<=10 'approche à 10 cm
END


L'obstacle le plus proche - The closest target

En utilisant seulement le capteur à ultra-sons, j'ai programmé le robot pour rechercher l'obstacle le plus proche et s'en approcher.
Seul le Basic Stamp pilote le robot.

1. Pivoter sur place en mesurant la distance sur environ 190 azimuts. En effet, il faut envoyer environ 190 pulsations aux servos pour réaliser un tour sur place à vitesse modérée.
2. Mémoriser la distance minimale
3. Poursuivre la rotation jusqu'à retrouver la distance mini mesurée
4. Approcher la cible jusqu'à une distance de 5 cm


Cela fonctionne mais :
- la nature du sol modifie la réaction du robot, sa vitesse de rotation, ainsi que les mesures US
- la mesure US diverge d'environ ±15°, un même point d'une cible peut donc être mesuré plusieurs fois. Une cible cylindrique renvoie donc plusieurs fois la même distance minimale au cours de la rotation du robot. La conséquence est une difficulté à s'aligner sur le centre de la cible. Pour l'instant, j'ai simplement ajouter une correction fixe de l'azimut avant d'approcher la cible. C'est très empirique et pas fiable à 100%. Un sujet à creuser...

Cette routine servira de base à d'autres comportements plus complexes.

Ports USB

J'ai finalement ajouté 2 connecteurs "type A" pour disposer de ports USB standards. Plus pratique que le réplicateur de ports externe Digital Logic utilisé jusque là...

Objectif : transfert de fichiers, wifi, bluetooth

En haut, à gauche, le connecteur USB-A, installé au-dessus du port VGA et orienté vers l'arrière du robot.

Top-left corner, the new USB-A connector, above the VGA port.

Le blog du robot est ouvert !

Après une longue hésitation, je me lance dans la rédaction d'un blog.

Faire un robot, c'est bien. Le montrer, c'est mieux. J'espère surtout que ce support me permettra de mieux documenter mes travaux et d'échanger sur des sujets techniques avec d'autres "gens bizarres". Je tâcherai de consigner ici les améliorations apportées, les missions réalisées, les problèmes résolus, les questions sans réponses, etc.

Un peu d'histoire...
Ce projet est né il y a quelques années avec un cadeau de Noël pour geek : un Boe-Bot de Parallax. Ce kit d'initiation reste la base de ce robot : le micro-contrôleur Basic Stamp 2 a été conservé pour sa facilité de mise en oeuvre, ainsi que la partie véhicule, dont la petite taille impose certains choix techniques.

La configuration matérielle ne cesse d'évoluer suivant les objectifs attendus et ma capacité à exploiter les équipements embarqués. Voici à quoi ressemble l'engin aujourd'hui.


2 choses à retenir : il n'a pas de nom et il ne recevra pas de "carrosserie" !...