The Dexterous Manipulation Libraries

Why Libraries?

Libraries are used to provide a central, reusable set of core functions and classes which are relatively static and are meant to be included across multiple executable files. Because we use a multi-processing system, our projects are typically made up of many executables, working together. Many functions and classes appear throughout these projects, so they get put into libraries. It's much easier than maintaining separate copies of the routines in each executable, and quicker and more organized than linking just to object files in a central directory.

If you link your program using the @/etc/wlink.lnk option, the script contained in that file will automatically include the libraries in the linker's search path. If you want to include more libraries, either edit the /etc/wlink.lnk file or use the linker option libpath.

In addition, many of the libraries and processes depend on a 3rd-party library, the 'matclass' library, for their functions. This library and its attendant headers are in the regular /usr/lib and /usr/include directories, but need to be explicitly linked. Again, @/etc/wlink.lnk takes care of this. The matclass library is a set of C++ classes which enable the use of matrices.

There are two main libraries for the Dexterous Telemanipulation Project:

The DML Library

This library contains general classes and functions which are useful across modules and projects. The components of this library appear across executables in the same project, and across projects as well. For instance, most of the components appear in both the DEXTER drivers and the CyberGlove interface set. This library would be useful when starting up a completely new multiprocessing project. It includes such basic stuff as master/child processes, shared memory, timers, etc. Please note that these libraries will only work for QNX 4.25.

Classes and Modules in the DML library:

Example code:

Source code:

 

The Cglove Library

This library contains classes which are useful only to the CyberGlove project (this does NOT include the DEXTER component... those are contained in the Dexter library). These classes are in general not meant to be used outside the CyberGlove (and related) driver set, including the GUI and drivers for the other CyberXXX peripherals. The main purpose of this library is to reduce code complexity of the individual processes. By using this library, in conjunction with the DML library, most of the processes can be reduced to 1 or 2 modules, less than 200 lines long. The library includes mapping, hand model, and other classes, as well as shared memory definitions, and general constants and defines.

Classes and modules in the Cglove library

If you are intereseted in setting up a CyberGlove for a QNX system (4.25) please contact the webmaster.