Microb Technology/2009/Scanner3D

De Wikidroids

Prototype Scanner 3d

Télémètre + miroir rotatif = Scanner 3d

Le télémètre laser renvoie la distance d'un objet visé par le pointeur laser. Le télémètre peut faire 400 mesures par secondes. Si le télémètre est animé d'un mouvement de rotation par exemple, on échantillonne l'objet suivant une ligne. Ici, nous n'allons pas faire tourner le télémètre laser, mais utiliser le principe des imprimantes laser pour générer un balayage suivant une ligne.

Le miroir tourne. Le laser se réfléchi sur le polygone, et tape le drum (et fixe l'encre). Quand le miroir tourne, le laser avance sur le drum, jusqu'à son extrémité. Là, le miroir a tourné de telle façon que le laser tape la face suivante, ce qui le fait "sauter" à l'autre extrémité du drum.

Nous allons utiliser ce principe pour générer une ligne qui balayera les objet devant le robot verticalement. De plus, le robot sera animé d'une rotation sur lui même, ce qui au final reviendra à faire un balayage d'une surface. Si on considère que le télémètre peut échantillonner à 400 mesures par secondes, on se débrouille pour que le polygone miroir tourne à environ 3 tours par secondes , ce qui, avec un polygone hexagonal, =génèrera 3*6 = 18 (on prendra 20) balayages verticaux par secondes, et donc résultera à une image de 20*20 pixels. La couleur de chaque pixel (niveau de gris) représente la distance du point au télémètre. Nous obtenons donc une image représentant l'objet scanné en 3D.


Voilà une image réalisé sous Blender tentant de représenter ce que sera l'image obtenu.


Voila la simulation:

Plus les objets sont proche du robot, plus ils apparaissent clair. Notez que la différence de couleur de la base est de 30 unité. (un pixel est codé avec une couleur entre 0 et 255). On considère qu'une unité représente la profondeur en centimètre. La base fait en réalité 30cm de diamètre. La différence de couleur a été ajusté pour correspondre.


Le premier traitement sera d'éliminer les objets trop éloignés: si un temple est distant de plus de 15 cm, on peut en construire un entre le robot et ce temple.

En python:

   r, g, b = d.getpixel((ix, iy))
   c = (r+g+b)/3
   if c<cste1:
       c = 0

Le résultat est le suivant:

Le deuxième traitement est de supprimer les objet au niveau de la table: Pour cela il faut enlever les pixels qui sont trop proches pour une certaine hauteur sur l'image; En python:

  r, g, b = d.getpixel((ix, iy))
   c = (r+g+b)/3
   if c<cste1 or c<cst2+iy/cst3:
       c = 0



On peut alors imaginer la détection de la plus grande ligne en scannant de haut en bas, tant que la ligne ne diminue pas de taille. Puis, trouver la différence de pixel A et B (en blanc sur l'image) de cette ligne pour trouver:

  • (A+B)/2 donne la distance du temple
  • (A-B) donne l'angle



Bien évidement, la qualité des images n'est pas celles des images présentes ici. Mais l'algorithme a l'air de fonctionner sur de très petites images. Il faudrait également bruiter l'image dans le but de simuler l'imprécision du télémètre.

Boîte à outils
LANGUAGES