Introduction: 3D Motion Capture
Ever wanted to sketch something in 3D? Well, now you can break free of the confines of 2D paper for the price of two webcams.
I made this project as a present for some former professors of mine. The original intention was to track a dancer's movements. Since I'm not so great at dancing, I used it to sketch.
Feel free to modify/hack/otherwise dismember the code I've posted.
What you'll need:
~ A computer running some flavor of Windows (all the software has been tested on VIsta and XP)
~ 2 webcams (I found mine on eBay for about $23)
~ A green LED (must be of the diffuse variety, or covered in translucent nail polish)
~ The capture applet I coded in Processing.
~ WinVDIG 1.0.1 (NOT the latest version) This will hook up Processing to your webcams.
~ Some way of keeping your cameras at 90 degrees to each other. You could use two friends, half a box with holes cut in it, or the adjustable rig I'll provide instruction for in the next step.
~ If you want to generate a sculpture from your path, you'll also need Rhino 4 SR3 (which is free to try), a 3D modeling program, and its script editor Monkey along with the sculpture generator script I wrote.
~ If you then want to print the sculpture, you'll need access to a 3D printer. If you don't happen to have one just lying around, I'd suggesting trying to get into the Shapeways beta.
You can find a .zip of the applet (with source code) and the RhinoScript files attached to this step.
Step 1: Making the Rig
You can use any method to keep your cameras at 90 degrees. I designed this rig to be portable and easily adjustable to different sizes. However, if you're looking to create something for sketching next to your computer, I'd suggest making three faces of a cube out of cardboard and cutting holes in two of then for the cameras.
~ 2 drawer runners. These must be of the kind that don't come apart when not actually wedged inside a drawer. I got a pair of 18" ones at Home Depot for $14.
~ 1 large hinge. The holes in this hinge need to line up with at least two of the holes in the drawer runners.
~ 4 bolts, 4 nuts, and 8 washers. To connect the hinge and drawer runners. The bolts should be fairly short (<3/4") and the washers should be as wide as you can find them.
~ A wrench. To tighten the bolts.
~ A C-clamp. To (eventually) attach the rig to a table or other horizontal surface.
Open one of the drawer runners. Line up one side of the hinge with the holes in the wide end of the drawer runner. Bolt the two together, making sure to place a washer on either side. Repeat with the other drawer runner and other side of the hinge.
Congrats, you're all done with this step.
Step 2: Setup
Before you can begin sketching you'll need to install some software and setup the rig. Here's how:
To begin, install WinVDIG. Its a video digitizer component for Quicktime that will let the Processing video library access the webcams. The version is 1.0.1. The newest version of WinVDIG is 1.0.5, but it doesnt work with the newer versions of Quicktime. Go figure.
Then plug in the cameras and let Windows find the drivers.
While Windows is searching, and assuming you're using the rig detailed in the last step, open the camera rig and clamp it to the corner of a table. Be sure not to tighten the clamp too much or the drawer runners wont open easily.
Slide out the ends of the drawer runners a few inches so that you can attach the cameras to them. Open the clips on the bottoms of the cameras and press them over the top edges of the drawer runners.
Point the cameras directly ahead. Extend the drawer runners so that the cameras can point at the place the dancer will be standing.
Now you're ready to start the applet.
Step 3: Using the Applet
Now you're ready to start making sketches.
Unzip the Capture Applet to a local drive, then open the exe inside the windows.application folder. After a few seconds a window should open that looks something like the image below. Now, either turn on your LED (if you decided to go with a pre-made flashlight) or slide a battery in between the two leads. If you're going with option two, make sure the voltage of the battery falls within the LED's acceptable range.
Position you light so that it can be seen by both cameras. A small green circle will show you the position that the camera sees as the greenest spot on each video feed. I've defined the greenness of a pixel based on its RGB value like this:
Greenness = G/4 + (G-R) + (G-B)
Which favors bright green pixels, making a semi-dark room without many green things in it an ideal environment.
The positions of the 0.5% greenest are averaged to find position of the light in each video feed. Both coordinates from the XY camera feed and one from the Z camera feed are used to construct a 3D point.
When you're ready, press the Start Capture button. A green line will appear in the Path Display box. That is the XY plane projection of your path. It should give you an idea of how much of your frame you're using, but (if you're drawing instead of attaching the LED to a dancer) you shouldn't use it as a drawing guide. Instead, think about the shape you're drawing in space. You'll get a much better result.
Press Stop Capture when you're done. If you're happy with the path you've draw, press Export. You'll notice that the export button has a number after it. That number will increase each time you make a new path and choose to export it. The number you see at the time of exporting will be the name of the exported text file. To keep all names unique, the date and time at which they are exported is also included in the name. The text files will write to the same folder as the exe and will be named like this:
You can record and export as many paths as you want. When you're finished, make sure to quit by clicking on the small X in the corner of the applet. That will clear the cameras from Quicktime.
Now you're ready to make the sculpture geometry.
Step 4: Generating the Sculpture
You can now generate a 3D model (and 3D printer file) using Rhino and the script I've written. I've tried to write these instructions for someone with no experience using Rhino/3D modeling software, so even if you've never modeled anything before you should be able to follow them. If you have any trouble feel free to message me and I'll try to get back to you ASAP.
Look in the menus on the top for Monkey (Rhino's script editor).
If you can't find it, that means you'll have to run the Monkey installer. Close Rhino, run the installer, and re-open Rhino. You should see Monkey in the menu bar.
Before running the script, you'll need to set up the units for the file. Type Units into the command line. Choose your unit of preference from the drop down menu.
Now, type Monkey into the command line. You should see the text Monkey is initializing... and then a window should appear. This is the script editor.
Find the script file (sculpturegeneratorv3.rvb) and drag it into the tab strip near the top of the script editor window.
Click the Run Script button.
A window will pop up asking for the point text file that was exported from the applet. You'll find it in the same folder as the exe of the applet.
You'll be prompted in the command line to enter the maximum dimension. The dimension will be in the units system of the file, which you set earlier.
The sculpture will begin to draw. To speed things, minimize the Rhino window. If Rhino doesn't need to redraw each time its geometry is updated, it runs much faster.
When the script is done running, the Monkey window will pop up. You can them restore the main Rhino window.
If you look in the point text file's/applet's directory you'll now see an .stl file with the same name as the text file. This file should be ready for printing by most 3D printers.
And that's it! You can import more paths, or save your Rhino file and use it for renderings or modify by hand.
You can send out the stl files you've just made to be 3D printed. They should be acceptable for almost any kind of 3D printer.
Step 5: Gallery
Here are some renderings of the sculptures I created. The last two images are of the printed sculpture.
I hope you have fun with this project! If you decide to make your own, I'd love to see pics/renderings of what you come up with.
Thanks for visiting my instructable!