wiki:FireVisionTriclops
Last modified 11 years ago Last modified on 04/30/07 15:55:37

FireVision and the Triclops SDK

FireVision has optional support for the Point Grey Research (PTGrey, PGR) Bumblebee 2 (BB2) stereo camera. The camera derives from the Firewire camera and encapsulates all specific actions that are needed to deal with the BB2.

Using the BB2

Register magic

In particular the camera implementation handles some specific register magic that is needed to get the camera working correctly. This involves fetching configuration data from the camera that can then be fed to the Triclops SDK and setting the image format correctly for the machines encoding to get proper disparity images.

Stereo processing

Additionally and most importantly it encapsulates the whole stereo processing that is required to get disparity images out of the camera. A simple Bumblebee2::capture() call will run the complete Triclops stereo processing pipeline so that you can immediately access stereo images after capture() returns.

Setting up the Triclops SDK

The Triclops SDK is proprietary software provided by PTGrey. It has a very rigid license which does not permit us to have an easy method of copying around the library. Especially the library is bound to be used with PTGrey cameras and may not be used otherwise. Do not just copy it from a robot.

Ask someone from the core team if you think that you need access to the libraries. If you just want to do something with Fawkes and FireVision without the need to stereo vision there is no need to install the library, as its absence is automatically detected and the encumbered parts of the software are not built.

Unpacking

If you get the archive unpack it in /opt. You can install it to other places but this will need modifications to fvconf.mk. After unpacking create a symbolic link. Assuming that you have installed version 3.2.0.8 (which is the current version as of this writing) you would do:

cd /opt
tar xfz ~/Triclops3.2.0.8-FC3.tgz
ln -s Triclops3.2.0.8-FC3 triclops

This will create the appropriate link. But we are not done yet.

Creating shared library

The library is only supplied as a static library. Since we want to use it as shared library since it is easier to handler and provides faster link times the following steps are necessary. Assuming that the original library resides in /opt/triclops as recommended all you have to do is:

cd /opt/triclops/lib
mkdir objs
cd objs
ar x ../libtriclops.a
ar x ../libpnmutils.a
gcc -shared -o ../libtriclops.so *.o

This will unpack the static libraries and create quite a bunch of object files. These are then linked to a dynamic library using GCC. This dynamic library is automatically preferred and you do not need to delete the static library.