PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : visuelle Distanzmessung fuer mobile Roboter



jörn
07.02.2009, 19:59
Moin,
richtig aktuell ist dies Projekt zwar nicht mehr, aber ich habe gerade die Bilder davon wiedergefunden. Vielleicht ist es ja interessant, weil hier immer mal wieder Kameraprojekte auftauchen.

2004 haben ein Kumpel und ich einen Roboter mit Raumtiefenwahrnehmung gebaut. Dabei haben wir uns des Lichtschnittvefahrens bedient, umgesetzt mit einer Gameboy-Camera und einem auf einen Servo verstellbar montierten Linienlasers. Die einzelnen Linienbilder fuer verschiedene Winkeleinstellungen des Lasers wurden ueberlagert und dann daraus ein Distanzbild berechnet. Das ganze lief auf einem ATmega8515 mit 32kB externem RAM, der komplette Code war in Assembler (Dass wir das auf einer solchen Platform und in Maschinensprache umsetzen konnten liegt weniger an unserem grossen Geschick mit Assembler als vielmehr an der Einfachheit des Verfahrens.)
Fuer die Navigation auf Grundlage der Entfernungsbilder blieb dann leider wenig Zeit, weshalb wir einfach einen Schwellwert fuer die minimale Hindernisentfernungen festgesetzt haben.

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2239
Der Roboter mit exponiert montiertem Linienlaser

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2240
Ein Graustufenbild einer Beispielszenerie

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2241
Das Linienbild der Szenerie

https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=2242
Und das errechnete Entfernungsprofil

Christoph2
08.02.2009, 01:02
Is ja uur geil, ich arbeite auch gerade an einem projekt mit der gb cam.
Ich bin noch beim boardlöten, ich sollte mal wieder weitermachen.

Du machst ja bei jeder linie ein bild, und dann wird alles berechnet.

Wie lange dauert das bis du von einer "szene" so ein entfernungsprofil erstellt hast?
Kann die gb cam den linienlaser auch bei tageshelligkeit erkennen?

lg christoph

jörn
08.02.2009, 10:56
Es sind 20 Linien pro Bild, die jeweils mit sehr kurzer Belichtungszeit aufgenommen werden, da dann allein die helle Linie im Bild zu sehen ist. (Auch wenn das Linienbild nach kompletter Dunkelheit aussieht wurde es bei Tageslicht gemacht.) Das dauerte, wenn ich mich richtig erinnere, knapp zwei Sekunden. Die eigentliche Berechnung ging dann relativ schnell, es sind deutlich unter 100 Instruktionen pro Pixel. Das Erkennen der Laserlinie ist auch bei Sonnenlicht meist kein Problem, (Sieht man von extrem dunkeln Oberflaechen und Glas ab.) allerdings braucht man auch einen guten Laser. Anfaenglich haben wir mit dem 50 Euro Linienlaser von Conrad (optische Ausgangsleistung < 1mW) experimentiert, der dann wirklich nur bei kompletter Dunkelheit und guten Oberflaechen mit langer Belichtung funktioniert.

Gruss, Joern

ähM_Key
08.02.2009, 14:26
Anfaenglich haben wir mit dem 50 Euro Linienlaser von Conrad (optische Ausgangsleistung < 1mW) experimentiert

Und welchen setzt ihr jetzt ein?

jörn
08.02.2009, 17:24
Der Laser kam letztendlich von Ebay und hatte ne Ausgangsleistung von 5mW. Das sind Laserschutzklassen, die eventuell vorsichtiger zu behandeln sind (Allerdings ist es auch kein Punkt, sondern die Leistung wird ueber eine Linie aufgefaechert.)
Conrad scheint mittlerweile auch einen leistungsfaehigeren Linienlaser zu fuehren, den sie als bei Tageslicht sehr gut sichtbar beschreiben. Der liegt um die 200 Euro.

ähM_Key
08.02.2009, 17:46
Bei Laserfuchs gibts Linienlaser mit 5mW für 13€...was zeichnet den für 200€ aus?

(Versteh mich nicht falsch, will das nur verstehen :) )

vohopri
08.02.2009, 17:59
Hi Jörn,

feines Gerät, eleganter Algorithmus! Gefällt mir gut.

Zum Algo hab ich noch die Frage: So wie ichs verstehe, funktionierts nur perfekt, wenn der Boden eben ist und die Hindernisse auf dem Boden stehen. Bei unebenem Boden würde es ungenau und über dem Boden schwebende Hindernisse, oder nach vorne konvexe werden weiter weg vermutet. Ist das so korrekt?

grüsse,
Hannes

jörn
08.02.2009, 19:31
Ne, das verstehst Du falsch. Ich gebe zu, dass da das Beispielbild ein bisschen ungluecklich ist und leider habe ich das Ding demontiert und kann deshalb keine weiteren Szenerien aufnehmen, die mal ein komplexeres Setting zeigten.
Der Algorithmus sollte in der Hinsicht nicht taeuschbar sein und hat allein bei manchen Settings Probleme mit Abschattungen, die aber auch nicht zu Fehlern sondern nur zu Regionen ohne Daten fuehren sollten.
Deine Ideen zur Taeuschung hoeren sich so an, als verwende der Algorithmus den Horizont und die Hoehe im Bild als Clue fuer Entfernung. (Genau so funktionierte unser erster Roboter, der nur mit der Kamera ausgestattet war. Es schraenkt den Einsatz aber doch sehr deutlich auf "Laborumgebungen" ein.)
Tatsaechlich ist es aber mehr eine aktive Triangulation. Der Laser strahlt in einem gewissen Winkel ab, die Kamera nimmt diesen Strich an bestimmten Bildpunkten wahr. Aus Kenntnis der Geometrie von Laser und Kamera kann man dann auf die Distanz der Bildpunkte schliessen (und wie man im Bild sieht, wurde dazwischen konstant interpoliert). Damit das robust funktioniert ist es wichtig, eine gewisse Distanz zwischen Laser und Kamera zu haben. (Deswegen die exponierte Montage es Lasers)
Gruss, Joern

jörn
08.02.2009, 19:39
Ja, es liegt mir fern fuer Conrad zu werben und bei manchen Preisen halte ich es direkt fuer nicht ausgeschlossen, dass man es vielleicht auch woanders fuer 90% weniger bekommt. Letztendlich hilft sowieso nur ausprobieren und bei 13 Euro macht man wohl nichts verkehrt.

vohopri
08.02.2009, 20:17
danke für die Antwort,
eine eindeutige Triangulation gibts aber wohl dann, wenn man beim Auswerten des Bildes weiss, welche Linie zu welcher Laserneigung gehört. Wie ist das im Verfahrenn sichergestellt? Sind die Linien gekennzeichenet? Ich hab dich so verstanden, dass die Bilder überlagert werden.

grüsse, Hannes

jörn
08.02.2009, 21:47
Ja, haste recht, in der Ueberlagerung ist deshalb jede Linie eindeutig kodiert. Das sieht man auch ein bisschen in dem Linienbild. Linien mit einem kleineren Winkel des Lasers zur Vertikalen sind dort dunkler.
Das ist auch der Vorteil beim Einsatz einer Laserlinie gegenueber eines Gitters: Man muss sich nicht um dieses Problem kuemmern, was den Algorithmus deutlich einfacher macht.
Gruss, Joern

vohopri
08.02.2009, 22:06
OK, danke für die Mühe des Erklärens.
Der Algo ist ja noch eleganter, als ich gedacht habe.

grüsse, Hannes

Ozzy
29.04.2009, 19:14
Moin,

hast Du denn vielleicht noch ein paar mehr Informationen zum Projekt, wie zum Beispiel Code, den Namen des Algorithmus oder vielleicht den Schaltplan?

MfG, Ozzy

jörn
29.04.2009, 23:27
Weitere Informationen habe ich dazu nicht in aufbereiteter Form. Der Code ist in Assembler und weitestgehend unkommentiert; ein Schaltplan wurde nie erstellt, weil es alles eine Bastelarbeit auf Lochrasterplatinen war. Der Algorithmus ist so etwas wie ein stark abgespecktes Lichtschnittverfahren und wurde entsprechend simpel fuer einen 8Bit-Prozessor umgesetzt.
Was an Informationen suchst Du denn genau?
Gruss, Joern

Devil
04.05.2009, 11:30
hi,

ein nettes projekt habt ihr da zusammengestellt. Ich bin selber auf der such nach einer geeigneten Lösung für eine optische Distanzmessung. Ich hab auch schon ein ähnliches Projekt gefunden bei den aber ein Filter auf die Kamera gesetzt wurde, der nur das Laserlicht durchläst. Wenn ich euch richtigverstanden habe braucht ihr das nicht. Meine Frage ist also wie ihr das Problem gelöst habt.

Gruß Jan

jörn
04.05.2009, 23:40
Moin Jan,
ohne Filter kamen wir deshalb aus, weil wir einen Laser mit hoher optischer Ausgangsleistung verwendet haben. Dieser war so hell, dass sich Belichtungszeit und Verstaerkung soweit reduzieren liessen bis nur noch die Laserlinie im Bild zu sehen war. Da wir nie mit Filtern experimentiert haben, kann ich zu deren Verwendung wenig sagen. Ich denke aber, dass man bei weniger perfekten Filtern nicht darum herumkommt, einen hellen Laser einzusetzen, da man sonst sicherlich mit weissem Licht Probleme bekommt.
Gruss, Joern

ähM_Key
04.05.2009, 23:44
Eine gute und einfache Möglichkeit mit Störlicht umzugehen, ist sicher auch die Differenzmessung. D.h. ein Bild mit, eins ohne Laser, und dann voneinander abziehen. Wenn die Dynamik der Kamera ausreicht, sollte nicht viel mehr, als der Laser übrig bleiben.

Lumo
10.05.2009, 16:14
Hi,

gibt es da auch irgendwo eine Bauanleitung dafür? Wäre ja echt interessant mal sowas zu bauen.

Gruß
lumo