Trackmate :: Portable Plexi Cliffhanger





Introduction: Trackmate :: Portable Plexi Cliffhanger

About: Background in Electrical Engineering, Computer Science, Robotics, and Tangible Interfaces from MIT. Currently working at Fiddlewax to create new musical instruments. Other projects I've worked on can be fo...
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.

Step 1: 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; here is an list to help you find everything you need.

Step 2: Modify Some Things

Add two rubber feet to both C clamps. This keeps the clamp from making marks on the table and helps it to grip the plexiglass sheet better.

Optionally, you can make the top side of the acrylic sheet frosted by sanding is lightly with fine sandpaper. This helps to diffuse light and makes the surface feel a little less-grippy (this can be nicer for sliding objects on top).

Step 3: Set It Up

Everything is packed up in an over-the-shoulder bag. The first couple images show all the contents together (including a laptop).

Pull out the acrylic sheet (if frosted, make sure the frosted side is facing up) and the C clamps.

Clamp the sheet to the table with about 2-3 inches of overlap to ensure a solid mount.

Place the clamp-light to the bottom of one of the C clamps under the table. Always be careful with where the light is mounted as a hot bulb next to paper, fabric, the table, etc. can start a fire. Using a low-wattage fluorescent bulb makes things a lot safer, but still be careful.

Setup the tripod under the table. Place the webcam on top of the tripod pointed up towards the overhanging plexiglass (the camera should be as close as possible while still being able view all of the illuminated area). Try to align the camera square with the table.

Mounting the camera to the tripod can be a bit tricky. Experiment with different brackets and clamps. I found that a simple twist-tie holding the camera's cord tightly worked as a strong-enough mount for the PS3 Eye camera (although a custom bracket would be even better).

Step 4: Start Tracking!

Once you have all of the hardware setup, run the Trackmate Tracker and place one of the Trackmate layout guides on the surface. The layout guides make it easy to quickly configure the Tracker and make sure the entire surface is being read correctly.

For a complete walkthrough showing how to setup the Tracker software, see the Cliffhanger Walkthrough on the Trackmate wiki.

Your Portable Plexi Cliffhanger is now ready to use. Plug in the camera and get started with Trackmate!



    • Oil Contest

      Oil Contest
    • Water Contest

      Water Contest
    • Creative Misuse Contest

      Creative Misuse Contest

    37 Discussions

    hi, can it be connected to parallel port?

    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??

    1 reply

    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).

    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!

    8 replies

    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:

    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!

    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:

    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

    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!

    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:

    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:

    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.

    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???

    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?

    1 reply

    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

    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.

    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!

    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.