Mit einer alten XBox Kinect kann man auf einfache Art und Weise 3d-scans durchführen. Man braucht dazu nur eine XBox Kinect, einen Schrittmotor inkl. Treiber , einen Arduino und dann noch die entsprechende Software (z.B. Skanect) bzw. Windows-Treiber. Auf der österreichischen Verkaufsplattform http://www.willhaben.at habe ich mir für nur 10 Euro eine gebrauchte XBox Kinect der ersten Generation gekauft:
Zum Anschluss der Kinect an den PC/Laptop benötigt man noch ein spezielles Netzteil inkl. USB-Anschluss. Meines habe ich günstig auf aliexpress erworben:
Für den 3d-scan muss sich das Objekt langsam im Kreis drehen. Ich verwende hierfür einen Arduino + Schrittmotor. Als Treiber kommt der A4988 zum Einsatz. Mit dem Potentiometer stelle ich die Drehgeschwindigkeit ein.
Nicht vergessen, die Stromstärke am A4988-Treiber einstellen. Dazu einfach ein Voltmeter über einen kleinen Schraubendreher an Ground und das Potentiometer auf der Platine anschließen. Es gilt dann folgende Beziehung: U = 8 · 0.068 · I. Wird also der Schrittmotor zum Beispiel mit I = 0.3 A betrieben, so muss das Voltmeter eine Spannung U = 0.1632 V anzeigen, wenn man den Schraubendreher an das Potentiometer hält.
Zum Verbinden des Drehtellers mit dem Schrittmotor verwende ich folgende Kupplung:
Der kurze Arduino-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#include <AccelStepper.h> #include <Wire.h> // Modus: DRIVER = Steuerung über STEP+DIR AccelStepper stepper(AccelStepper::DRIVER, 2, 3); // STEP an Pin 2, DIR an Pin 3 // =============================================================== // ACHTUNG: Schrittmotor verträgt sich NICHT mit 16x2 LCD !!!!!!!! // =============================================================== int motor_speed; void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000); // Max. Geschwindigkeit pinMode(12, OUTPUT); // = MS1 pinMode(11, OUTPUT); // = MS2 pinMode(10, OUTPUT); // = MS3 // MS1 MS2 MS3 Resolution // LOW LOW LOW full step // HIGH LOW LOW 1/2 step // LOW HIGH LOW 1/4 step // HIGH HIGH LOW 1/8 step // HIGH HIGH HIGH 1/16 step } void loop() { motor_speed = analogRead(A0); motor_speed = map(motor_speed,0,1023,0,100); // D12 D11 D10 Resolution // LOW LOW LOW full step // HIGH LOW LOW 1/2 step // LOW HIGH LOW 1/4 step // HIGH HIGH LOW 1/8 step // HIGH HIGH HIGH 1/16 step digitalWrite(12,0); digitalWrite(11,1); digitalWrite(10,0); stepper.setSpeed(motor_speed); stepper.runSpeed(); //stepper.setSpeed(20); // Zielgeschwindigkeit: 160 Microsteps/s //stepper.runSpeed(); // Dauerlauf mit konstanter Geschwindigkeit } |
Damit der PC die XBox Kinect auch erkennt, muss man zuerst die Windows-Treiber herunterladen und installieren.
Windows-Treiber: https://www.microsoft.com/en-us/download/details.aspx?id=40278
Es gibt auch gleich ein Toolkit für die installierte XBox Kinect: https://www.microsoft.com/en-us/download/details.aspx?id=40276
Hier die beiden heruntergeladenen Dateien, welche man natürlich dann installieren muss:
Das Toolkit:
Getestet habe ich gleich den Kinect Fusion Explorer-WPF:
Das eigentliche Ziel dieses Projekts war allerdings das Erstellen von 3d-scans. Dazu habe ich mich für die Software Skanect entschieden.
Software Skanect: https://skanect.software.informer.com/download/
In der Software Skanect stellt man unter „Prepare“ zu Beginn den Typ des zu scannenden Objekts ein, in meinem Fall „Object“. Die Scangrenzen habe ich auf 0.6 x 0.6 x 0.6 m eingestellt. Der zu scannende Gegenstand muss sich dann in diesem Würfel befinden.
Danach geht man zu „Record“ und beginnt mit dem Scan:
Wichtig ist, dass das zu scannende Objekt grün erscheint. Dann passt die Entfernung und das Objekt wird gut erfasst:
Wenn der Scan nach zumindest einer vollen Umdrehung beendet ist, kann man unter „Process“ das gescannte Objekt noch kolorieren (Colorize):
Hier die Gegenüberstellung des Originalgegenstands und des Scans:
Das Youtube-Video reiche ich wie immer nach…