Revision Control

Generally, if you're given access to the revision control system you're trusted enough to not do something crazy (like commit 100 times in one day, commit 100 new files in one day, totally change underlying functionality / structure, etc). The great thing about something like SVN is you can't ever do something that can't be undone. There are some general best practices though - the subversion docs has a short list (we are using the "Branch when needed" system).

Generally for open source projects expect that your code will be accepted in principle but mostly rewritten by someone at some time. Also note that it is much better to commit too frequently rather than too infrequently.

Documentation

The API documentation for blobber can be created by first installing doxygen, and then configure blobber with:

./configure --enable-doxygen
make dox
firefox apidocs/html/index.html

Alignment and Adjustment

Visible Area Detection

The first problem involves detecting the visible projection in the camera. This is necessary for a few reasons:

  • To automate the synchronization between what the camera's visible area and what is projected (so, for instance, with the laser tag module the lines should be drawn precisely where the laser is moving).
  • To reduce the amount of space that modules have to traverse when looking for colors/light/other input.

Coordinate Translation

Once the projected are is identified in the camera's visible area (see above) modules can traverse the space looking for whatever input they need (like a laser light for laser tag module). Once the module wishes to mark output on the projection area, they can tell the projection window object to draw pixels/shapes/etc as if the projection window is the same size (camarea width by camarea height). The projection area will perform translation of the coordinates to the actual size of the projection (projection width by projection height).

Basic formulas:

 // projection window x = (x value in terms of perceived projection width) scaled to projection width
 projection window x = ((camarea x - diff x) / perceived projection width) * projection width

 // projection height y = (y value in terms of perceived projection height) scaled to projection height
 projection height y = ((camarea y - diff y) / perceived projection height) * projection height

Attachments