123D Scanner - Home Made 3D Scanner
Intro: 123D Scanner - Home Made 3D Scanner
Hey - have a look at my new project HERE
In this project I built a 3D Scanner, that enables generating 3D models of physical objects.
The files can later be viewed in 3D software (GLC Player, Sketchup, Rhino, or sites such as http://3dfile.io)
and even manipulated into .STL file and 3D printed.
The software for this project is completely free, I am using Autodesk's 123D catch, Link:123D catch
The 123D Catch is a great software, it requires taking many photos of an object all around it, and uploading it into the software, and it returns a 3D file.
Since I really liked the solution but did not wanted to take the photos myself - I built an instrument that does that -
description hence.
Please note that this document does not intend to explain how to use 123D catch (this can be found here)
A really nice scan can be seen interactively here:
.
In this project I built a 3D Scanner, that enables generating 3D models of physical objects.
The files can later be viewed in 3D software (GLC Player, Sketchup, Rhino, or sites such as http://3dfile.io)
and even manipulated into .STL file and 3D printed.
The software for this project is completely free, I am using Autodesk's 123D catch, Link:123D catch
The 123D Catch is a great software, it requires taking many photos of an object all around it, and uploading it into the software, and it returns a 3D file.
Since I really liked the solution but did not wanted to take the photos myself - I built an instrument that does that -
description hence.
Please note that this document does not intend to explain how to use 123D catch (this can be found here)
A really nice scan can be seen interactively here:
.
STEP 1: Operation Principle (can Be Skipped)
(This part can be skipped, it explains the logics behind the structure, The scanner will wok without this part...)
The design of the scanner is quite simple, and consists of 3 main parts:
(**) The color stripes on the base are also in purpose to help the stitching algorithm - the help (colors, number of lines, orientation) to stitch.
The design of the scanner is quite simple, and consists of 3 main parts:
- Scanner chassis and stage
- Scanner arm (carries the camera)
- Scanning surface
- The chassis - this is the part that sits on the table and carries the scanning Surface and the scanned object on it
- Scanner arm - The arm has the camera in the end of it, and a servo motor that presses on the button and take all of the pictures, the arm rotates around the scanning surface and takes pictures every few degrees. Pay attention that there's a weight to balance the own weight of the camera (*)
- Scanning surface - a round board, with colored stripes on it, carries the scanned object. (**)
(**) The color stripes on the base are also in purpose to help the stitching algorithm - the help (colors, number of lines, orientation) to stitch.
STEP 2: The Chassis
The chassis is built from MicroRax (Link) profiles and parts, which is very easy to use and enables the arm to rotate almost 360 degreed around the object, it also host the rotation Servo (Full rotation servo - SpringRC SM4303)
It's base is approx rectangular 30x30 [cm]
It's base is approx rectangular 30x30 [cm]
STEP 3: The Scanning Surface
Made of cardboard, round, placed on the top of the chassis and carries the scanned object, colored stripes are painted on the cardboard (see step 1) approximate
STEP 4: The Rotating Arm
The role of the arms is to carry the camera and rotate it around the scanned object, it has 3 main components:
- Camera (Nikon Coolpix L10), any camera will do as long as its optical features can take photos in approx 10[cm] otherwise the pictures will become blurred and the 3D model will not be able to built.
- Small servo - that pushes the camera button, (any DX.com servo will work) I thought of hacking into the camera, but since it is my wife's - i didn't to it...
- Balancer - Metal block that balances the own weight of the camera and the servo and maintain the center of gravity on the axis of the rotation servo
STEP 5: Scanner Assembly
Hardware assembly:
This is quite straight forward, assemble the parts as seen in the pictures, ensure that the wires are long enuogh and will not get stuck during operation.
This is quite straight forward, assemble the parts as seen in the pictures, ensure that the wires are long enuogh and will not get stuck during operation.
STEP 6: Arduino Controller
This Step will describe the Arduino setup:
#include <Servo.h>
Servo servo1;
int analogPin = 3;
int pos = 0;
void setup()
{
pinMode(analogPin, OUTPUT); // sets the pin as output
servo1.attach(9);
}
void loop()
{
for ( int i=1; i<30; i++){ // Rotation clockwise in small steps
analogWrite(analogPin, 125); //rotate
delay(300); // rotation duration
analogWrite(analogPin, 0); // stop rotation
// Camera servo
delay(1500); //vibration stop
for(pos = 0; pos < 100; pos += 1)
{
servo1.write(pos);
delay(5);
}
delay(3000); //camera shooting time
servo1.write(0);
delay(500); // delay for camera
}
delay(2000);
analogWrite(analogPin, 200); // rotation back to start
delay(1200);
analogWrite(analogPin, 0); // Moving Counter Clockwise
delay(3000);
}
- Wiring - As can be seen in the figure - the two servos are connected to the Arduino, They are NOT similar, The full rotation servo (connected to Digital pin 3) is controlled thru PWM protocol, while the button servo is controlled with Servo object.
- Arduino sketch - attached, please pay attention to the delays and their remarks.
#include <Servo.h>
Servo servo1;
int analogPin = 3;
int pos = 0;
void setup()
{
pinMode(analogPin, OUTPUT); // sets the pin as output
servo1.attach(9);
}
void loop()
{
for ( int i=1; i<30; i++){ // Rotation clockwise in small steps
analogWrite(analogPin, 125); //rotate
delay(300); // rotation duration
analogWrite(analogPin, 0); // stop rotation
// Camera servo
delay(1500); //vibration stop
for(pos = 0; pos < 100; pos += 1)
{
servo1.write(pos);
delay(5);
}
delay(3000); //camera shooting time
servo1.write(0);
delay(500); // delay for camera
}
delay(2000);
analogWrite(analogPin, 200); // rotation back to start
delay(1200);
analogWrite(analogPin, 0); // Moving Counter Clockwise
delay(3000);
}
STEP 7: Operation Sequance
OK,
Now you have everything in place - make sure you have Autodesk 123D catch installed and a login ready.
Now you have everything in place - make sure you have Autodesk 123D catch installed and a login ready.
- Put an object to scan on the surface.
- Turn on the electricity to the controller. (USB/Direct 5V supply)
- Wait until the camera finishes a complete circle.
- Turn off electricity.
- Extract the acquired photos from the camera (USB/ SD card).
- Upload the images into the 123D catch
- Get the 3D model
STEP 8: Wall Painting Robot - Check My New Creation @ Http://www.keerbot.com
Wall painting robot - check my new creation @ http://www.keerbot.com
47 Comments
sbrunet 5 years ago
bontempos 7 years ago
I believe people saying that rotating the platform produces better results than rotating the camera are not really aware of ambient light or reflection issues. Specially for Autodesk 123D catch algorithms/purposes where finding feature correspondences between images are the key of the process. You should rotate all the lights and things that reflects on the object with the turntable if you want to leave camera static.
GM10 9 years ago
I agree with you, I think he is to busy thinking about other things. the camera should be still and the platform should turn simple maths
R A Shah 9 years ago
I believe it is a good idea to rotate the platform rather than moving the camera. It is more accurate and there are less chances of camera shakes spoiling the final scan.
marios8543 9 years ago
No offense but why don't you just make the stage rotate :/ I mean it's a lot easier this way.
wavegm 9 years ago
Hi,
No offense of course - read below for your answer,
BTW - have a look at KeerBot com for additional projects.
stuffdone 10 years ago
Most video editing software can output a series of stills from a video. Why not just make a turntable, mount video camera and turn it 360 degrees to capture video then extract the stills from that? No complicated electronics, just a simple turn table and video cam. For quality I have a Fuji SLR that can connect to my PC so I have optical zoom, macro etc.
I have not tried this because I just now read this article and this is what came to mind. If someone tries this before I get the chance, please post results here.
Us lazy people make the best inventors...we always look for an easier way !
stuffdone 10 years ago
Another thought. It would not be hard to use a lazy susan bearing to make a table that could support a person. With the simpler video method you could do whole body scans perhaps!
stuffdone 10 years ago
Ok...more thoughts. Video at 1 FPS ( time laps setting ), turn table once in 20 seconds. Export frames for 20 frames per 360 degree revolution. Experiment with different frame rates and RPM of table or course.
alluvian 10 years ago
Love the idea, and it seems to produce pretty good results. I am torn about using catch or a laser scan solution. I probably want both, as I plan to tinker in games and 3d printing. Catch will give better game models since they are wonderfully textured, but I think laser solutions give better mesh/point clouds.
For lasers I would suggest looking into the moedls app for iphone, this thing looks amazing. www.moedls.com too bad the kickstarter failed. The system uses a green line laser and takes a video of the subject turning on a turntable.
I also love your idea to automate catch. In my head the rig I see is two rings of diffused led lights affixed to a turntable, and then rotate the object and the turntable with the lights in a dark room or cover the thing in a box maybe during the day? This is effectively MORE complex than your solution, but it sounds like a fun build to me. Reality states I will never get around to doing this though, heh. Just having the lights on the turntable in the darkness would speed up the picture taking process immensely though.
Has anyone tried 123d catch with NO shadows on an object? Does it need shadows to function correctly?
Nyxius 10 years ago
Armagedoom 10 years ago
DanW13 10 years ago
soilwork 11 years ago
wavegm 11 years ago
But you still need to make the corrections.
CrazeUK 11 years ago
Although i am thinking why not use a webcam? They are quite high quality, and because of the small field of view, it wouldn't need a high MP count?
Additionally, you can totally disassemble it, and only have the actual lens and sensor mounted greatly reducing the weight?
wavegm 11 years ago
The thing is that the webcam wasn't so good - they dont have OPTICAL ZOOM that according to what i found out is the most important part.
the MegaPixel number doesn't matter much (i bought 5 MP webcam by HP that gave bad results and I used 2.3 MP fuji that gave good results) Now I use Lumix FX90 which is better for many reasons.
Share what you manage to do!
rlaganson1 11 years ago
wavegm 11 years ago
Have a look at http://www.keerbot.com
wavegm 11 years ago
I think that small number of straight lines, colored,
will do the job
(what you do here is "helping" the stitching algorithm)
Do you build it ? I awnt to see !