PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visuelle Raumerkennung



RoboDrache
26.11.2009, 09:23
Hallo Comunity!

ich möchte mich als nächstes Projekt mit einem Roboter beschäftigen der seine Umwelt per Kameras wahrnehmen kann. Leider habe ich dazu noch kein passendes Thema gefunden.

Die Aufgabe:
In kurzer Zeit die Möbel und Personen im Raum erkennen und daraus einen Kurs festlegen um den Hindernissen ausweichen. Logischerweise sollen die Möbel und Personen nicht angemalt werden. =;
Auch sollten die Scanner sich im Roboter befinden und nicht ausserhalb. Die Verarbeitung könnte in einem PC stattfinden.

Der erste halbwegs sinnvolle Gedanke war eine Objekterkennung mit zwei Kameras zu realisieren und diese dann durch LAser/ Ultraschall etc. Entfernungsmessungen zu präzisieren.

Jemand Ideen zu dem Thema?


Danke für Eure Vorschläge!

Viele Grüße

Werner

021aet04
26.11.2009, 18:50
Ich würde es mit einem Strichlaser machen. Stichwort ist optische Triangulation. Es gibt auch einige Bücher. Ich habe eines bei elektor bestellt, das kann ich sehr empfehlen. Der Link zum Buch http://www.elektor.de/products/books/robotics/computer-vision.195612.lynkx

MfG Hannes

Felix G
26.11.2009, 20:44
Sehe ich genauso...
Aus einer Kamera und einem Linienlaser (der eine waagerechte Linie auf den Boden vor dem Roboter projiziert) kann man recht einfach einen sehr effektiven Sensor bauen, mit dem sich das Höhenprofil (und damit gleichzeitig auch eventuelle Hindernisse) unmittelbar vor dem Roboter scannen lässt.

Deiner Beschreibung entnehme ich allerdings, daß dir das wohl nicht ausreichen dürfte, denn dein Roboter soll wohl recht weit im Voraus schon planen wo er lang fahren kann.

Allerdings wird das dann sehr schnell extrem anspruchsvoll...
ich denke dazu benötigst du im ersten Schritt ein vollständiges 3D-Bild der Umgebung vor dem Roboter, denn nur aus einem 2D-Bild zu ermitteln welche Bereiche passierbar sind und welche nicht, ist kaum machbar. Um dieses 3D-Bild zu erzeugen hast du mehrere Möglichkeiten:

- Wie gehabt Laser und Kamera, aber die ganze Konstruktion schwenkbar (senkrecht zur Orientierung der Laserlinie)
- 2 waagerecht nebeneinander angeordnete Kameras

es gibt noch viele andere Varianten, aber die meisten sind entweder deutlich teurer oder deutlich anspruchsvoller was die Auswertung betrifft.


Mt 2 Kameras hast du den Vorteil, daß du schneller scannen kannst, aber das Resultat ist relativ ungenau und du brauchst viel Rechenleistung um das 3D-Bild zu erstellen. Bei der Laserscanner-Variante ist das genau umgekehrt, du brauchst länger für einen Scan (denn du musst das Teil schwenken und dabei viele Bilder aufnehmen und auswerten) aber dafür ist die Auswertung sehr viel einfacher, und das Ergebnis i.d.R. genauer.

Ich persönlich würde da übrigens ganz klar einen Laserscanner nutzen, und diesen relativ schnell schwenken (auf Kosten der Auflösung).


Wenn du dann erstmal dein 3D-Bild hast, musst du nurnoch Hindernisse darauf erkennen und eine geeignete Route planen (auch das ist alles andere als trivial, ja sogar noch erheblich komplexer als der Bau des Laserscanners).

enoritz
26.11.2009, 22:37
Unterschätz den Aufwand nicht, wenn du 2 Kameras verwenden willst (Ich spreche da aus Erfahrung).

Wenn du die einfachsten Spezialfälle zur Stilisierung des ganzen Problems annimmst, kommst du schnell auf passable Ergebnisse was die Tiefenberechnung an sich betrifft.
Allerdings ist alles was darüber hinaus geht ein tierischer Aufwand (respektive Objekterkennung+Matching, u.U. Tracking)

Falls du es doch versuchen willst:
Das Buch "Multiple View Geometry in Computer Vision" von Richard Hartley und Andrew Zisserman ist zu empfehlen.

Felix G
27.11.2009, 12:00
Ich hab mir das nochmal durch den Kopf gehen lassen...

nehmen wir an du baust einen Laserscanner, dann erhältst du Messdaten in Form einer 3D-Punktwolke in irgendeinem für uns nutzlosen Koordinatensystem.

Im ersten Schritt sollte man daher diese Punktwolke mal in ein kartesisches Koordinatensystem transformieren, idealerweise mit dem Bot im Ursprung (z.B. Y = vor/zurück, X = rechts/links, Z = hoch/runter).

Als nächstes gilt es, die Daten so weit wie möglich zu reduzieren, damit die Weiterverarbeitung nicht so viel Zeit benötigt.

Dabei würde ich folgendermaßen vorgehen:

1. Alle Voxel löschen, deren Z-Koordinate unterhalb einer bestimmten Schwelle liegt, denn es interessieren ja nur Hindernisse die der Bot nicht überfahren kann (und der Boden selbst ist eh uninteressant)

2. Alle verbleibenden Voxel deren Z-Koordinate kleiner ist als eine zweite Schwelle (Höhe des Bots + ein bischen Luft nach oben), gehören zu einem Hindernis

3. Voxel, deren Z-Koordinate über der zweiten Schwelle liegt, unter denen sich aber keine Hindernis-Voxel befinden, können gelöscht werden (denn das sind Hindernisse unter denen der Bot hindurch fahren kann)

4. die Z-Koordinaten aller Hindernis-Voxel können entfernt (bzw. im weiteren Verlauf ignoriert) werden, denn die genaue Höhe eines Hindernisses interessiert den Bot nicht, da er sich nur zweidimensional fortbewegen kann.

5. die X/Y-Koordinaten der Hindernis-Voxel werden in eine 2D Rasterkarte eingetragen, also z.B. ein weißes Bild mit schwarzen Hindernis-Pixeln.

6. etwas Bildverarbeitung dürfte jetzt angebracht sein, konkret z.B. eine Schließungsoperation um einzelne fehlerhafte Pixel zu entfernen.

7. Ausgehend vom Ursprung (also dem Bot) werden jetzt die durch die Hindernisse abgeschatteten (also nicht gescannten) Bereiche ermittelt und als unbekanntes Terrain markiert. Alle Pixel die jetzt noch übrig sind (also weder Hindernis noch unbekannt), müssen passierbar sein.

i_make_it
27.11.2009, 18:12
Im ersten Schritt sollte man daher diese Punktwolke mal in ein kartesisches Koordinatensystem transformieren, idealerweise mit dem Bot im Ursprung

Zu dem Vorschlag gibts ein klares JAIN.
1.Kartesisches Koordinatensystem ist langfristig zum kartieren besser als Polarkoordinaten. Also ein klares JA!

2. Der Bot als Ursprung/Nullpunkt. Wärend jeder einzelnen Messung und genau für die eine Messung, JA, und dann auch in Polarkoordinaten, da der schwenkende Sensor die sowieso schon so liefert.
Nachdem man die von Felix G angeführten Schritte 1 - 5 durchgeführt wurden sollte man sich aber gedanken über das Gedächtniss machen.

Der Bot soll ja nicht statisch sein sondern sich im Gelände bewegen.
Folgt man der Methode mit Ursprung des Koordinatensystems im Bot, muß man die Karte der vorhergehenden Messung verwerfen.
Nimmt man aber beide Karten und sucht nach gemeinsamen Landmarken um so eine größere und genauere Karte zu erhalten, bekommt man eine Übersichtskarte die das Navigieren später vereinfacht, da die Routenplanung an der bestehenden Karte erfolgen kann. nur sperren wie Menschen die von Zeit zu Zeit mal im Weg stehen, eine neuerdings geschloßene Tür oder ein Möbel das die Umzugsleute im Flur haben stehen lassen zwingen zur Neuplanung. somit ist es wie beim Autofahren. Wenn man das erste mal in eine neue Stadt kommt, fährt man langsamer und achtet auf Straßennamen um das Ziel zu finden. Später werden solche infos nur noch am Rande benötigt. Meist geht das dann so an der Großen Ampel bei der Feuerwehr links, nach der Tanke kommt der Fußweg und dann die zweite links rein. Jetzt bis zur Telefonzelle und dann die nächste rechts. Das große blaue Haus und da nebendrann ist das Ziel.
Das sind Landmarken die markant sind und so hervorstechend sind, das sie einfacher als Straßenschilder und Hausnummern wahrnehmbar sind.
Und aus diesem Beispiel wird noch etwas ersichtlich: Reduktion des Speicherbedarf durch Umwandlung der Rasterkarte in eine Vektorkarte.
Da sich in 2D-Karten jedes Objekt als geschlossener Linienzug aus graden Teilstücken beschreiben lässt, kann man also eine 10 Meter lange dünne Trennwand mit zwei Datensätzen beschreiben. Jeder Punkt wird durch seine X & Y Koordinate beschrieben sowie Winkel und Entfernung zum vorhergehenden Punkt und ebenso zum folgenden Punkt.
Man könnte zwar einen Satz von Winkel und Entfernung sparen, aber so hat man eine Fehlertolleranz eingebaut, da theoretisch jeder zweite Punkt der Karte gelöscht werden könnte ohne das ein Objekt mit grader Punktzahl unvollstandig beschrieben wäre. Allerdings benötigt man so ein drittel mehr an Speicher.
Muß man also nach den Gegebenheiten entscheiden.

RoboDrache
27.11.2009, 18:18
Hallo Zusammen,

Danke für die vielen sehr zielführenden Tips!!!

Ich denke auch ein Laserscanner sollte die passende Auflösung haben, Ultraschall streut vermutlich zu sehr.
Dann habe ich mir gedacht das man ein oder zwei Kameras nimmt.

Wobei eine ja reichen könnte. Das Bild wird aufgelöst und Ziel wäre an den Bildern schon das Objekt zu erkennen. Die Positionsbestimmung machen wir dann über die Koordinaten des Scanners.
Es müsste eine Datenbank angelegt werden das die Kiste zusammenhängende Objekte erkennen kann.

Als "Gehirn" könnte man einen Laptop nehmen der im Roboter verbaut wird.

Ich werde mir aber erst einmal das Buch bestellen und mich einlesen, bevor ich die notwendige Hardware organisieren werde.

Viele Grüße


Werner

i_make_it
28.11.2009, 11:11
Also mit dem Thema Bildverarbeitung (Linienerkennung, Flächenerkennung, Objekterkennung) betrittst du ein seeehr weites Feld.
Da ist neben einigen guten Büchern auch angesagt nach entsprechenden Begriffen zu Googlen und dabei vor allem an Unis in den Informatik Fachbereichen mal nach den Semesterarbeiten zu dem Themenkreis zu suchen.
Bsp.:
http://robotics.ee.uwa.edu.au/theses/not-published/2007-Bourgou-SA.pdf

Diplom oder gar Doktorarbeiten wirst du in der Regel nur vor Ort in den Bibliotheken einsehen können.
Ich habe auf meinem Notebook immer eine Liste von gefundenen Titeln mit allen Angaben und nach Städten sortiert. Wenn ich auf Geschäftsreise in der Nähe eines interessanten Artikels bin, versuche ich immer etwas Zeit für einen Bibliotheks Besuch freizuschaufeln.
Notebook mit externem Zusatzaccu, zusätzliche USB Platte und ein Notebook Scanner sind da hilfreich.
Bei zügigem Arbeiten, kann ich bei einem Besuch eine 100Seiten Diplomarbeit einscannen und speichern.
Je nach dem wie ich Zeit habe lasse ich zuhause dann OCR drüberlaufen oder drucke es einfach aus.

Als Rechenknecht kann ich PC104 Systeme mit Windows oder Linux drauf empfehlen.

http://www.pc104.org/specifications.php

Kostenpunkt für ein Low Power System sind so 250,-€ - 400,-€ der Stromverbrauch ist deutlich günstiger als beim Notebook.

Wenn der Roby schnell sein soll, nim Linux, da windows von hause aus nicht echtzeitfähig ist.
Bei Linux einfach mal unter "echtzeitfähiges Linux" Googeln und downloaden.

http://www.schwebel.de/authoring/elektronik-rtai.pdf
http://www.fh-wedel.de/~si/seminare/ws01/Ausarbeitung/6.linuxrt/LinuxRT0.htm

http://www.informatik.uni-bremen.de/agbkb/lehre/espresso/files/referate/Bildverarbeitungssysteme.pdf
Etwas veraltet, stellt aber verschiedene Systeme gegenüber, bietet somit mal einen Einblick in Auswahlkriterien und einen Einstiegspunkt um nach aktuellen systemen und Komponenten zu suchen.

Felix G
29.11.2009, 21:40
Ich denke auch ein Laserscanner sollte die passende Auflösung haben, Ultraschall streut vermutlich zu sehr.
Dann habe ich mir gedacht das man ein oder zwei Kameras nimmt.

Wobei eine ja reichen könnte. Das Bild wird aufgelöst und Ziel wäre an den Bildern schon das Objekt zu erkennen. Die Positionsbestimmung machen wir dann über die Koordinaten des Scanners.
Es müsste eine Datenbank angelegt werden das die Kiste zusammenhängende Objekte erkennen kann.Prinzipiell keine ganz verkehrte Vorgehensweise...

aber ganz ehrlich, ich würde Sachen wie Objekterkennung und Ähnliches erstmal nach hinten verschieben. Die vom Laserscanner gelieferten Daten, wie von mir beschrieben ausgewertet (ggf. mit den von i_make_it vorgeschlagenen Verbesserungen), sind bereits für einfache Navigationsaufgaben ausreichend und die Algorithmen noch recht einfach zu implementieren. Das dann mit Objekterkennung zu kombinieren, ist allerdings sehr aufwendig.

RoboDrache
30.11.2009, 09:55
Hallo!

Wenn ich ind er Nähe eines Artikels bin, kling gut. Aber tatsächlich muss ich ziemlich viel reisen...

Meine "Sorge" ist das ein Laserscanner zu langsam arbeiten könnte. Wobei ich jetzt am Wochenende "Kurt3d" vom Fraunhofer gesehen habe und der ist ja ziemlich schnell unterwegs gewesen. Wobei einen zu teuren Scanner zu verbauen ist meiner Meinung nach auch nicht sinnvoll.

Schauen wir mal...

Werner

Felix G
01.12.2009, 08:41
Ich persönlich würde da eh keinen teuren Laserscanner kaufen, sondern eher selbst einen bauen. Der wird dann zwar in Sachen Auflösung und Scangeschwindigkeit kaum an die kommerziellen Teile rankommen, aber dafür ist er eben billig (im einfachsten Fall brauhst du nur eine Webcam, ein Linienlaser und ein Servo um das ganze Teil zu schwenken).

Eventuell brauchst du noch zusätzliche Sensoren (z.B. Ultraschall) für die unmitelbare Umgebung des Bots, dann ist die Scangeschwindigkeit des Laserscanners (dessen Daten ja eher für die "langfristige" Routenplanung gedacht sind) nicht mehr so wichtig.

RoboDrache
01.12.2009, 09:10
Moin,

haben wir hier im Forum eine Bauanleitung für einen selbstgebauten Laserscanner wie Du geschrieben hast?

Viele Grüße

Werner

Felix G
01.12.2009, 10:43
Da bin ich mir nicht sicher, das Prinzip ist aber schnell erklärt...

Wenn du seitlich neben einer Kamera einen Linienlaser befestigst, der eine senkrechte Linie in den Raum projiziert, dann erscheint diese Linie auf dem Kamerabild nicht gerade, sondern in X-Richtung "ausgebeult". Aus dieser Verschiebung in X-Richtung kann man für jede Bildzeile einen Abstandswert berechnen.

Daß die Verschiebung tatsächlich vom Abstand zum Objekt abhängt wird klar, wenn man sich mal aufzeichnet wie das System von oben betrachtet aussieht. Der Sichtbereich der Kamera lässt sich als "V" darstellen, der Laser ist einfach nur eine Linie. Je nachdem wie man den Laser anordnet (Abstand und Winkel zur Kamera), schneidet diese Linie den Sichtbereich in bis zu 2 Punkten. Aus Sicht der Kamera unterscheiden sich diese Punkte nur in ihrer X-Koordinate, aber aus der Skizze wird klar, daß darin eben auch die Tiefeninformation enthalten ist (befindet sich der Laser rechts neben der Kamera, so sind weit entfernte Punkte weiter links auf dem Kamerabild, als solche mit geringem Abstand). Über den Abstand und Winkel des Lasers zur Kamera kann man auch sehr einfach den Messbereich festlegen.

Bei der Auswertung muss man also in jeder Bildzeile die X-Koordinate der Laserlinie suchen, und diese in einen Abstandswert umrechnen (das geht, je nachdem wie exakt das Ergebnis sein muss, mehr oder weniger einfach).


Um ein komplettes 3D-Bild (in Polarkoordinaten) aufzunehmen, muss man diese Konstruktion jetzt nurnoch um die Z-Achse drehen (im einfachsten Fall montiert man das Teil dafür auf einem Servo), und dabei eben eine ganze Reihe von Kamerabildern auswerten.

i_make_it
01.12.2009, 10:47
Oben in der Menüleiste gibt es eine tolle Funktion mit dem Namen "Suchen"
gib mal "lasercsanner selbstbau" und nach allen Worten suchen.

An sonsten:
Also hier gibt es einige Threads zu Laserprojektoren die man auch über suchen finden kann.
Nimm dir also eone Laserdiode mit Lininen Optik und 4 bis 6 von den 2cm Spiegelkacheln aus dem Baumarkt.
Ein kleiner DC Motor und was um die Drehzahl zu regeln.
Auf die Motorwelle ne kleine Scheibe (Zahnrad, Sperrholz, usw.) Darauf die Spiegel so wie das auch beim Laserscanner an der Kasse im Supermarkt ist. Es sind ja immer ein paar Kassen unbesetzt wo man sich das ansehen kann. Wenn einer dumm fragt sag einfach die Warheit: du willst auch so was bauen.
Wenn du jetzt den Laser richtig positionierst, bekommst du eine Laserlinie die zyklich einen bestimmten Bereich abstreicht.
Jetzt eine HD USB Webcam mit 30 Frames/sec. und die Drehzahl des Motors so eingestellt, das die linie auf jedem Frame ein Stück weiter durch den Bildbereich wandert. so bekommst du jede Sekunde 30 Bilder mit Linien im Lichtschnittverfahren. Wenn du das in der Zeit aufbereiten und verarbeiten kannst kommt der nächste Schritt.

Also HW-Kosten für den Scanner liegen unter 150,-€. Kosten für die Verarbeitungs HW (PC, Notebook, PC104 System, IPC) ab ca. 300,-€ aufwärts, je nach dem wie schnell das System sein soll.
Zeitaufwand für die Programmierung hängt von deinem Vorwissen und deiner verfügbaren Zeit ab.
Firmen die so was professionell bauen liegen je nach Framerate und ob es 2D oder 3D Bildverarbeitung ist zwichen 1000 und 5000 Mannstunden.

Ggf. kann man ja hier im Forum eine Arbeitsgruppe Bilden die so was arbeitsteilig und unter verschiedenen Blickwinkeln angeht.

Dazu müsste dann ein HW spezifikation des eigentlichen Scanners mit detailierter Bauanleitung erstellt werden. So kann jedes Mitglied einen eigenen Scanner aufbauen.
Dann werden verschiedene Testszenarien von einfach nach kompliziert definiert und eine gemeinsame Softwarebasis für die Entwicklungsumgebung gewählt.
So könnte so ein Projekt bestimmt realisierbar sein und im Anschluss allen verfügbar gemacht werden.

jeffrey
01.12.2009, 12:46
hoi,
bei der idee mit dem drehenden spiegel, ist es schwierig mit einer normalen webcam, weil die keinen sync eingang besitzt, womit man die bildaufnahme steuern kann.
wie wäre es denn einfach, den laser quer zu nehemn, dann muss man nicht so einen weiten bereich abtasten, weil nur hindernisse im bereich einer bestimmten höhe interessant sind. ev reicht sogar ein feststehender laser.
mfg jeffrey

Felix G
01.12.2009, 13:15
Bei einer billigen Webcam kann die Spiegel-Variante wirklich Probleme bereiten, daher mein Vorschlag den kompletten Aufbau (Kamera + Laser) zu drehen (z.B. mit einem Servo oder Schrittmotor). Auch kann man so eventuell die Auswertung beschleunigen, da einer bestimmten X-Koordinate immer der gleiche Abstandswert zugeordnet werden kann (d.h. man könnte z.B. eine Lookup-Tabelle nutzen).

Bei einem starren Aufbau mit waagerechtem Laser und dementsprechend einer darüber oder darunter angebrachten Webcam, hat man den Nachteil, daß man nur in einer (waagerechten) Ebene scannt, d.h. man kann Hindernisse übersehen die sich über oder unter dieser Ebene befinden.

Richard
01.12.2009, 20:25
Ich hatte zu diesem Thema in diesem Forum eimal einen
genialen Link bekommen. Leider ist der bei einer Neuistalölation
ins Nirwana verschwunden.

Der Mann hatte einen Linisenlaser und eine Darüber angebrachte,
um 90 Grad gedehte Kamera "Missbraucht". Die 90 Grad drehung
deshalb wei er dann nur die Spalten auswerten brauchte (oder so ).
Jedenfalls war das schneller und noch mit nen µC zu schaffen.

Die Bildauswertung war echt klasse, alle Hiondernisse waren deutlich
als Linien in zu erkennen. Dazu wurde auch noch sehr gut erklärt
wie so eine 4 Qadranten Karte daraus erstellt wird.

Leider halt "Wech", aber möglich das jetzt jemand mitleist und den
Link kennt oder sich erinnert. Unter suchen bin ich nicht weiter
gekommen....

Gruß Richard

RoboDrache
02.12.2009, 08:00
Guten Morgen!

Also neuer Hauptteil => Laserscanner selbstbau

Vielleicht kurz zu mir:
Ich selber schreibe Programm in Visuál Studio semiprofessionell. Allerdings in Basic, was sicher den einen oder anderen aufregen wird :-) Aber das geile an VS ist das mann in alle Sprachen durcheinander Programmieren kann und am Ende immer der selbe Code rauskommt. (Ausser das ich in Basic schneller bin)

Im Bereich der Bildverarbeitung bin ich aber noch ziemlich blank. Aber das ist ja auch Ziel von solchen Projekten,, den Einstieg zu finden.


Ich halte die Lösung von Felix für praktischer.
So wie ich verstanden habe filmt die Kamera das Spiegelbild, Also schaut die kamera 90° zur Seite auf das Spiegelbild?
Während der Laser nach vorne lasert (strahlt). Wenn ein Bild fertig ist, drehen wird den Kopf um einen Schritt und machen die nächste Aufnahme. Also im Kern die Technik eines MRT...

Drehende Spiegel und feste Kamera klingt für mich schwieriger zu bauen.
Zu mal wir erst einmal einen Kopf und ein Programm entwickeln können für einen stehenden Kopf.
Und dann im Schleifenablauf den Kopf vom Programm drehen lassen können. Dadurch ist die Scan-Geschwindigkeit vom Analyseprogramm abhänig.

Viele Grüße

Werner

Elexerion
02.12.2009, 14:31
warum schaust Du nicht mal unter Lichtlaufzeitkameras nach. Die Dinger werden gerade immer billiger und messen den Abstand jedes Bildpixels zu dem Objekt bzw. deren Lichtlaufzeit. Sowas kostete vor kurzem noch viel Geld, wird aber, wenn ich mich recht erinnere, gerade im Bereich um ein paar hundert Euro angestrebt. So eine Kamera kann dann 3D-Laserscanner ersetzen. Ob es die allerdings schon zu kaufen gibt, weiß ich nicht (war ein Artikel aus der Technology Review.

http://bvforum.de/pdf/abstracts/bvf40_Schwarte.pdf

http://www.deutscher-zukunftspreis.de/nominierter/kamerapixel-mit-tiefgang-durchbruch-zum-schnellen-3d-sehen?sec=2

Gruss
Peer

Elexerion
02.12.2009, 14:44
...by the way...

http://www.bild.de/BILD/digital/multimedia/2009/11/26/3d-kamera-roboter-projekt-natal/time-magazine-kuert-die-besten-technik-erfindungen-des-jahres-2009.html

Gruss
Peer

Elexerion
02.12.2009, 14:46
das ist die Kamera von einer Israelischen Firma, die ich meinte:

http://www.computerbase.de/news/consumer_electronics/konsolen/microsoft/2009/mai/microsoft_3d-kamera_xbox_360/

Gruss
Peer

Felix G
03.12.2009, 01:29
Naja, die Hardware für einen selbstgebauten Laserscanner dürfte immernoch deutlich günstiger sein als eine fertige TOF-Kamera (wo kann man die überhaupt kaufen? Denn die können noch so billig sein, wenn man als Normalsterblicher nicht ran kommt, bringt einem das wenig). Auch muss man sich überlegen wie es da mit dem Messbereich und der (Tiefen-) Auflösung aussieht. Für einen Roboter z.B. wäre eine Kamera, die kleine Entfernungen (<1m) nicht messen kann, nur bedingt sinnvoll.


Was den Laserscanner betrifft, dazu habe ich mal eine ganz grobe Skizze angefertigt. Diese Skizze zeigt den prinzipiellen Aufbau eines solchen Scanners von oben betrachtet. Rechts befinet sich der Laser, der eine Linie in den Raum projiziert, links daneben eine in einem bestimmten Abstand und Winkel zum Laser angebrachte Kamera (an dem Punkt unten links wäre das Objektiv, den Kamerachip habe ich bewusst auf der falschen Seite angedeutet, damit die Skizze nicht so groß wird). Man erkennt den Sichtbereich der Kamera und wo dieser die Laserlinie schneidet. Diese beiden Punkte ergeben den Messbereich für diese Konstruktion.

Hier erstmal ein paar grundlegende Feststellungen, die ggf. als Basis für weitere Diskussionen dienen könen:
- Die Größe des Messbereichs ist von der Brennweite des Kameraobjektivs, sowie dem Abstand und Winkel zwischen Kamera und Laser abhängig.
- Die Tiefenauflösung ist nicht konstant (durch die fein gestrichelten Linien angedeutet), sondern wird zum fernen Ende des Messbereichs hin schlechter.
- Die (mittlere) Tiefenauflösung ist abhängig von der Brennweite des Kameraobjektivs, der Größe der Kamerapixel, sowie ebenfalls von Abstand und Winkel zwischen Kamera und Laser.
- Die Schärfentiefe der Kamera muss den gesamten Messbereich abdecken.
- Die Schärfentiefe ist abhängig von Brennweite und Blende des Objektivs, sowie vom Fokus und der Größe der Kamerapixel.
- Trifft der Laser auf ein Objekt innerhalb des Messbereichs, so ist die X-Koordinate der Laserlinie auf dem Kamerabild, vom Abstand des Objekts zum Laser abhängig.

mare_crisium
03.12.2009, 08:08
@Felix,

zur Ergänzung Deiner Liste grundlegender Feststellungen:
- Der vom Laser erzeugte Lichtpunkt muss von der Beleuchtung durch andere Lichtquellen (Tages-/Kunstlicht, das z.T. auch moduliert ist) unterschieden werden.

@Elexerion,
danke für den Link zu ZESS :-)!

mare_crisium

RoboDrache
03.12.2009, 08:21
Moin,

Zitat: "warum schaust Du nicht mal unter Lichtlaufzeitkameras nach. "
Weill ich nicht mal halb nüchtern auf das Wort "Lichtlaufzeitkamera" gekommen wäre.

In der Tat müsste man mal Nachforschen wie lange es dauert bis diese Kameras erschwinglich und Massenprodukte werden. Oder zumindest im Schrott zu finden sind. ](*,)

Danke für die vielen Artikellinks!!!
Werde die im laufe des Tages lesen....
Da die Entwicklung bestimmt auch ein halbes Jahr dauert und ein Jahr bis was pragmatisches rauskommt....

@Felix
Du wolltest einen Prismenspiegel nehmen?
Das hatte ich dann wohl übersehen. Ich wollte mal experimente mit einen einfachem Baulaser machen. Gibt es schon für wenige Euronen. Das Foto von der lini dann in den Rechner einlesen und per Software den Versatz der Linie messen. Habe aber nur in der Erinnerung das die Linie auf einem Foto nicht gerade ist.
Ich werde am Wochenende wohl erst dazu kommen einen Versuch aufzubauen, also vielleicht am Montag die ersten Bilder.

Die Störung des Umgebungslichtes wird nicht unbedingt ins Gewicht fallen, da ja der Laser Rot leuchtet. Also werden wir nur dieses Rot filtern. Klar, bei roten Möbeln oder Kleidung wird es happern. Das selbe Problem wird bei sehr hellen Räumen und direkter Sonneneinstrahlung auftauchen.

Bis neulich!

Elexerion
03.12.2009, 08:27
Verstehe, funktioniert mit Triangulation. Ist ja eigentlich popelig einfach. Je breiter die Basis und größer die Auflösung der Kamera, desto besser funktioniert das ganze auch auf große Distanzen (mehrere 10 Meter).

Die ZCam kostet übrigens nur ca. 100,- $ und wird dieses Jahr auf den Markt kommen. Die ist natürlich zunächst nur für einen bestimmten Entfernungsbereich geeignet (zuerst offensichtlich für Spielekonsolen, also mit einem Meßbereich von ein paar Metern, das wird sich aber bestimmt sehr schnell ändern.
Prinzipiell können diese Kameras für alle erdenklichen Entfernungen ausgelegt werden, das ist nur eine Frage der Technik. Sie funktionieren anscheinend mit einem extrem schnellen Shutter und einem IR-Laser, der die Szene beleuchtet, genau weiß ich es aber noch nicht.

Für all die Anwendungen mit Bildauswertung ist aber immer ein PC erforderlich, oder?
Oder gibt es auch Möglichkeiten, die es einem Controller ermöglichen, die Daten zu nutzen?

Gruss
Peer

Felix G
03.12.2009, 09:28
@Felix
Du wolltest einen Prismenspiegel nehmen?
Das hatte ich dann wohl übersehen. Ich wollte mal experimente mit einen einfachem Baulaser machen. Gibt es schon für wenige Euronen. Das Foto von der lini dann in den Rechner einlesen und per Software den Versatz der Linie messen. Habe aber nur in der Erinnerung das die Linie auf einem Foto nicht gerade ist.Nö, ich will überhaupt keinen Spiegel nutzen...
Die dargestellte Konstruktion funktioniert so wie sie ist, ohne weitere Bauteile (außer einem Motor mit dem man das Teil als ganzes schwenken kann).

Allerdings muss ich zugeben daß es sinnvoll gewesen wäre einige Teile zu beschriften. Die Kamera (bzw. deren Objektiv) befindet sich ganz unten links, wo die Linien zusammenlaufen. Das Objekt rechts über diesem Punkt symbolisiert den Kamerachip, der sich eigentlich auf der anderen Seite hinter dem Objektiv befindet (Den habe ich nur aus Platzgründen auf dieser Seite platziert).

Ich denke ich werde heute Abend nochmal eine bessere Skizze anfertigen.



Die Störung des Umgebungslichtes wird nicht unbedingt ins Gewicht fallen, da ja der Laser Rot leuchtet. Also werden wir nur dieses Rot filtern. Klar, bei roten Möbeln oder Kleidung wird es happern. Das selbe Problem wird bei sehr hellen Räumen und direkter Sonneneinstrahlung auftauchen.Ein Filter ist schonmal sinnvoll, aber falls das nicht ausreicht wird man wohl den Laser modulieren, und dann jeweils von einem Bild mit eingeschaltetem Laser, eines mit ausgeschaltetem Laser subtrahieren müssen.

Felix G
04.12.2009, 09:23
Also eine neue Skizze habe ich jetzt doch nicht mehr gemacht, denn auf Wikipedia habe ich einen guten Artikel (mit Skizze) gefunden: Lasertriangulation (http://de.wikipedia.org/wiki/Abstandsmessung_(optisch)#Lasertriangulation)

Dort wird zwar alles nur relativ oberflächlich beschrieben, und auch die Skizze zeigt keine (für uns ggf. relevanten) Details, aber die brauchen wir eh erst im späteren Verlauf.



Für all die Anwendungen mit Bildauswertung ist aber immer ein PC erforderlich, oder?
Oder gibt es auch Möglichkeiten, die es einem Controller ermöglichen, die Daten zu nutzen?Je nach Verfahren ist die Auswertung mit einem µC durchaus möglich...
Bei der von uns zur Zeit favorisierten Lasertriangulation z.B. geht das, da die Auswertung recht simpel ist. Voraussetzung ist allerdings ein Kameramodul, daß sich vernünftig an einen µC anschließen lässt (digitale Schnittstelle, die unkomprimierte Daten liefert ... kein USB!).

Mal ein Beispiel mit moduliertem Laser:
(Annahme: die Kamera liefert das aktuell aufgenommene Bild zeilenweise Pixel für Pixel)

1. Laser abschalten
2. Nächstes Bild in einem Puffer als Dunkelbild ablegen
3. Laser einschalten

4. Vom aktuellen Kamerapixel das entsprechende Pixel des Dunkelbilds subrahieren
5. Wenn der resultierende Wert größer ist, als das bisherige Maximum der aktuellen Zeile: als neues Maximum übernehmen (es wird also eine Variable für den aktuellen Maximalwert und eine für die zugehörige X-Position benötigt)
6. Am Ende der Zeile: Maximalwert mit Schwelle vergleichen (groß genug? dann weiter)
7. Abstandswert aus Lookup-Tabelle ablesen (X-Position des Maximums als Index für LUT)
8. Maximalwert auf 0 setzen und weiter mit der nächsten Zeile (4.)


Kurz gesagt: Außer einer Subtraktion und einem Vergleich pro Pixel, hat der µC nicht wirklich viel zu tun ... er muss nur schnell genug sein (ein Pixel muss ausgewertet sein bevor das nächste kommt).

Für einen ATmega könnte das evtl. knapp werden, aber ein ARM Cortex M3 oder vergleichbarer µC dürfte bei halbwegs vernünftigen Auflösungen und Frameraten genug Leistung bieten.



Aternativ könnte die Verarbeitung aber auch in einem CPLD oder FPGA erfolgen, da die durchzuführenden Operationen recht simpel sind. Der könnte dann direkt die fertigen Abstandswerte ausspucken, was die Datenrate auf µC Seite erheblich reduziert.