

Wie schwierig ist es, einen 3D-Scanner zu bauen?

Ich bin leidenschaftlicher Bastler. Hardware liegt mir, bei der Software hapert’s immer mal wieder, wie mein neuestes Experiment zeigt: Ich versuche einen 3D-Scanner zu bauen.
Beim Durchstöbern von Thingiverse stosse ich auf dieses Ding. Designer QLRO hat einen offenen, Arduino und Android basierten 3D-Scanner gebaut. Sowas will ich auch.
Wie funktioniert der Scanner?
Der 3D-Scanner besteht aus einer 3D gedruckten Plattform, die mit einem Schrittmotor angetrieben wird. Auf die Plattform stellst du das Objekt deiner Begierde und ein Android-Smartphone fotografiert es aus verschiedenen Winkeln, während sich die Plattform dreht. Nachdem die Bilder aufgenommen sind, überträgst du sie vom Smartphone auf den Computer, um in Meshroom, einer 3D-Rekonstruktionssoftware, ein dreidimensionales Bild zu erstellen. Klingt einfach? Denke ich auch, zumal der Designer QLRO darauf hinweist, dass sein Design minimalistisch und funktional ist.
Weit gefehlt. Ich habe schon fast keine Haare mehr und die, die mir noch bleiben, reisse ich mir beim Projekt beinahe aus.
Das braucht es
Als erstes drucke ich die Plattform aus. Sie besteht aus sechs Teilen und beinhaltet einen Zahnradmechanismus. Dank meinem 3D-Drucker Creality CR-10S Pro sind die Teile nach etwas mehr als acht Stunden ausgedruckt.

Im Weiteren brauche ich einen Schrittmotor, der die Plattform über den Zahnradmechanismus antreibt, und einen Schrittmotor-Treiber, der die Kommunikation zwischen Motor und Arduino ermöglicht. Dieses Produkt enthält beides in einem.

Damit sich die Plattform dreht, brauche ich einen Arduino. Ich habe noch einen Arduino Nano von meinem Floppy-Musik-Projekt.
Das Zusammenbasteln der Plattform und Verbinden vom Schrittmotor mit dem Schrittmotor-Treiber und dem Arduino ist schnell gemacht. Wie gesagt: Mit Hardware habe ich üblicherweise keine Probleme. Bis jetzt läuft alles rund. So kann’s weitergehen.

Ein Android-Smartphone, einen Computer und Netzwerk, in dem sich Smartphone und Computer befinden, habe ich selbstverständlich zuhause. Zeit, die Software aufzuspielen.
Hardware aye, Software nay
Softwaretechnisch muss ich auf meinem Computer Meshroom installieren, damit die Fotos, die das Smartphone macht, zu einem dreidimensionalen Bild zusammengesetzt werden können.
Erforderlich ist zudem Arduino IDE. Die Software brauche ich, um dem Arduino ein Script aufzuspielen, mit dem er den Schrittmotor zum Drehen bringt.
Zu guter Letzt braucht’s noch Python für Computer und Smartphone.
Hier fängt’s bei mir an. Ich habe zwar bereits mit Python-Scripts gearbeitet, jedes Mal dauerte es aber ewig, bis ich meine Projekte zum Laufen gebracht habe.
Das grosse Problem dieses Mal: Damit Computer und Smartphone miteinander kommunizieren, muss ich auf beiden je ein Script laufen lassen. Bereits bei der Übertragung des Scripts vom Computer aufs Android-Smartphone habe ich Mühe. In QPython, der App, die es mir ermöglicht, Python-Scripte auf dem Smartphone laufen zu lassen, wird mir ein leeres Script angezeigt. Sprich: Lasse ich das laufen, passiert gar nichts.
Zum ersten Mal raufe ich mir die Haare. Aber nicht zum letzten Mal.
Aus irgendeinem Grund kann QPython das übertragene Script nicht lesen. Ich versuche deshalb das Script in QPython direkt zu erstellen. Mit Copy-Paste von Git Hub funktioniert’s leider nicht, denn so wird alles auf einer Zeile im QPython-Editor eingefügt. Also gut, ich kopier’s zuerst in ein Google Docs und dann in den Editor – eine dumme Idee, wie ich später herausfinde. Im Moment denke ich nur: Yes, jetzt ist alles korrekt drin. Ein paar Mal hat’s extra Zeilen eingefügt, aber die sind schnell wieder rausgeputzt.
Versuchshalber lasse ich beide Scripts laufen. Beim Android-Script, das Server.py heisst, erhalte ich bereits bei der Zeile mit dem COM-Port, den ich angeben muss, eine Fehlermeldung.
Was habe ich falsch gemacht? Es verabschieden sich erneut ein paar Haare.
Nach etwas Herumprobieren und Nachfragen bei Kollege Jon Andri Hoppler, der im Gegensatz zu mir etwas von Python versteht, ist das Problem rasch behoben. Auch ein paar Zeilen weiter unten, beim Server, kann mir Jon helfen. Dann kommt aber etwas, das weder ich noch er verstehen:

Hier sollte eigentlich alles funktionieren. Was soll das? Ich muss mir gar nicht mehr die Haare raufen, sie fallen mir automatisch aus. Wenn das so weitergeht, habe ich am Ende des Projekts gar keine Haare mehr.
Ich zerbreche mir lange den Kopf. Bis ich mich schliesslich daran erinnere, wieso ich bei den Scripts am Computer mit Notepad++ arbeite: Hier wird nichts formatiert. Habe ich durch’s Kopieren in Google Docs eventuell eine falsche Formatierung übernommen? Ich lösche die Leerschläge vor dem Code und lasse das Script erneut laufen. Yes, ich komme eine Zeile weiter.
Auch hier lösche ich die Leerschläge. Wieder komme ich eine Zeile weiter. Das Spiel wiederhole ich fürs ganze restliche Script. Ich lasse es erneut laufen. Endlich: Das Smartphone ist jetzt bereit für die Kommunikation mit dem Computer. Dort lasse ich das Script Client.py laufen und ich sehe, was ich sehen will: Die Plattform dreht sich, in QPython steht nach jedem Foto «Photo Taken» und auch am Computer wird der Fortschritt dargestellt.
Yes!!!
Ende gut, alles gut?
180 Bilder schiesst mein Smartphone. Das ist laut dem Designer QLRO für eine optimale Qualität des 3D-Modells nötig. Ich packe als erstes eine Brio-Brücke auf die Plattform – was man als Vater halt so rumliegen hat.
Danach verbinde ich mein Smartphone mit dem PC, damit ich die Bilder übertragen und mit Meshroom ein dreidimensionales Modell erstellen kann. Die Bilder sollten im QPython-Ordner zu finden sein.
Sollten.
Ich finde keine Bilder vor. WTF? Ich versuch’s erneut. Wieder keine Bilder. Ich ändere im Script den Speicherort und starte den Vorgang wieder. Immer noch keine Bilder. Dabei habe ich mich so sehr gefreut, dass es endlich läuft und ich noch Haare habe. Jetzt sind’s übrigens wieder ein paar weniger.
Nach etwas Recherche in den Kommentaren zum Ding von QLRO stelle ich fest: Ich habe QPython zwar Berechtigungen auf meinem Smartphone gegeben, aber nicht für die Kamera. Das hole ich nach und jetzt funktioniert’s tatsächlich. Endlich habe ich 180 Bilder von einer Brio-Brücke auf meinem Smartphone – das wollte ich schon immer.
Nun muss ich die Einzelbilder mit Meshroom «nur noch» zu einem dreidimensionalen Bild umwandeln. Schon wieder Software. Mir graut davor. Trotzdem versuche ich zumindest die Bilder zu importieren. Mist, ich kriege eine Fehlermeldung: «Not a PNG file.» Bei jedem verdammten der 180 Bilder. Jetzt habe ich definitiv genug und brauche etwas Abstand, bevor ich ein komplette Glatze kriege. Ich versuch’s in ein paar Tagen wieder. Ob und wie’s geklappt hat, erzähle ich dir in der Fortsetzung. Noch diese Woche. Versprochen.


Technologie und Gesellschaft faszinieren mich. Die beiden zu kombinieren und aus unterschiedlichen Blickwinkeln zu betrachten, ist meine Leidenschaft.