PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3D Scanner



Tectu
21.12.2010, 08:09
Moin Moin liebe Community,

Ich würde gerne einen 3D Scanner bauen. Voraussichtlich soll man damit halbe Flugzeug rümpfe von Modellbauflugzeugen scannen können (Das ist erst einmal unwichtig) http://www.modellversium.de/kit/bilder/7/7/3/773-7373.jpg.

Ich habe bereits einige Grundüberlegungen angestellt, möchte euch jedoch noch um euere Meinung und Anregungen bitten.


Als erstes dachte ich, dass ich für den Anfang mit einem oder mehereren Sharp-IR Sensoren einfach nur die Distanzen messse und dann daraus X, Y und Z Koordinaten berechne. Doch wie genau ist das ganze?

Als nächste Variante sieht man ja sehr sehr häufig einen Laser, der das Objekt abtastet und eine Kamera, welche das wieder aufnimmt. Wie schwer ist das zu realisieren? Ich hab bisher nur einfache Roboter und LAN-Steuerungen etc. gemacht...
Ist so etwas mit simplen AVRs überhaupt machbar?
Eigentlich könnte man ja auch über eine Webcam direkt am PC gehen, doch wie aufwenig wird die ganze Auswertung?


Zum Userinterface: Das ganze sollte wenn möglich in Qt Programmiert werden. Da Qt OpenGL unterstüzt, würde ja auch dies realisierbar sein.

Habt ihr irgend welche Ideen, Anregungen etc.?

Greez Tectu

Andree-HB
21.12.2010, 08:32
Schau Dir das mal an, vielleicht hilft es Dir :
http://www.david-laserscanner.com

Tectu
21.12.2010, 08:44
Salü Andree-HB

Ich danke dir für den Link, das sieht wirklich sehr interessant aus.
Eigentlich würde ich das halt auch gerne selber realisieren, um dabei auch etwas zu lernen. Ich weiss nur nicht genau, ob ich der ganzen Bildauswertungssoftware auf dem Computer gewachsen bin.
Bisher habe ich nur einfache Userinterfaces und kleine TCP/IP Server programmiert, also gegenüber dem hier wirklich nichts grossartiges.

Wie lässt sich so etwas am Besten realisieren?

jcrypter
21.12.2010, 10:50
vielleicht hilft Dir das hier:

http://www.youtube.com/watch?v=SPywgDBjM1Y

viel Erfolg!
Crypi

Richard
21.12.2010, 11:12
Schau Dir das mal an, vielleicht hilft es Dir :
http://www.david-laserscanner.com

Das ist sicher ein recht Preisgünstiger Einstieg und ist in D von Studenten entwickelt worden. Ich hatte auch schon einmal eine recht gute Anleitung im Netz gesehen. Vor etlichen Jahren gab es so einen (kleinen) "Drehteller Scanner wie im Film vom 2 Posting sogar bei Conrad (?).

Heute scheint aber die 3D Kameralösung von Microsoft besser geeignet zu sein. Das Teil (Kinect) ist von "Bastlern" geknackt worden und es gab auch im Forum schon sehr gute Beispiele was das Gerät kann.

Gruß Richard

Tectu
21.12.2010, 16:59
Vielen Dank für euere Vorschläge.

Ich denke, dass es wirlich eine sehr gute Idee ist, dass mit einem Laser und einer Kamera zu lösen.

Meine nächste Frage an euch ist: Kann man sowas mit Qt und somit OpenGL lösen? Ich habe mich wirkllich noch nie mit Bildverarbeitung beschäftigt.

Wenn ich das richtig verstehe, wird das Bild der Kamera so ausgewertet, dass der hellste Punkt (Laserstrahl) extrahiert wird. Anschliessend werden alle Resultate nebeneinander angereiht, richtig?



Greez Tectu

vohopri
22.12.2010, 11:10
Hi Tectu,

in den hier zitierten Beispielen hast du keinen "hellsten Punkt", es wird nicht mit Punktlasern gearbeitet, sondern mit Linienlasern. Du hast also helle Profillinien in einer bestimmten Farbe. Nach meiner Erfahrung lässt sich so etwas recht einfach aus den Bilddaten extrahieren.

Aber die weitere Verarbeitung ist dann möglicherweise eine einigermassen anspruchsvolle trigonometrische Rechnerei. Wie schwierig das wird, hängt von der genauen Aufgabestellung ab. Wenn es wirklich die gezeigten Halbschalen werden sollen, dann wird es gar nicht soo aufwändig, da du in diesem Fall sehr einfach und genau kalibrieren kannst und die Unterlage als Referenzfläche immer mit drauf hast.

Im einfachsten Fall leuchtet der Linienlaser senkrecht zur Unterlage und die Kamera blickt schräg auf das Objekt, aber so, dass die Blickrichtung im Grundriss rechtwinkelig zur proizierten Laserlinie verläuft. Dann hast du Profillinien in den Kamerabildern, deren Lage du kennst, und die du in zwei Richtungen entzerren kannst. So sind deine 3 d Daten auch schon vollständig.

grüsse,
vohopri

Richard
22.12.2010, 13:07
Im einfachsten Fall leuchtet der Linienlaser senkrecht zur Unterlage und die Kamera blickt schräg auf das Objekt, aber so, dass die Blickrichtung im Grundriss rechtwinkelig zur proizierten Laserlinie verläuft. Dann hast du Profillinien in den Kamerabildern, deren Lage du kennst, und die du in zwei Richtungen entzerren kannst. So sind deine 3 d Daten auch schon vollständig.

grüsse,
vohopri


So arbeitet DAVID auch und auch dort ist das Gitter der "Unterlage/Hintergrund" von großer Bedeutung. Die Software ist kostenlos, Linienlaser gibt es im Baumarkt gelegentlich auch Lidel/Aldi.....

Gruß Richard

Tectu
23.12.2010, 08:14
Als erstes möchte ich euch für euere Anregungen bedanken.

Ich möchte euch im folgenden etwas mehr über das Projekt erzählen:


Wie schon gesagt sollen hauptsächlich Flugzeugrümpfe von nicht fliegbaren Kleinmodellen eingescannt werden. Anschliessend soll die Möglichkeit bestehen, gewisse Abschnitte des Rumpfes ausgewählt werden. Diese sollen dann beliebig vergrösser bar sein, so dass man am ende mehrere Scheiben der Siluette des Modelles hat und diese aus Holz herstellen kann.
Das ganze dient dem Zweck, ein nicht fliegbares Modell in einem solchen Massstab herzustellen, dass es fliegen kann. Dies wird von richtig angefressenen Leuten der Aviatik schon seit langem praktiziert, jedoch müssen dafür immer die Rümpfe des kleinen Modelles "geopfert" werden. Dies möchte ich mit diesem Projekt ändern.

Es besteht keine Deadline, und ich würde wirklich gerne so viel wie möglich seber machen. Doch selbst wenn ich das Modell einmal Virtuell zur verfügung habe, stehe ich immer noch vor der grossen Aufgabe gewisse Abschnitte markieren und vergrössern zu können.


Habt ihr Ideen um das so effizient wie möglich umzusetzten?



Greez Tectu

BurningBen
23.12.2010, 09:01
Hmm, ist fraglich ob die Oberfläche nach dem Skalieren immer noch gut aussieht. Musst du denke ich einfach ausprobieren.

Das Scheibchen schneiden, solltest du in jedem 3D-CAD System machen können.

Tectu
23.12.2010, 09:28
Also empfiehlt es sich, wenn ich einfach nur den Gegenstand einscanne und es dann in ein Format verwandle, dass ein CAD Programm (wie z.B. SketchUp) nutzen kann?

Was sind das für Formate und ist es schwer die zu exportieren?
Es währe mir recht wichtig, dass man nicht 5 verschiedene Programme nutzen muss.



Greez Tectu

BurningBen
23.12.2010, 10:01
Wie willst du die Daten sonst weiterverarbeiten?

Standardformate für 3D-CAD wären z.B. .step, .stp, .igs, .stl

(SketchUp würde ich jetzt nicht unbedingt als CAD-System bezeichnen)
Kostenlos könntest du das z.B. mit Cocreate Modeling PE erreichen.
Wobei die jetzt glaube ich Creo Elements heisst, die Software.

Tectu
23.12.2010, 13:03
In dem Falle werde ich als erstes versuchen, einfach nur ein 3D File des Gegenstandes zu scannen, und diesen in das besagte CAD-Programm einzubinden.
Allerdings stehe ich dann wieder vor dem Problem, dass ich das ganze in ein passenden Format konvertieren muss...

Und wie genau wird die ganze sache eigentlich sein? ich mein dass muss schon so auf einen zentel millimeter stimmen...
Hat jemand Erfahrung damit, wie genau man sowas aufbauen kann?



Greez Tectu

Felix G
23.12.2010, 23:45
In dem Falle werde ich als erstes versuchen, einfach nur ein 3D File des Gegenstandes zu scannenGlaub mir, schon das wird schwer genug bei der von dir angestrebten Auflösung...


Zunächst mal musst du die Position der Laserlinie im Kamerabild eindeutig und möglichst präzise (subpixelgenau) bestimmen. Das allein ist erstmal nicht allzu kompliziert, und sollte sich ohne große Schwierigkeiten implementieren lassen.

Daraus kannst du dann die 3D-Koordinaten berechnen, und genau da wirds haarig. Das Problem ist die Kalibrierung, die zwingend notwendig ist wenn deine 3D Daten nicht schief und krumm werden sollen. Lies dir am besten mal den Wikipedia Artikel Photogrammetrie (http://de.wikipedia.org/wiki/Photogrammetrie) durch, vor allem die Formel zur Zentralprojektion, denn das ist ein wichtiges Thema mit dem du dich befassen musst. Zwar bezieht sich der Artikel eigentlich auf den Fall daß ein Objekt aus mehreren Blickwinkeln aufgenommen wird, aber die Mathematik ist bei einem Laserscanner quasi die selbe (nur etwas vereinfacht).

Ich gehe mal davon aus daß das Objekt auf einen Drehteller kommt, und dann automatisch ein 360° Scan aufgenommen werden soll (denn das ist die einfachste Variante). In diesem Fall erhälst du direkt eine Punktwolke als Ergebnis, die deinem Objekt (hoffentlich) möglichst ähnlich sieht. Daraus dann ein Polygonmodell zu bauen ist die letzte Aufgabe, für die es aber diverse bewährte Lösungen gibt (z.B. der Marching Cubes Algorithmus)


Kurz gesagt:
Ja es ist möglich sowas hobbymäßig zu basteln, auch mit der geforderten Präzision, aber leicht ist es nicht.

Ich z.B. habe meine Diplomarbeit zu einem ganz ähnlichen Thema geschrieben, und die befasst sich quasi nur mit dem ersten Schritt (wobei der bei mir allerdings auch erheblich komplexer war als das einfache finden einer Laserlinie)

Cysign
24.12.2010, 00:36
David Laserscanner 3D ist leider nicht kostenlos. Und nen wirklich rentabelen Studentenrabatt gibt es leider auch nicht :(

Ich möchte jetzt nicht zu weit vom Thema ablenken...aber ich würde mir gerne ne Automatisierung für zwei Strichlaser und die Rotationsfläche für David Laserscanner 3D bauen. Leider habe ich davon aber keine Ahnung.
Durch die Forensuch bin ich auf diesen Threat gestoßen. Gibts vielleicht irgenwo einen, der sich mit genau diesem Thema befasst?
Mein ziel ist es, vollautomatisiert Gegenstände in 3D einzuscannen, um diese dann in ner Modellingsoftware weiter zu verarbeiten.

Felix G
24.12.2010, 08:30
Naja, es gibt ja zwei verschiedene Versionen von der David Software... nämlich die kostenlose Free Edition mit eingeschränktem Funktionsumfang, und die Professional Edition mit allen Features.

Was das automatisierte Scannen betrifft bin ich mir ziemlich sicher, daß es da schon Lösungen für David gibt. Ich glaube ich habe im David Wiki schonmal sowas in der Richtung gelesen, kann dir aber nicht genau sagen wie der Artikel heisst.

Tectu
24.12.2010, 11:01
Danke für deinen Beitrag, Felix G.
Meine Bedenken liegen halt darin, dass ich wirklich noch nie was in diese Richtung gemacht habe, sondern immer Hardware programmiert habe, und wenn doch etwas auf dem Computer, dann nur ohne GUI.

Es existiert keine Deadline, und das Budget wird bei so einem Projekt wohl auch nicht das Problem sein.
Jedoch ist es extrem schwierig, Informationen über ein solches Projekt zu sammeln, da es nicht so wie bei den LED-Cubes, 1000 Tutorials gibt^^


Greez Tectu

Cysign
24.12.2010, 11:43
Hmmm...komishc. Die "kostenlose" Version, die ich mir runtergeladen hab, speichert die Ergebnisse nur in 320*240 Pixeln ab und kann diese nicht zu 3D-Modellen machen. Vielleicht meinst du diese? Aber allein wegen der Auflösung ist das ja zunächst einmal grenzwertig.
Ich finds schade, dass die keine 14 tägige Testversion mit vollem Funktionsumfang zur Verfügung stellen. Grade wenn man z.B. hinterher in 3D weiterbearbeiten möchte, wäre es interessant mal was abzuspeichern zum Testen.

Felix G
24.12.2010, 13:46
Es existiert keine Deadline, und das Budget wird bei so einem Projekt wohl auch nicht das Problem sein.
Jedoch ist es extrem schwierig, Informationen über ein solches Projekt zu sammeln, da es nicht so wie bei den LED-Cubes, 1000 Tutorials gibtDas stimmt, aber es gibt viele wissenschaftliche Arbeiten zu dem Thema die man sich ggf. mal anschauen kann.

Schwierige Projekte sollte man zuerst mal in kleine Häppchen aufteilen, die man alleine und in relativ kurzer Zeit umsetzen kann. Tut man das nicht, besteht die Gefahr daß man recht schnell frustriert aufgibt.


Mal eine kleine Anregung:

Das Projekt besteht aus 3 Teilen

1. Hardware
2. Firmware
2. Software


Die Hardware teilt sich auf in

1a. Drehteller
1b. Laser
1c. Kamera
1d. Ansteuerung für Teller und Laser (siehe Firmware)


Die Firmware hat folgende Aufgaben

2a. Winkel des Drehtellers messen
2b. Drehteller auf den vorgegebenen Sollwinkel fahren
2c. Laser ein/ausschalten
2d. Kommunikation mit der Software


Bei der Software schaut es in etwa so aus

3a. Auslesen der Kamera
3b. Kommunikation mit der Firmware
3c. Für jede Bildzeile die exakte Position der Laserlinie bestimmen
3d. Kalibrierung
3e. Umrechnung der Pixelpositionen in 3D Weltkoordinaten, anhand der Kalibrierdaten und der aktuellen Istposition des Tellers



Ich persönlich würde mit der Hardware anfangen, aber da die einzelnen Punkte mehr oder weniger unabhängig voneinander sind, ist das nicht zwingend notwendig.

Der Drehteller sollte möglichst genau gefertigt sein und darf natürlich nicht wackeln. Er sollte mindestens so groß sein wie das größte zu messende Objekt (lieber ein bischen zu groß als zu klein). Antreiben würde ich ihn von außen über ein Reibrad, denn dann hat man schon automatisch eine Untersetzung mit drin, was die Präzision erhöht. Außerdem würde ich ihn mit einem Encoder versehen um den aktuellen Winkel auch messen zu können (gern auch selbst gebaut, z.B. ein auf der Stirnseite aufgeklebter Streifen mit einem Gray-Code den man über Reflexlichtschranken auswerten kann).

Der Laser wird mit etwas Abstand so montiert, daß er eine senkrechte Linie genau durch die Rotationsachse des Tellers projiziert. Seitlich rechts oder links daneben kommt eine Kamera, welche so montiert wird daß sie den kompletten Messbereich erfasst.

Ist die Kamera z.B. links neben dem Laser montiert, sollte die Rotationsachse am linken Bildrand liegen (natürlich mit einem kleinen Abstand, allein schon wegen der Verzerrungen des Objektivs), und der äußere Rand des Tellers am rechten. Würde man jetzt z.B. einen sehr sehr dünnen Zylinder mittig auf den Drehteller stellen, dann würde man auf dem Kamerabild eine senkrechte Linie am linken Bildrand sehen. Ein sehr dicker Zylinder (gleicher Durchmesser wie der Teller selbst) hingegen erzeugt eine Linie am rechten Bildrand. Das heisst im Klartext: die X-Koordinate auf dem Kamerabild ist (abgesehen von den vielen Fehlern die noch wegkalibriert werden müssen) proportional zum Abstand zwischen Objekt und Laser.


Mein Vorschlag: mach dir mal eine Skizze, dann wird schnell klar wie(so) das funktioniert.

Tectu
24.12.2010, 22:02
Antreiben würde ich ihn von außen über ein Reibrad, denn dann hat man schon automatisch eine Untersetzung mit drin, was die Präzision erhöht.

Wieso ein REIBrad? Ich habe hier einen Schrittmotor, und dachte, dass ich das Teller direkt auf die Achse mache.
Wenn trotzdem mit zwischengetriebe, warum bitteschön ein REIBRAD??


Zum gesammten Aufbau: In dem Falle wird die Kamera rechtwinklig zum Laser stehen?

Noch eine Frage zum Laser: Reicht dort ein Handelsüblicher Baumarktlaser? Die Laser die David verkauft sind ja etwas "teuerer".


Gruss Tectu

Felix G
25.12.2010, 11:19
Ich habe hier einen Schrittmotor, und dachte, dass ich das Teller direkt auf die Achse mache.
Wenn trotzdem mit zwischengetriebe, warum bitteschön ein REIBRAD??Es gibt natürlich viele Möglichkeiten einen solchen Teller anzutreiben, wobei ich das Hauptaugenmerk erstmal auf die Präzision gerichtet hatte. Das Problem wenn man so einen Teller einfach direkt über seine Achse antreibt (egal ob Schrittmotor oder Servo, egal ob mit oder ohne Getriebe) sehe ich bei dem erforderlichen relativ hohen Drehmoment um die Trägheit des Tellers zu überwinden (hängt natürlich hauptsächlich von Gewicht und Größe des Tellers ab). Mein Gedankengang war daher folgender: Wenn mir Jemand einen solchen Teller hinstellen würde, mit der Aufgabe ihn von Hand möglichst exakt auf einen bestimmten Winkel zu drehen, was würde ich dann tun? Ganz intuitiv würde ich ihn natürlich nicht an seiner Achse, sondern am Rand anfassen, weil ich ihn so mit sehr wenig Kraft sehr genau positionieren kann.


Zum gesammten Aufbau: In dem Falle wird die Kamera rechtwinklig zum Laser stehen?Das wäre theoretisch zwar möglich, ist praktisch aber nicht sinnvoll. Der Winkel zwischen Kamera und Laser sollte nicht allzu groß sein, um Abschattungen zu minimieren. Ich habe mal eine einfache Skizze angehängt, wie mir das vorgestellt hatte.



Noch eine Frage zum Laser: Reicht dort ein Handelsüblicher Baumarktlaser? Die Laser die David verkauft sind ja etwas "teuerer".Naja, du brauchst halt irgendeinen Linienlaser. Keine Ahnung ob es da was Gescheites im Baumarkt gibt, aber ich habe gerade nochmal auf der David Seite geschaut, und die haben da ganz unten in der Liste auch günstigere Linienlaser für 11 Euro (und so einer sollte ja für den Anfang mal mehr als ausreichend sein).



Die "kostenlose" Version, die ich mir runtergeladen hab, speichert die Ergebnisse nur in 320*240 Pixeln ab und kann diese nicht zu 3D-Modellen machen. Vielleicht meinst du diese?Wahrscheinlich ist das diese Version, mir war allerdings nicht bewusst wie groß die Einschränkungen sind.



edit:
jetzt hätte ich doch fast die Skizze vergessen...

Tectu
25.12.2010, 11:39
Vielen Dank für die Skizze, Felix G!

Hat ein Reibrad gegenüber einem richtigen Antrieb mit Zahnriemen einen Vorteil?

So wie ich das sehe werde ich einfach mal mit der Hardware beginnen, und das ganze wie du gesagt hast Etappenweise aufbauen.

(Soll ich als "Tagebuch" einen neuen Thread anfangen?)



Greez Tectu

Felix G
25.12.2010, 12:26
Hat ein Reibrad gegenüber einem richtigen Antrieb mit Zahnriemen einen Vorteil?Ganz ehrlich? Keine Ahnung :-k
Das war nur die einfachste Variante die mir eingefallen ist.

Richard
25.12.2010, 12:41
Vielen Dank für die Skizze, Felix G!

Hat ein Reibrad gegenüber einem richtigen Antrieb mit Zahnriemen einen Vorteil?

So wie ich das sehe werde ich einfach mal mit der Hardware beginnen, und das ganze wie du gesagt hast Etappenweise aufbauen.

(Soll ich als "Tagebuch" einen neuen Thread anfangen?)



Greez Tectu

So eine kleine minni Laser Wasser wage sollte klappen wenn sie einen Strichlaser hat.

Als schön stabilen "Teller" kann man runde Tischplatten auch aus dem Baumarkt nehmen.

Gruß Richard