Little 3D Car Scanner
Using an RC car to 3D scan the underside of cars.
This experimental method of capture provides a novel and ironic twist on a basic premise; using an RC car, a laser line, and custom software, I made a machine to create 3D scans of the undersides of regular-sized cars.
You can view the original project documentation on the class website. This was part of a class-wide experimental capture capstone project, and was part of a class exhibition. This project is also featured in his current lectures.
This little RC car is equipped with a line laser diode and a GoPro Hero 3. The Arduino was merely used as a quick, last minute method to power the diode. The laser can be used to map the 3D formations that are the undercarriage of a car, such as this. The 6" height of the car allowed it to fit under most vehicle types, including sedans.
When driven underneath vehicles at a constant rate of speed (capturing footage at 60fps), I am able to scan the 3D formations of the underside of a vehicle by observing the distortions of the straight line of the laser. The wide angle lens at such a close proximity to the "surface" only allows for about 1ft of horizontal resolution per frame.
After some experimentation, I realized scanning at night provided a much better video of the laser compared to filming during the day. The laser was much brighter with less noise surrounding it, which helped reduce errors during the next steps.
After experimenting with Photoshop and After Effects color-matching filters, I decided to write my own Processing script to extract the laser’s shape from the footage. By extracting the line's shape I can use it for 3D point data.
My script essentially tries to find the brightest and reddest color per column of pixels in the video. I also use averaging and other threshold values to “clean” unwanted irregularities and nosie from the data.
3. Point Cloud
Imagine each frame of the footage is a card. Now try stacking all of the cards on top of each other. When you use the extracted line data of each frame, you can get a general 3D point cloud model from this method using points for every pixel.
This data was then exported as a
.plyfile and uploaded to Sketchfab.
4. Polygon Mesh
By connecting the point cloud data with polygons, one can create a seamless 3D mesh of the surface. By using thresholds, noise reduction and other methods to reduce irregularities, you can prevent large spikes in the 3D mesh that is caused by rogue or missing pixel data.
Missing pixels would otherwise create holes in the mesh, and rogue points are values that are too different from the previous and next frames.
As a final step in this process, I was recommended to try 3D printing one of the scans, which I think turned out amazing in the end! There were a few steps to this process. The first was to fill in the gaps created from missing point data in the point cloud. I approached this in two different ways-first I used an average of the edges to cut off outliers. Then I extended the points closest to the edge horizontally until they reached the edge. And lastly, any missing points inside the mesh would be filled in using linear interpolation between the two nearest points on either side. This helped create a watertight top-side mesh. Then with the help of student gloeilamp, the watertight 3D model was created in Rhino 3D and readied for printing using the MakerBot.
The process and results of the 3D printed scans.
The Frank-Ratchye STUDIO for Creative Inquiry semester-end public exhibition to showcase the creations of all students part of the Experimental Capture program.
I had a few hiccups along the development of this app. The first was, embarrassingly enough, mixing the width and length values in the 3D viewer, resulting in this.The other issue was that some newer vehicles had particularly clean and reflective undercarriages, such as this Kia Soul. Data extractions from such reflective footage resulted in less than ideal 3D models.