Trackmate :: Portable Plexi Cliffhanger

Trackmate :: Portable Plexi Cliffhanger
The Portable Plexi Cliffhanger is one of the most simple, cheap, and portable Trackmate systems. It can be setup in under 5 minutes, costs less than $40 (plus a webcam), and fits easily in an over-the-shoulder bag.

Trackmate is an open source initiative to create an inexpensive, do-it-yourself tangible tracking system. Using the project's Tracker software, any computer can recognize tagged objects and their corresponding position, rotation, and color information when placed on the imaging surface.

Using a system like the one shown here, you can track physical objects on a surface and use them to control and manipulate spatial applications on your computer. Since objects are each uniquely tagged, they can easily be mapped to particular actions, information, or relationships. See the LusidOSC project for more details about spatial applications.




 
Remove these adsRemove these ads by Signing Up
 

Step 1Gather all the parts

Gather all the parts
You will need:
- a 12 inch x 12 inch x 1/4 inch clear acrylic or plexi sheet (often sold as a table protector)
- two 2 inch C clamps
- two thin adhesive-backed rubber feet (in a pinch, just use a few pieces of tape)
- a clamp light (found in most hardware stores)
- a 13W (60W equivalent) compact fluorescent bulb
- a mini camera tripod (found in camera stores, or online)

And finally, you need a webcam. I recommend the PS3 Eye since it is a very nice camera for the price (~$33) and there are now drivers for Windows and Mac. But any decent quality webcam that allows manual functionality (i.e., exposure control and focus) should work with this setup.

You can find most of the parts at your local hardware store (and save the cost/time of ordering online). The parts are also available via Amazon.com; here is an amazon.com list to help you find everything you need.
« Previous StepDownload PDFView All StepsNext Step »
37 comments
Jul 28, 2010. 11:34 PMcylove says:
hi, can it be connected to parallel port?
Jul 29, 2009. 2:33 PMaplauche says:
okay does the glass have to be frosted to a certain degree? cause i have a very frosted glass desk and a sheet of not at all frosted glass from an aquarium would either of these surfaces work??
Jun 20, 2009. 12:58 PMthecapacity says:
Well I'm excited by this and made some good progress today.

First I installed the "macam" drivers (download and copied the library into "/Library/Quicktime" and then ran the accompanying application and 'viola the webcam was working great!

Then I printed Trackmate tags and started up trackmate and it found the right camera no problem!

After the calibration (great walkthrough by the way) I was able to cut up some of the tags from one of the other scaling templates and it was tracking!! One comment on the tag generation is that I generated a tag file (with just 4) and they're like 4" in diameter! Would be nice if the program could scale them for you. (Actually, since the "tags" were too big I cut up some of the tags from the 3x3 scaling sheet).

I'd looked around like crazy to figure out how to read the lucidOSC data and finally realized that on Trackmate it prints "OSC output on: localhost 3333" ... I don't know if there's a way to change this but that would be nice.

But at first I was still confused because I didn't realize it was UDP (yay netcat) and then I was still confused because I kept trying to connect to that addy & port and wasn't getting anything.

Eventually it dawned on me to _LISTEN_ and then I saw data packets flying! YAY!

Now for the 'bad' news, I was completely unable to find the "LusidOSC_BasicApp.pde" processing app that's mentioned a few times but from the readme that came with the LusidOSC processing bundle I quickly put this one together:

import lusidOSC.*;
LusidClient lusidClient;

void setup() {
lusidClient = new LusidClient(this);
}

// called when an object is moved
void updateLusidObject (LusidObject lObj) {
println("update object: "+lObj.getUniqueID());
println(" location = ("+lObj.getX()+","+lObj.getY()+","+lObj.getZ()+")");
println(" rotation = ("+lObj.getRotX()+","+lObj.getRotY()+","+lObj.getRotZ()+")");
println(" data = ("+lObj.getEncoding()+","+lObj.getData()+")");
}

void addLusidObject(LusidObject lObj) {
println("add object: "+lObj.getUniqueID());
println(" location = ("+lObj.getX()+","+lObj.getY()+","+lObj.getZ()+")");
println(" rotation = ("+lObj.getRotX()+","+lObj.getRotY()+","+lObj.getRotZ()+")");
println(" data = ("+lObj.getEncoding()+","+lObj.getData()+")");
}

// called when an object is removed from the scene
void removeLusidObject(LusidObject lObj) {
println("remove object: "+lObj.getUniqueID());
}

When I run it, I start to get data like:

LusidOSC :: Version 1.0 :: Feb. 2, 2009
LusidOSC :: listening for messages on port 3333
add object: 0x1FBF763F7BFA
location = (28,28,0)
rotation = (0.0,0.0,0.017453292)
data = (trackmate,0xFFFFFF,0xFFFFFF,0xFFFFEF,0xFFFFE8,0xF7F4EE,0x6D5F47)
add object: 0x018101810101
location = (-31,30,0)
rotation = (0.0,0.0,4.6774826)
data = (trackmate,0xFFFFFF,0xFFFFE7,0xFFFFD7,0xFFFFFC,0xFFFFFF,0x242216)

But then no matter how much I move the tags around or add / remove objects from the field I don't get any further output.

The protocol also seems to be very chatty... even with nothing on the plexi I got lots of packets like this:

live#bundle(/lusid/1.0,siiifseq>K/lusid/1.0,salive#bundle(/lusid/1.0,siiifseq?K??/lusid/1.0,salive#bundle(/lusid/1.0,siiifseq@K?8/lusid/1.0,salive#bundle(/lusid/1.0,siiifseqAK??/lusid/1.0,salive#bundle(/lusid/1.0,siiifseqBKb?/lusid/1.0,salive#bundle(/lusid/1.0,siiifseqCK y?/lusid/1.0,salive#bundle(/lusid/1.0,siiifseqDK

Easily more then 1 a second.

Regardless I'm super excited to have gotten this far so quickly, so (a) thanks and (b) any help would be much appreciated!
Jun 21, 2009. 8:13 AMthecapacity says:
I tried the link from your wiki and you're right it has the full set of apps there. I think I downloaded the processing bundle from a link of: http://lusidosc.sourceforge.net/

But I tried that one again and it looks full too, so oh well *shrug*.

It might be helpful to add a link to the processing bundle to this page:

http://sourceforge.net/project/showfiles.php?group_id=249649

I'm not sure why Processing wasn't seeing the tags either. I noticed that when I rotated a tag that Trackmate would still see it but not change the orientation. I think if I'd wanted more frames it would have so it might have just been that my tags weren't getting tracked as well as it could.

Is there a start on the python lib yet? My plans involve needing some sort of parser so I don't mind writing one but thought if there was a base I could try to build from that.
Jun 21, 2009. 8:14 AMthecapacity says:
Yea, I think the PDF format might be good. I was using Seashore on the mac to rescale the tags but my printer ran out of ink @ an inopportune time so that's why I cut up some from the 3x3 baseline instead. Thanks not only for the SW but for being so responsive, beyond software that works and an open protocol that's the most exciting thing for me! :D
Jun 23, 2009. 5:19 AMthecapacity says:
Nice, that was quick! I showed this off to a friend of mine and he was impressed at how quickly it setup (though I'm still learning how to align the camera) and that the demos actually worked / integrated so smoothly!!! His next question was "how do we make a table for this" and I had to explain that it looks like it's somewhat limited in size right now, based on the field of vision / clarity of one webcam. So you may want to think about stitching multiple cameras together cause a full tabletop implementation sounds awesome!
Jun 10, 2009. 11:53 PMModemasters says:
Same issue here, got brand new PS3 Eye today and installed AlexP's latest drivers (v2.1.0.0130) and no camera detected in TrackMate. Anyone tried an earlier driver???
May 28, 2009. 12:04 PMemrqs says:
got the ps3 eye and all the rest of the stuff today, but i can't choose the ps3 eye in trackmate tracker, even though i installed the drivers. Can anyone give me some tips on how to make it work?
Mar 23, 2009. 2:37 PMcobyone27 says:
This looks pretty cool. Is it possible to integrate something like this with Audacity or something similar and use it as a sound system? Also, would it be possible to attach certain items to keyboard keys or mouse movements? It obviously would not be as accurate as a mouse, but it would make for some sweet controls in first person shooters or real time strategy games.
Mar 20, 2009. 8:00 AMvandermore says:
I meandered my way here from the Make blog article on Trackmate, and I have a question. Most of the example setups I have seen are smaller (one sheet of 8.5 x 11 paper) in size, does Trackmate support larger sized table areas? I have a 4' x 6' frosted glass table that I would love to experiment with Trackmate on. I assume that the limiting factors are the camera's view, and the registration target. From what I read, I can probably make a target of my own that would be the proper size. Do I have it right, or am I missing something? Do you have any suggestions for larger work surfaces? I have not tried it yet, but when I do I will post about it. Thanks!
Feb 28, 2009. 6:47 PMcharliegwathney says:
I made one of these and the trackmate works great. but how do I run the lucid apps?
Mar 2, 2009. 9:31 PMcharliegwathney says:
yeah i was able to make it using an eye toy as opposed to a playstation eye. i bought it at a local game store for a little less than 6 dollars and it works fine. the only downside is that you have to make it function as a webcam which creates an extra step.
Feb 24, 2009. 9:46 PMMadBricoleur says:
Okay, sorry for the double post, but so this could essentially turn a regular monitor into a touchscreen with the help of tagged objects (you could tag a pen tip or similar and not literally "draw" things on the plexiglass/other material?), using paint, illustrator, etc?
Feb 24, 2009. 9:44 PMMadBricoleur says:
does the material have to be plexiglass?
Feb 24, 2009. 5:58 PMLithium Rain says:
Haha, wow, I'm making something very much like this (although different in several ways). Good job!
Feb 8, 2009. 7:35 AMItsTheHobbs says:
Wait, so what does this do exactly?
Feb 8, 2009. 1:00 PMetlerd says:
I think the explanation provided is okay, but we could use a demonstration, eh?
Feb 8, 2009. 3:50 PMItsTheHobbs says:
But I still don't understand what trackmate is used for. Whet is a tracking system?
Feb 9, 2009. 12:19 PMItsTheHobbs says:
Oooooooook now it makes sense. Wow that's really neat!
Feb 10, 2009. 3:23 PMetlerd says:
Something relatively easy to set up, but which does something useful?
Feb 13, 2009. 10:38 PMLinuxH4x0r says:
I've tried this software in the past and it was a PITA. maybe i'll try it again
Feb 8, 2009. 11:06 PMrustlabs says:
this looks great. id like to see it moving around some windows and maby clicking on things. i think i might try something like this.

Pro

Get More Out of Instructables

Already have an Account?

close

All Steps Viewing
View all steps of an Instructable on the same page when you're a Pro Member.

Upgrade to Pro today!
33
Followers
8
Author:adamkumpf(dsLabs)
Background in Electrical Engineering, Computer Science, Robotics, and Tangible Interfaces from MIT. Currently working at Teague as a Physical Prototyper and regularly contributing to dsLabs. Other p...
more »