Räumliche Wahrnehmung

Man kann einem Roboter räumliche Wahrnehmung beibringen indem man zwei Kameras leicht versetzt zueinander auf der X-Achse anbringt.

Würde ich diese räumliche Wahrnehmung nicht dadurch steigern können wenn ich die Kameras zusätzlich auf der Z-Achse leicht zueinander verschiebe ? Also ein kleiner Höhenunterschied !

Hmm, damit würdest Du nur den Horizont verdrehen, würd dich sagen.

Besser wäre eine dritte Kamera oberhalb der zwei anderen, denk ich, und dann den Algorithmus zwei oder drei Mal durchlaufen lassen. (Also jeweils mit einem anderen Kamerapaar, natürlich)

Joghurt hat recht, das gibt keine Verbesserung.

Wenn man den Kopf schief hält kann man ja auch nicht besser räumlich sehen... ;)

Vorschlag: mal nach “Stereo Vision” und “Epipolar Lines” googeln… - auf dem Thema wird schon seit langem geforscht.

Ein Arduino ist dafür übrigens deutlich zu schwach, selbst ein schneller PC kommt da locker in’s Schwitzen…

Echtzeit-3D-Stereo-Algorithmen werden in der Regel mittels dicker FPGAs oder - seit ein paar Jahren - mit direkten Algorithmen auf schnellen Grafikkarten realisiert.

Und in der Tat: Multikamera-Stereoverfahren sind deutlich stabiler als Zwei-Kamera-Setups. Takeo Kanade (http://www.ri.cmu.edu/person.html?person_id=136) war einer der ersten, die sich damit beschäftigt haben.

Übrigens: trotz jahrzehntelanger Forschung sind die Stereoalgorithmen nicht so stabil wie etwa Verfahren, die auf der Projektion von Lichtmustern basieren. Deswegen wird die letztere Technik bei der Kinect angewandt (hier sind’s unsichtbare IR-Muster), aber auch bei industriellen Sensoren wie denen hier http://www.sick.com/group/DE/home/products/product_portfolio/vision/Seiten/3d_cameras.aspx - da wird mit Streifenmustern gearbeitet. Außerdem ist die Kombi Lichtprojektor+Kamera wesentlich einfacher und billiger zu realisieren als die Kombination zweier Kameras. Und die Entfernungsergebnisse sind stabiler… .

  • cpixip

Hallo, es ist die Frage was Du vorhast um das beste für die spezielle Anwendung zu finden.

Es gibt eine ganze Menge Parameter die die Möglichkeiten beeinflussen.... oder ist es wirklich nur eine allgemeine Fragestellung?...

Falls Allgemein würde ich ziemlich pauschal antworten, in der Natur gibt es kein Lebewesen mit versetzten Augen oder 3 Augen zur besseren räumlichen Einschätzung.... insbesondere bei spezialisierten Jägern (z.B. Raubkatzen) müßten sich dann 3 Augen oder in der Höhe versetzte Augen finden lassen. Ist aber nicht so, nach vorn gerichtet (im Gegensatz zu beutetieren) und in der Zahl 2.

Wenn es aber um technische Angelegenheiten geht, ist die Frage wie Du räumliche Wahrnehmung definierst, und welche Hardware Du einsetzen willst... bzw. welche Anformderungen Du hast.

Für die gehobene Umsetzung ist ein Kinect unumgänglich (sofern das Budget überschaubar bleiben soll).

Mid-Level wäre ebenfalls eine starke Basis, mit Kamera und Laserlinie... (damit ließe sich zum Beipiel ein Roboter durch eine Umgebung steuern.... 2D Map, oder Linescanprinzip).

Lowcost/level wäre sicher ein Lasersistanzmesser oder Ultraschall/Infrarotsensor auf einem Pan/Tilt-Kopf....

Von den Skil usw. Buden rede ich nicht, ich denke da ist Arduino als Prottform so oder so etwas unterdimensionert.

Lieber Gruß ChrisS

Ist aber nicht so, nach vorn gerichtet (im Gegensatz zu beutetieren) und in der Zahl 2.

Wenn man einmal vom Chameleon absieht. Beim Krokodil oder dem Hai befinden sich die Augen ebenfalls an der Seite. Die Primaten glaube ich sind so ziemlich die einzigen welche die Augen wirklich frontal nach vorne gerichtet haben.

Wenn man mal von Hunden, Katzen, Bären und artverwandten absieht.

:wink: … - die Natur ist sehr erfinderisch, was sensorische Systeme anbelangt.

Manche Vögel haben beispielsweise - im Gegensatz zu uns - zwei Bereiche, in denen sie besonders scharf sehen (einen seitwärts, einen nach vorne gerichtet, zum Beuteergreifen), Spinnen besitzen mehrere Augen, davon eines sogar mit “Teleskopoptik”. Die erlauben es dann, die Beute sehr genau zu erfassen.

Es gibt ferner kleine Tierchen (den Namen hab’ ich im Moment nicht parat), die nur zwei Lichtrezeptoren haben, die aber deshalb beweglich sind, um die Umgebung durch zeitliches Scannen abzutasten. Es könnte übrigens sogar sein, dass es zumindest bei den Trilobiten http://de.wikipedia.org/wiki/Trilobiten ein paar Exemplare gab, die das oben diskutierte Multibaseline-Stereo (also 3D-Rekonstruktion mit mehreren Kameras) implementiert hatten.

Prinzipiell kann man sagen, das Raubtiere (Eulen etwa) eher nach vorne gerichtete Augen haben, um nämlich ihre Beute sicher erfassen zu können, während Beutetiere eher dazu tendieren, einen 360 Grad-Rundumblick zu haben - was auch nachvollziehbar ist.

Übrigens erzielt keines der derzeitigen technischen Stereoverfahren die Performance, die etwa das menschliche Sehsystem auszeichnet - weder in Hinsicht auf Genauigkeit, noch in Hinsicht auf Signalstabilität.

Insbesondere Objektkanten werden prinzipbedingt unsauber aufgelöst und deshalb oft in einem nachgeschalteten Verarbeitungsschritt gesäubert - heutzutage meistens mit bilateralen Filtern. Das sind eher aufwendige Verfahren, die entsprechende schnelle Hardware voraussetzen.

Die Kinect ist im Moment unzweifelhaft das beste, was man für den Preis im Bereich 3D-Scan bekommen kann - aber sie hat eben auch u.a. das Problem, dass Objektkanten nicht richtig aufgelöst werden. Das ist, zugegebenermaßen, für die meisten Anwendungen nicht wirklich relevant, kann aber Probleme bereiten, wenn man auch dünne Strukturen, etwa Drähte oder dünne Äste, sicher erkennen will oder muß.

Ferner hat die Kinect prinzipbedingt auch Probleme bei Objekten, die im IR-Bereich zu dunkel sind. Dann ist das IR-Muster, das die Kinect verwendet, nicht mehr auflösbar.

Eine weitere wichtige Eigenschaft unseres Sehsystems, das bislang kein technisches 3D-Verfahren leisten kann, ist die Verarbeitung transparenter Objekte. Alle technischen Verfahren gehen nämlich implizit davon aus, dass es in einer bestimmten Sehrichtung lediglich ein bestimmtes, undurchsichtiges Objekt gibt. Das ist aber generell in gesehen in unserer Welt eher nicht der Fall. Auch die Kinect kann transparente Objekte nicht korrekt digitalisieren, da auch sie den sogenannten “Uniquness-Constraint” implizit benützt.

Noch eine kleine Nebenbemerkung: die Sharp-IR-Abstandssensoren funktionieren sehr ähnlich der Kinect, nutzen aber lediglich nur einen IR-Punkt statt eines flächigen IR-Musters wie die Kinect. Es gibt im Web eine Reihe von Arduino-Projekten, die mit zwei Servos und einem Sharp-IR-Sensor einen 3D-Scanner realisiert haben. Der Sharp-Sensor wird dabei durch die zwei Servos, die im rechten Winkel zueinander angeordnet werden, nach und nach in unterschiedliche Raumrichtungen orientiert und dabei jeweils die Entfernung gemessen. Das Ganze kann man dann zu einem 3D-Scan zusammensetzen.

Ist ein ganz lustiges Wochenendprojekt, allerdings dauert das Scannen seine Zeit. Ich habe mal einen 3D-Scan, der auf diese Weise entstanden ist, diesem Post angehängt. Links im Vordergrund ist ein kleiner Roboter zu sehen, rechts eine kleine Box. Beide befinden sich vor einem Bücherregal. Hell ist “nahe”, dunkel ist weiter weg… .

3d_scan_04.jpg

@cpixip: Ui, da kennt sich jemand richtig aus..... schön....

kurze Frage: Der Scanprozess im Kinect ist das Triangulation oder Structured Light, oder eine Mischung? oder ist es quasi eine Art Photogrammetry mit einzelnen definierten Projektionen um das ganze auseinander zu bekommen? Oder wird durch die Rotation des IR-Musters quasi sozusagen ein verkapptes Stereoprinzip erzeugt. :)

Das IR-Muster rotiert ja, den Sinn der Rotation verstehe ich noch nicht so ganz. Daher die etwas "dumm" formulierte Frage....

Naja, ob nun spezialisierter Jäger oder Beutehuhn... alles mit großen runden ängstlichen Augen wird gefressen, und die Tiere mit dem bösen Blick haben immer hunger ;)

Im Ernst, sehr interessantes Thema... also das mit der Räumlichen Wahrnehmung.

In der Tat, es ist per IR-Sensor, sofwern man einen echten 3D-Scan machen will wirklich etwas Zeitaufwendig, habe das hier mit zwei 400er Steppern im 1/16 gemacht.... ich sage nur "gääääähn" ;)

Kinect ist da schon eine sehr sehr schöne Sache, allerdings gibts ein paar "Probleme" die ungünstig sein können.... Das das Kinect problem mit Kanten hat, ist mir neu, aber es hat auf alle Fälle probleme mit Planen Flächen.... hier gibts ein 3D-Rauschen was sich auchnicht wirklich herausinterpolieren läßt. Zudem ist das RGB Bild zu den 3D-Daten leicht verschoben.... sind ja zwei Sensoren.... logisch....

Naja, interessant wäre aus meiner Sicht sowas wie ein PSD und einem Laserpointer... vielleicht Linienlaser... gibts da schon Versuche?

Zwei Linienlaser und ein PSD-Sensor.... aus dem Abstand der beiden Linien zueinander müßte man eigentlich auf die Entfernung schließen können, geht auch mit einer Linie.....wenn die Laser zulaufend angeordnet sind dürfte der Roboter aber nicht so breit werden,bzw die Scangenauigkeit erhöhbar sein weil die Entfernung in horizontaler Richtung ja beide Linien beeinflusst... (doppelte Genauigkeit bei doppelter Linienveränderung? grübel)

Ups: und außerdem kann man mit einem PSD glaube ich nur den hellsten Punkt und nicht zwei hellste Punkte detektieren....

Wir brauchen mal ein paar kreative Ideen hier ;)

Lieber Gruß ChrisS

Hallo ChrisS - naja, mit 3D bei Menschen und Maschinen beschäftige ich mich schon seit einigen Jahrzehnten... ;)

kurze Frage: Der Scanprozess im Kinect ist das Triangulation oder Structured Light, oder eine Mischung?

Wohl eine Mischung. Triangulation bezeichnet ein prinzipielles 3D-Verfahren, bei dem die perspektivischen Unterschiede zwischen zwei Beobachtungsstandorten benutzt werden, um Entfernungen zu berechnen. Kurz gesagt: was weit weg ist, bewegt sich bei einem Standortwechsel kaum, was näher dran ist, schiebt sich viel stärker aus dem Blickfeld.

Neben der Triangulation gibt es beispielsweise auch "time-of-flight"-Technologien, bei denen die Laufzeit eines ausgesandten und wieder empfangenen Signals genutzt wird, um Entfernungen zu bestimmen. Bekannte Vertreter dieser Technik sind Ultraschallsensoren, aber es gibt auch 3D-Kameras, welche die Laufzeit von Lichtimpulsen zur Entfernungsmessung verwenden. Letztere müssen natürlich unglaublich kurze Zeiten messen könnnen.

Eine Triangulation erfordert die exakte Positionsbestimmung eines Objektpunktes aus mindestens zwei verschiedenen Perspektiven. Das kann z.B. mittels zweier Kamerabilder gemacht werden, dann sind wir bei den klassischen Stereoverfahren. Solche Verfahren sind sehr aufwendig, da beispielsweise schon die Helligkeitswerte der beiden Kamerasignale voneinander abweichen.

Eine einfachere Methode besteht darin, die zweite Kamera durch einen Projektor zu ersetzen, der dann die Messpunkte geeignet markiert. Bei der Kinect ist das ein Muster aus IR-Punkten, beim Sharp-Distanzsensor nur ein einzelner Punkt. Die Variante, zu der ich oben einen Link angegeben hatte (Sick), benutzt einen Linienlaser.

Es gibt auch andere Verfahren, bei denen die Objektpunkte über einen zeitlichen Code (meistens einem Binärcode) flächig markiert werden. Das ist sind die klassischen "structed light"-Verfahren.

Ein zeitlicher Code wird aber meines Wissens bei der Kinect nicht verwendet. Das Pattern scheint statisch zu sein http://www.crunchgear.com/2010/11/04/what-kinect-looks-like-in-infrared-vision/. Dieses statische Muster wird von der Kamera mit Referenzmustern verglichen, die, einfach gesagt, zuvor in unterschiedlichen Entfernungen aufgenommen wurden. Die Entfernung desjenigen Referenzmusters, das in einem lokalen Testfenster die größte Übereinstimmung (Korrelation) mit dem aufgenommenen Muster aufweist, wird als lokaler Entfernungswert ausgegeben. Mehr Info über die Kinect kann man hier finden: http://openkinect.org/wiki/Main_Page.

... quasi eine Art Photogrammetry mit einzelnen definierten Projektionen um das ganze auseinander zu bekommen?

  • nicht wirklich. Photogrammetrie ist die Wissenschaftsdisziplin, die sich mit der Auswertung von Kamerabildern und anderer Fernsensoren beschäftigt. Ein großes Teilgebiet ist allerdings die Auswertung von 3D-Luftbildern.

Naja, interessant wäre aus meiner Sicht sowas wie ein PSD und einem Laserpointer... vielleicht Linienlaser... gibts da schon Versuche?

Naja, die Sharp-IR-Sensoren funktionieren im Prinzip genau so (PSD="position sensitive device"). Nur, dass die keinen Laserpointer benutzen, sondern eine IR-Leuchtdiode. Und ja, solche Sensoren haben Probleme, wenn mehr als ein Leuchfleck "gesehen" wird, was z.B. bei reflektierenden Oberflächen der Fall ist. Beispiele kann man übrigens in dem 3D-Scan sehen, den ich in meinem vorherigen Post angeheftet habe. Die hellen Streifen die kanpp unter der Position der Regalbretter sichtbar sind (oder auch an der Unterseite der Box rechts) sind Messfehler, die durch solche Reflexionen entstehen.

Übrigens: ein cooles 3D-Projekt, das im Gegensatz zu einem Linienpointer einen Schattenwurf verwendet, findet sich unter http://www.vision.caltech.edu/bouguetj/ICCV98/.

Noch ein kleiner Hinweis: wenn man im Robotik-Bereich Sensoren verwendet, hat man in der Regel nur einen begrenzten Dynamikbereich für das Ergebnis, beispielsweise etwa 8bit oder so. In diesem Falle sind triangulationsbasierte Sensoren die bessere Wahl. Time-of-Flight-Sensoren haben nämlich über den gesamten Messbereich eine konstante Auflösung, während bei Triangulationssensoren die Auflösung für Objekte, die näher am Roboter sind, ansteigt. Man kann also nahe Entfernungen genauer auflösen, was beispielsweise zur Kollisionsvermeidung geeigneter ist. Für 3D-Scanner, die Objekte digitalisieren, wären eigentlich Time-of-Flight-Sensoren besser geeignet - allerdings zeichnen die sich in der Regel nicht durch große Objektschärfe aus. Deswegen basieren die meisten 3D-Scanner auf Triangulationsverfahren.

Wow, ich danke Dir für die ausführliche Schilderung.

Ist ein wirklich interessantes Thema....

Photogrammetrie das kenne ich nur durch Tools wie Bundler und insbesondere [u]PMVS[/u] .... http://grail.cs.washington.edu/software/pmvs/

MMh, also Triangulation ist auch mit einer einzelnen Kamera und z.B. einem Laserpunkt möglich, sofern vorher kalibriert worden ist, bzw. der Winkel vom Laser zur Kamera bekannt ist.

mmh,... naja, aber die Sache ist, und ich verstehe es einfach nicht.... daß das Angebot an kostengünstigen Entfernungsmessern für die Robotik so eingeschränkt ist.

Vor nem Jahr war ich schon fast soweit einen Laserdistanzmesser zu hacken, um präzise Entfernungen Punktgenau messen zu können. US ist zum scannen zu flächig, und IR hat mich nicht so wirklich überzeugt... (Reichweite, Anwendung etc....)

Der Hammer kommt eben jetzt mit dem Kinect... ein interessantes Gerät... davon müßte MS noch eine Robotikvariante produzieren... ich meine das MS ja schon puh, wie hieß das... RoboticLab oder so.... anbietet.... zur Robosteuerung....

Ich denke es wird jetzt mit großen schritten vorran gehen.... und ich bin sehr gespannt....

Ich danke Dir jedenfalls für die vielen Infos....

Das mit dem Schatten ist quasi das Gegenteil von "David-Laserscanner"... und ich bilde mir ein daß David auch Schattenscannen kann... http://www.david-laserscanner.com/

Lieber Gruß ChrisS

Hi ChrisS - hier noch ein paar weitere Anmerkungen, vielleicht findet es ja der eine oder andere interessant:

Triangulation ist ein altes Geschäft - beispielsweise hat Carl-Friedrich Gauß (http://de.wikipedia.org/wiki/Gau%C3%9F) schon damit zeitweise sein Geld verdient. Dies wurde übrigens auch schon auf dem alten 10-DM-Schein gewürdigt - ich habe mir genau deshalb seinerzeit so einen Schein aufgehoben (http://de.wikipedia.org/w/index.php?title=Datei:10_DM_Serie4_Rueckseite.jpg&filetimestamp=20101114203119).

Seit den 70ziger Jahren des letzten Jahrtausendes wurden Verfahren entwickelt, die Triangulation mit Hilfe von Kamerabildern und Computern zu bewerkstelligen. Eines der ersten Verfahren, sicherlich das am meisten zitierte, ist das kooperative Stereoverfahren von Marr und Poggio (http://cbcl.mit.edu/people/poggio/journals/marr-poggio-PRSL-1979.pdf). Heute würde man das ein "neuronales Verfahren" nennen....

Das Marr-Poggio-Verfahren ist ferner ein sogenanntes merkmalsbasiertes Verfahren. Erst werden in den Bildern markante Merkmale gesucht, ausgeprägte Kanten etwa, die dann in einem zweiten Schritt einander zugeordnet werden. Andere Stereoverfahren berechnen stattdessen die Korrelation (Übereinstimmung) zwischen kleinen Bildausschnitten des rechten und linken Kamerabildes - dies nennt man dann logischerweise "korrelationsbasierte" Verfahren.

Neben diesen zwei Hauptgruppen von Stereoverfahren gibt es auch noch weitere Verfahren. Alle diese Stereoverfahren sind sehr rechenintensiv, liegen aber mittlerweile für Echtzeitverarbeitung in der Reichweite von üblicher PC-Hardware. Allerdings: ein Arduino ist dafür deutlich unterdimensioniert.

(Noch zwei Anmerkungen: der Link zu dem schattenbasierten 3D-Scanner ist eine alte Arbeit, nämlich von 1998, und vermutlich die erste Arbeit, in der sowas gemacht wurde. Gegenwärtig wird daran gearbeitet, communitybasiertes Bildmaterial, etwa von Flickr und Co, automatisch zu analysieren und daraus dann 3D-Modelle zu berechnen (auch an der University of Washington in Seattle). Die Ergebnisse sind vielversprechend....)

Wie schon angeführt, ist an einen flächigen 3D-Scanner mittels eines Arduinos nicht zu denken. Schon die dabei auftretenden Datenraten liegen deutlich über dem, was ein Arduino handhaben kann. Das gleiche gilt für einen 3D-Linienscanner. Von den notwendigen, doch recht aufwendigen Algorithmen garnicht zu reden. Auch hier wäre ein Arduino hoffungslos überfordert. Allerdings - ein Netbook oder ein Beagleboard würde schon für einfache Versuche im Bereich 3D-Sensoren ausreichen.

Was ein Arduino leisten kann: das punktförmige Abtasten oder Scannen des 3D-Raums. Dazu gibt es ja dann auch fertige Ultraschall- und IR-Sensoren.

Ultraschallsensoren haben eine deutlich schlechtere Auflösung in x- und y-Richtung als IR-Sensoren (die z-Richtung wäre hier der eigentliche Objektabstand). Das ist aber für deren Hauptanwendung, nämlich die Kollisionsvermeidung in der Robotik, gerade von Vorteil. Stuhlbeine etwa sind in der Regel noch nicht so dünn, dass sie von einem Ultraschallsensor übersehen würden.

Bei Ultraschallsensoren gibt es zwei Arten von Sensoren, und zwar Versionen mit getrenntem Sender und Empfänger, sowie Sensoren, die nur ein einziges kombiniertes Sender/Empfänger-Modul haben. Letztere haben einen etwas größeren Minimalabstand, da hier eine größere Totzeit nach dem Aussenden des Ultraschallimpulses auftritt.

Handelsübliche Ultraschallsensoren sind sehr einfach zu benutzen und können Objekte bis zu mehreren Metern Abstand detektieren. Da sie auf dem Laufzeitprinzip arbeiten, bleibt die Auflösung über den gesamten Arbeitsbereich gleich; manche Sensoren liefern sogar direkt die Entfernung in cm oder inch.

Im Gegensatz dazu arbeiten IR-Sensoren nach dem Triangulationsprinzip. Das Sensorsignal ist in der Regel nicht die Entfernung z, sondern die sogenannte Disparität d = 1/z. Diese Hyperbel ist in den Sharp-Datenblättern sehr schön zu sehen. Man muß also hier etwas komplizierter umrechnen, um an die eigentliche Entfernung zu kommen.

Der IR-Lichtpunkt, den IR-Sensoren benutzen, hat eine relativ kleine Ausdehnung von weniger als einem Zentimeter. Damit eignen sich diese Sensoren eher zum 3D-Scannen denn zur Kollisionsvermeidung. Der Arbeitsbereich ist gegenüber handelsüblichen Ultraschallsensoren etwas eingeschränkter, der Sharp GP2Y0A02YK0F wird beispielsweise mit 1.5 m angegeben (kann aber in der Regel etwas mehr).

So ein IR-Sensor arbeitet gepulst, und wenn der IR-Strahl abgesandt wird, zieht der Sensor kurzzeitig deutlich mehr als die 30mA Strom, die das Datenblatt angibt. Man muß deshalb beim Einsatz dieser Sensoren auf eine sehr gute Entkopplung der Versorgungsspannungen achten.

Leider gibt es durch Reflexionen des IR-Signals manchmal Fehlmessungen, die durch die notwendigerweise einfache Auswertelogik in den Sensoren auch nicht ausgefiltert werden können. Deshalb sind solche Sensoren für einen 3D-Scanner wie dem David-Laserscanner eher nicht zu gebrauchen.

IR-Sensoren eignen sich aber, am besten in Kombination mit einem Servo, wegen der höheren Ortsauflösung in x- und y-Richtung besser zum Kartieren einer Roboterumgebung als Ultraschallsensoren.

Und schon wieder sehr interessante Informationen.... hierzu möchte ich ebenfalls noch eine Anmerkung machen.

Die Forschungsarbeiten von der Uni Washington fließen auich in das von mir genannte und verlinkte PMVS(2) ein.

Was die Analyse von Bilddaten im Internet angeht, so ist Photosynth von Microsoft wohl eines der prominentesten Beispiele.

  • Wenn man Bilder nach Photosynth hochlädt werden diese nicht nur im "Raum" entsprechend angeordnet, sondern es wird auch eine Dreidimensionale Punktwolke der Szenerie erzeugt. Das ganze in Minutenschnelle.

Im Hintergrund arbeitet ein Programm welches aus den gleichen Entwicklungen wie Bundler (PMVS Vorraussetzung) hervorgeht.


Das gleiche gilt für einen 3D-Linienscanner. Von den notwendigen, doch recht aufwendigen Algorithmen garnicht zu reden. Auch hier wäre ein Arduino hoffungslos überfordert.

Ich mag falsch liegen, ich denke jedoch... mit einem Seriellen Kameramodul und einem Linienlaser welcher vertikal ausgerichtet seitlich in die (auf einen bestimmten Abstand bezogene) Mitte des Kamerabildes zielt ( im Bezug auf die Kamera also dem Winkel X), sind unmittelbar alle vertikal auf der Linie befindlichen Entfernungen "ausfilterbar". Umso weiter sich der Schnittpunkt von der Bildmitte entfernt, umso weiter ist er von der Referenzentfernung (Bildmitte) entfernt.

Das Prinzip wäre also eine Art IR-Sensor bei dem der PSD quasi auch eine vertikale Auflösung hat.

Das Prinzip ließe eine erheblich schnellere Umgebungswahrnehmung zu als mit einem einzelnen punktuell gemessenen IR Fleck.

Das Prinzip mit einem einzelnen Laserpunkt PC-basiert wäre dies: http://sites.google.com/site/todddanko/home/webcam_laser_ranger

Die Berechnungen sind eigentlich sehr sehr überschaubar....

Das gleiche ließe sich auch mit einer Linie und der Zeilenbezogenen umrechnung realisieren. Ich denke für einen Arduino sicher möglich.

"Lasse einen Zähler mitlaufen, finde mir den rotesten Punkt auf dieser Kamerazeile, wieweit ist der Zähler von Auflösung/2 entfernt), nächste Zeile".

Der Nachteil wäre ganz klar, daß die Genauigkeit durch die begrenzte Auflösung in der Entfernung abnimmt.... ist aber oft so.....

Lieber Gruß ChrisS

Ein 3D-Bild entsteht ja dadurch das zwei Bilder, welche in unterschiedliche Winkeln die Umgebung darstellen, zu einem 3D-Bild umgerechnet werden.

Also auch wenn die Augen/Kameras nicht nebeneinander sondern übereinander angebracht währen !

Deine Frage war, ob man die Qualität der räumlichen Informationen nicht durch eine dritte Kamera steigern kann....

Antwort, ja... solange die 3te Kamera mehr bzw. etwas anderes sieht als die ursprünglichen zwei.

Wo die 3te oder xte Informationsquelle sitzt ist eigentlich egal... hauptsache sie liefert Informationen die sich nicht zu 100% mit den anderen decken, und mathematisch differenzierbar sind... sonst wäre die 3te Kamera überflüssig.

Ich habe mir hierfür 30 IQP 530 Cams besorgt... ;) Problem ist immernoch die Ansteuerung... da tue ich mich etwas schwer.... :)

Lieber Gruß ChrisS

@Megaionstorm: - wie ChrisS schon sagte, erhöhen mehrere Kameras die Qualität der 3D-Karten. Das gilt übrigens allgemein, selbst wenn die Kameras wie hier (http://www.ptgrey.com/products/bbxb3/bumblebeeXB3_stereo_camera.asp) in einer Reihe angeordnet sind. Ich hatte ja schon oben Takeo Kanades Website als Link angegeben - dort ist das wissenschaftlich genau untersucht worden.

Der primäre mathematische Grund, warum mehrere Kamerabilder helfen: man bekommt mehr Gleichungen, um die korrespondierenen Bildpunkte zu bestimmen.

Ein einfaches Beispiel zur Erläuterung: mit einer horizontal angeordneten Stereokamera kann man die Entfernung einer horizontalen Tischkante nicht bestimmen, denn die Kante sieht ja entlang der Basislinie der Kamera immer gleich aus. Es ist also nicht möglich, korrespondierende Bildpunkte zu bestimmen, die man ja für die Triangulation bräuchte. Montieren wir aber auch noch eine vertikal versetzte Kamera dazu, dann können wir die Entfernung der Tischkante sehr genau durch das vertikale Kamerapaar bestimmen.

Es gibt noch einen anderen Vorteil, wenn man mehrere Kameras einsetzt. Die Raumbereiche, für die keine Daten vorliegen, da sie von keiner Kamera gesehen werden, reduzieren sich nämlich, je mehr Kameras eingesetzt werden.

Es gab übrigens auch mal 3D-Kameras für Robotikanwendungen, bei denen 3 Kameras in einem Dreieck angeordnet waren. Die haben sich aber - vermutlich wegen der aufwendigeren Rechenoperationen, verglichen mit den Verbesserungen, die man dadurch erzielen kann - nicht wirklich durchgesetzt.

Heutzutage werden entweder Kamera-Arrays oder auch spezielle Kameras mit Mikrolinsen (ähnlich einem Insektenauge) eingesetzt. Eine gute Quelle für ausgefallene Bildverarbeitungsverfahren (einschließlich neuer Kameratechnik) ist SIGGRAPH (hier http://en.wikipedia.org/wiki/SIGGRAPH gibt's unten in der Tabelle (nach "papers" suchen) Links zu Veröffentlichungen). Interessant ist beispielsweise auch die "coded aperature"-Technik, die eine einzelne Kamera für 3D-Photographie nutzt (http://groups.csail.mit.edu/graphics/CodedAperture/).

Für Robotikanwendungen ist sicherlich im Moment die Kinect die optimale Wahl.

@ChrisS - mit 30 Kameras könntest Du interessante Sachen machen... - google doch mal nach "lightfield camera" bzw. "panoramic imaging" (hier ein Startpunkt für letzteres http://www.gizmag.com/epfl-develops-360-degree-3d-panoramic-camera/17205/). Auch Effekte wie im alten "Matrix"-Film sind mit einem Kamera-Array realisierbar (http://www.breezesys.com/MultiCamera/index.htm) ... ;)

Weiter: Dein Link http://sites.google.com/site/todddanko/home/webcam_laser_ranger beschreibt ja genau das Prinzip, mit dem die Sharp IR-Sensoren funktionieren. Das ist also in der Tat relativ einfach realisierbar. Problematisch dürfte der Anschluß einer Webcam an den Arduino sein, allerdings könnte man sich hier mit linearen CCD-Chips und ähnlichem (ggf. aus einem alten Scanner?) behelfen. Es stellen sich aber Fragen der Scan-Genauigkeit und Geschwindigkeit eines solchen Aufbaus. Die 38 msec pro Scanpunkt eines Sharp-Sensors werden schwer zu schlagen sein... .

Zum Abschluß: dieser Link hier (http://arduino.cc/forum/index.php?topic=55442.0, auch hier: https://sites.google.com/site/imager3d/) könnte in Bezug auf die Diskussion interessant sein - da arbeitet auch einer an einem 3D-Scanner, und zwar sehr ähnlich den Ideen, die ChrisS hier aufgelistet hat... .

Es ist ganz einfach zu verstehen weshalb mehr Kameras gut sind.

Man schaue sich mal das aktuelle Beispiel des Kinect an... 3D-Informationen, sogar Farbinformationen... aber was ist dahinter... was ist in Bereichen die die Kamera nicht sieht... die visuellen Schatten für die keine Information vorliegt, weil sie das einzelne Kamerabild nicht sieht....

Schaut man sich ein wenig an, was das Kinect in der aktuellen Hack 3D-Entwicklung ausspuckt wird man diese Schatten überall sehen... da ist quasi nichts (logisch, die Kamera bzw. der Sensor erfindet ja keine Informationen für Bereiche die er nicht wahrnimmt).

Mit z.B. 3 Kameras können diese Schatten je nach Situation "ausgeleuchtet" werden. Ganz pauschal (natürlich nicht allgemein gültig)... umso mehr Kameras, desto mehr Informationen, also besser unser Ergebnis. Wie und wo ist solange egal wie Schatten ausgeleutet werden.

WARG! Nein, das Projekt mit den 2 Servos ist soeins wie hier schon verlinkt bzw. mit Screenshot gepostet wurde. Dort wird der IR sensor halt wie beschrieben durch die gegend gedreht....

"Meine Idee" ist und war... einen Linienlaser und eine Cam zu verwenden, da pro "Bild" eine ganze Menge an Tiefeninformationen auf einmal (durch die Linie) gesammelt bzw. errechnet werden können. bei einer Auflösung von 640x480 theoretisch in vertikaler riochtung des Linienlasers 480 Tiefeninformationen im optimalen Fall.

Wie lange die Verarbeitung auf dem Arduino dauert kann ich nicht sagen, ich habe hier keine Erkenntnisse....

Dennoch denke ich daß diese Variante ein paar vermeintliche Vorteile hat.

  1. das vertikale Schwenken fällt weg, da ich nicht punktuell sondern Flächig über ein Kamerabild "scanne". In diesem Bild sind ja schon (z.B. 480) vertikale Tiefennformationen enthalten.
  2. Beispiel: http://www.cmucam.org/ 352x288 / 26 Bilder /sek. = 288x26 Tiefeninformationen in der Sekunde... = 7500 Messpunkte in der Sekunde.... Eine besonder schöne Sache, das die CMU CAM selbst verarbeiten kann... damit würde der Arduino entlastet.
  3. Farbinformationen für den 3D scan... man kann die Vertexes natürlich einfärben, sogar zum texturieren nutzen.... ein vollfarbiger Scan ist immer interessanter als ein schwarzweißer mit einer Tiefenmap als Oberflächenfarbe... :)

Ich weiß das ganze ist unrealistisch... es soll nur aufzeigen daß ein gewisses Potential besteht.... Nehmen wir die mathematischen 7500 Messpunkte in der Sekunde (ganz klar illusorisch, verarbeitung, schwenkzeit, etc.) .... als Basis.... dann haben wir 1 Sekunde / 7500 als Zeitfenster für einen einzelnen Messpunkt...

mmh, wenn mein Taschenrechner nicht spinnt wären das 13 Millisekunden...

Ganz egal wie sehr das Ganze abwägig ist, es bewegt sich in realistischen Bereichen, es ist umsetzbar... und es ist definitiv besser als einzelne Scanpunkte abzunehmen, das Budget ist überschaubar....

Aus meiner Sicht die IR-Sensorvariante 2.0 sozusagen....

Wie dem auch sei... weiter!!! Die Disskusion hat schon wirklich viel gute Informationen geliefert.... ich freue mich darüber...

Lieber Gruß ChrisS

Weiß jemand, wo man eine schnuckelige kleine I²C-Kamera bekommt, die das Bild (oder zumindest ein kleines Preview) unkomprimiert liefern kann? Die hätte mich interessiert, is aber wohl nicht mehr lieferbar... :(

Hallo! ... sagmal wo steht bei Deiner Wahl der Kamera, daß dort etwas unkompremiert ausgegeben wird... ich lese nur JPEG.....

Sei da vorsichtig, ein Jpeg auseinander zu nehmen auf einem ATMEGA wird ein wenig kompliziert denke ich....

Vielleicht kannst Du irgendwo noch eine MCA25 ergattern, die liefert "unkomprimiertes" Material.... http://avr.auctionant.de/avr-ip-webcam/mca-25-kamera.html

unter Protocol....

Würde mir die Serielleausgabe per mc auf den i2c legen.

Lieber Gruß ChrisS

Built-in color conversion circuits for 2-bit gray, 4-bir gray, 8-bit gray, 12-bit RGB, 16-bit RGB or standard JPEG preview images.

:)

Huch, das ist doch ne C328 ... die gibts doch eigentlich an jeder 2ten Ecke?

Lieber Gruß ChrisS