3D Scan and Print
Self-Scanner
Building up a scanner with Kinect and Arduino
My project was to develop a 3d scanner with kinect and arduino. Since kinect is capable of taking a precise dept information it can be used as a scanner. When we make a turning platform we may create a point cloud to reconstruct the object in 3d. However, altough I have managed to assemble arduino-kinetc-processing platforms, due to a bug on my serial connection I could not go further. I wanted to make sure I finish my scanning before the 3d printing deadline
In order to use Kinect in Mac OS X, several driver and software should be installed. Open NI provides quite flexible environment for this issue.
There is a nice step by step tutorial in creativec0d1ng to install and use kinect sensor in Mac Os X 10.8 for whom to be interested
Depth image created in Open NI.
Although Open NI is quite enough for capturing the data, I have find more suitible environment for my project. Open Kinect library for Processing by Daniel Shiffman I have modified his point cloud script for my project adding a freeze ajd record phase.
I have checked my code creating boxes instead of points and sending data to Rhinoceros
After evaluating my approach I add another piece of code to stream point information into a point cloud file. Afte writing the point cloud file I have imported it into MeshLab. This program was much more effective for creating surfaces then I have expected. It almost perfectly created surfaces even though the point cloud was ill-defined.
I cleaned the point cloud from unneceseary information. Then followed few steps I have learned from online sources. If you have an absract set of point coordinates without any normal vectors or surfaces, you need to generate normals first. In meshlab, this part is quite easy. All I had to do was define how many neighbour points will be used to generate the normal. Usually 10-15 would be enough, depending on the form you create. Afte creating normals there are several algorithms that can generate surfaces. In my first trialI had used Ball Pivoting algorithm, wich pivots a hypotatical ball around vertecies creating triangles when possible. This algorithm only uses existing points therefore more precise.
In my secod trial, I used Poisson algorithm which usually adds more verticies to evaluate a surface definition. It might be bothering if you have all the points you need, but in my case it created beautiful solution, generating a shell for undefined part of my body. I decided to use this sci-fci object for 3d printing. I have sent it to rhino for a final check, and created STL data out of it.
I sent my data to Z-corp, to be able to make a bigger object and have more smooth surfaces. However, since it is more fragile, some small parts damaged after excavation.
I will continue to develop turning part of my scanner, and add more information about it after I finish.
Sample Files
Point Cloud and Processing code
Rhino File
Back