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ß (Carl Friedrich Gauß – Wikipedia) 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 (Datei:10 DM Serie4 Rueckseite.jpg – Wikipedia).
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.