Instructables

Trackmate :: Portable Plexi Cliffhanger

Featured
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 1: Gather all the parts

Picture of 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.
cylove4 years ago
hi, can it be connected to parallel port?
aplauche5 years ago
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??
adamkumpf (author)  aplauche5 years ago
If the thickness of the frost is thin, such as a lightly sanded surface, it should work just fine. The important thing is to make sure the surface is only frosted on one side and that the frosted side is up (making the distance between the tags and the frosted layer should be as close to zero as possible).
thecapacity5 years ago
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!
adamkumpf (author)  thecapacity5 years ago
Thanks for the detailed reply! I'm glad to hear you got things up and working.

I just downloaded the LusidOSC Processing Bundle, and when you decompress the .tar.gz file, it should contain folders for 9 different LusidOSC example applications (one of which is the LusidOSC_BasicApp; that's strange that you didn't have it). The full bundle can be downloaded from here:
http://lusidosc.svn.sourceforge.net/viewvc/lusidosc/src/LusidOSCSpatialApps/LusidOSCProcessingBundle.tar.gz?view=tar

LusidOSC is a protocol layer on top of OSC (open sound control), which is a thin layer on top of UDP. The LusidOSC protocol specifies that each frame data is sent over OSC that describes the time, frame number, and each object present (with ID, position, rotation, meta data, etc.). Even though it may look chatty when printing the output, the total number of bytes is very small, especially for the capabilities of UDP.

I'm not sure what is causing Processing to not correctly see your tags. It's calling the "addLusidObject()" method, which is a very good sign, but I'm not entirely sure why things are not being updated after that. Make sure there is not a conflict on the port you are using (for example, don't have the LusidOSC simulator open at the same time as the Trackmate Tracker, or they will both be trying to push data to the same location).

You can change the LusidOSC HOST and PORT configuration (just added to version 09.06) manually in the setting.txt file. On Mac, this file can be located if you Ctrl+Click on the application and select "Show Package Contents". Then goto the subdirectory "Contents", then "Resources" and there you should find setting.txt (if you don't see it, try saving your setting once in the Tracker application by pressing {!}, the exclamation point).

As you can probably guess, the setting.txt file is a simple plaintext file that contains saved configuration variables (such as thresholds, size information, etc.). Toward the end, you should see two lines that say "localhost" and "3333" you can change those if you want to send the data somewhere else (to another machine across the network by IP address) or on a different port. Just save the file and restart the Tracker to have your settings take effect.

Hope that helps. Happy hacking!
adamkumpf (author)  adamkumpf5 years ago
also, make sure you print tags out such that they are all 1x1inch in size. When the tags are created, you can select the DPI (dots per inch) and you'll want to make sure you print them at the same resolution. Most image printing applications scale the image to fit the page (which can give HUGE tags), so play with your settings a bit.

I'll look into getting the Tagger to allow for saving directly as a PDF, since that file format carries with it scale information and would help to ensure proper sizing.

Some additional details about Trackmate tags can be found on the wiki:
http://trackmate.wiki.sourceforge.net/Trackmate+Tagger

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
adamkumpf (author)  thecapacity5 years ago
I've updated the Trackmate Tagger to now support direct output as a PDF. This should help with tag sizing without needing to tweak printer settings. :)

You can find the latest version on the Trackmate homepage, or jump to it directly here:
http://sourceforge.net/project/showfiles.php?group_id=249646&package_id=309081

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!
adamkumpf (author)  thecapacity5 years ago
I agree that a larger tracked spaced would be really nice. Stitching cameras is a great idea, although I think it would add a lot of overhead for building a Trackmate system. The main focus is currently for smaller tabletops that work alongside a user's computer, but there's no reason it couldn't be scaled up with some additional software and hardware! If you give it a try, let us know how it goes.
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.
Modemasters5 years ago
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???
emrqs5 years ago
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?
adamkumpf (author)  emrqs5 years ago
two things: 1. make sure you have the latest drivers. - on mac: Macam drivers - on win: the PS3 drivers by alexp 2. In Trackmate Tracker, press the "s" key to select and setup the camera. Hope that helps. Adam
cobyone275 years ago
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.
vandermore5 years ago
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!
charlieCG5 years ago
I made one of these and the trackmate works great. but how do I run the lucid apps?
adamkumpf (author)  charlieCG5 years ago
Great to hear that you got your Trackmate up and running!

The best way to get started with applications right now is to download the LusidOSC Processing Bundle from LusidOSC's site on sourceforge.

If you don't already have Processing (an easy-to-use Java environment), you can download it from the Processing site.

Each application is a project with a .pde extension. Just open it in Processing and hit the Run button. Alternatively, you can also export applications from within Processing so that other people can run them without needing to have Processing installed on Windows, Mac, and Linux.

Also, you can post your questions to the LusidOSC forums if you need more help.
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.
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?
adamkumpf (author)  MadBricoleur5 years ago
great idea! There are, however, some significant differences between touchscreens and tangible interface (like the one shown here). Touchscreens are fundamentally 2D interfaces where users manipulate information on a screen/surface. Conceptually, the user is poking at the important things with a pen or their fingers (often with high precision). Tangible interfaces use objects to embody information directly. Even though the objects themselves may not actually contain data, conceptually they act as physical icons, containers, and controllers (often with lower precision, but focusing more on relationships and manipulating many things at once). For example, a DJ could put samples into a large number of objects, and then mix and manipulate them in real-time without needing menus or mouse clicks. Using a pen-like object with Trackmate (as you described) could be really interesting. Would the graphics need to be projected onto the surface? Or could the user draw by moving/feeling the pen and looking at the screen? Highly-skilled painters may need more control, but I'm sure there is a middle-ground where combing the two would open up the door to some new applications and uses. Thanks!
does the material have to be plexiglass?
adamkumpf (author)  MadBricoleur5 years ago
You can try anything. Plexiglass (or acrylic) is nice because it is tough, easy to find, easily frosted by sanding, and less dangerous than glass if you somehow break it.
Haha, wow, I'm making something very much like this (although different in several ways). Good job!
adamkumpf (author)  Lithium Rain5 years ago
Sounds great! There are a lot of different ways you can build a system like this. Hopefully you can share your idea with the community, too. Thanks!
ItsTheHobbs5 years ago
Wait, so what does this do exactly?
I think the explanation provided is okay, but we could use a demonstration, eh?
adamkumpf (author)  etlerd5 years ago
I've included a video now to show one example of how Trackmate can be used. enjoy!
adamkumpf (author)  etlerd5 years ago
I need to iron out a couple details before recording a video (hopefully in the next week). What kind of applications do you want to see working with the system?
Something relatively easy to set up, but which does something useful?
But I still don't understand what trackmate is used for. Whet is a tracking system?
adamkumpf (author)  ItsTheHobbs5 years ago
I added a paragraph to the intro above to make this a bit clearer. 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.
Oooooooook now it makes sense. Wow that's really neat!
LinuxH4x0r5 years ago
I've tried this software in the past and it was a PITA. maybe i'll try it again
adamkumpf (author)  LinuxH4x0r5 years ago
Let me know what changes you think would make it less painful to use. I'm happy to work on improving it! :)
rustlabs5 years ago
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

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!