Stap 3: Software
Dit is waar het grootste deel van het werk is gebeurd. Om dit hele proces om te werken, ging ik nodig:
- Software te grijpen van de gegevens uit de Kinect
- Software een netwerk-bericht verzenden naar de Pi te vertellen om te roteren
- Software op de Pi te maken van de GPIO pinnen veroorzaken een stap omhoog/omlaag, die op zijn beurt zou vertellen de stepper motorcontroller te versterken
Gelukkig, de Software Developer Kit voor de Kinect was vrij eenvoudig. (Ik ben een C# ontwikkelaar door handel). Ik was een beetje bezorgd over het netwerk gedeelte van dingen, maar de Lidgren netwerkbibliotheek (ook beschikbaar in C#) bleek erg handig. Op de Pi, mij installateur Mono, en creëerde een kleine klant-app waarmee ook de netwerkbibliotheek Lidgren op zoek naar een binnenkomende aanvraag. Ik kon een file gebaseerd GPIO system (nog in C#) gebruiken om te vertellen van de stepper motor controller om zijn ding te doen.
Ik had eens alle 3D gescande gegevens uit een volledige rotatie van het object die wordt gescand. Voor elke momentopname van gescande gegevens veranderde ik het in de dezelfde coördinatenruimte. Vanaf daar uiteindelijk heb ik met behulp van een voxel gebaseerde benadering om de gegevens te combineren: Ik zou drie aangrenzende diepte punten behandelen als een driehoek, en deze driehoek snijden in de gegevensstructuur van een zoekboom. Uiteindelijk was wat ik eindigde met een zoekboom waaruit blijkt welke regio's in 3D ruimte waren "solid" en welke "leeg". Vanaf daar, ik liep de marching cubes-algoritme, en gebruikte het voor het genereren van een waterdichte mesh.
Een van de lastige onderdelen kreeg de scanner correct gekalibreerd. Ik had eigenlijk om dit te doen door het eyeballing dingen: Ik zou een klein voorwerp op de scanner, te scannen, draaien, en zie hoe het vergeleken. Als het leek af, zou ik moeten aanpassen van mijn "gemeten" afstand van de Kinect naar het midden van de scanning platform, en herhaal het proces.