Skip to content

cisst libraries and SAW components

Anton Deguet edited this page Sep 29, 2020 · 18 revisions

Table of Contents generated with DocToc

cisst Libraries overview

Library Description Status
cisstCommon Common infrastructure such as logging, class and object registries, serialization and de-serialization, etc. Stable
cisstVector Basic linear algebra and spatial transformations in two dimensions (2D) and three dimensions (3D) Stable
cisstNumerical Thread-safe numerical methods (relies on LAPACK) Stable
cisstInteractive C++ classes and Python scripts for the Interactive Research Environment (IRE) Stable
cisstOSAbstraction Operating system services (e.g., threads, mutual exclusion, etc.) for Windows, Linux, Mac OS X, RTAI/Linux, ... Stable
cisstMultiTask Component-based framework for defining tasks and devices, provided and required interfaces, and command objects Stable
cisstStereoVision Mono and stereo video acquisition, processing, and display Stable
cisstParameterTypes Standard data types used by command objects in component-based framework Development
cisstRobot Robot control elements, including cooperative control, trajectory control, etc. Development
cisst3DUserInterface Support for 3D user interfaces (3D input and 3D display) Development

Most libraries also come with examples and test programs.

SAW components overview

The SAW package currently contains the following implemented components:

Component Description
saw3Dconnexion Interface to 3D Connexion Space Navigator 3D mouse
sawAtracsysFusionTrack Interface to Atracsys fusionTrack
sawBarrett Interface to Barrett Technology Whole Arm Manipulator (WAM) robot and components
sawCANBus Generic Controller Area Network (CAN) bus interfaces
sawClaronMicronTracker Interface to Claron Technology Micron optical tracking system
sawCMUSphinx4 Interface to Sphinx4 speech recognition package
sawControllers Various control components, including PD (with gravity comp.), PID, teleoperation
sawDataPlayer Application to replay recorded multi-media data
sawForceDimensionSDK Interface to the ForceDimension SDK, supports haptic devices Omega, Sigma and Novint Falcons
sawGLUTSimulator GLUT-based simulator (simpler than sawOpenSceneGraph simulator)
sawIntuitiveDaVinci Interface to da Vinci surgical robot via read-only research interface (requires license and library from Intuitive Surgical)
sawIntuitiveResearchKit Components for the da Vinci Research Kit
sawJR3ForceSensor Interface to JR3 force sensor using Comedi
sawKeyboard Keyboard interface (generate commands or events from key presses)
sawLoPoMoCo Interface to JHU custom Low Power Motor Controller board
sawMedtronicStealthlink Interface to Medtronic Stealthstation via Stealthlink research interface (requires license and library from Medtronic Navigation)
sawMicroScribeDigitizer Interface to Revware MicroScribe digitizer device (requires Arm32Dll SDK from Revware)
sawNDITracker Interface to Northern Digital Inc. (NDI) tracking systems that use a serial port; includes Polaris and Aurora
sawNovintFalcon Interface to Novint Falcon haptic device
sawOpenAL Interface to Open Audio Library
sawOpenDynamicsEngine Interface to Open Dynamics Engine (ODE) physics-based simulator; requires sawOpenSceneGraph
sawOpenIGTLink Bridge between ''cisst'' interfaces and OpenIGTLink
sawOpenNI Interface to Microsoft Kinect via OpenNI
sawOpenSceneGraph Interface to Open Scene Graph (OSG) visualization software (used for simulations)
sawOptoforceSensor Interface to OptoForce force sensors using a serial port over USB
sawRobotIO1394 Interface to custom IEEE-1394 (Firewire) motor controller
sawSartoriusScale Interface to high-precision scale
sawSensablePhantom Interface to Sensable Phantom haptic device (e.g., Phantom Omni)
sawTextToSpeech Component to convert text to speech output (Windows, Linux, Mac)
sawTrajectories Various trajectory planners and generators (no hardware dependency)

cisst libraries description

Following are descriptions of some of the cisst libraries:

cisstCommon: Common infrastructure for the rest of the package such as logging, error and exception handling, class and object registries, serialization and de-serialization, ...

cisstVector: cisstVector is a library for basic linear algebra and spatial transformations in two dimensions (2D) and three dimensions (3D). It contains classes for vectors and matrices, whose sizes can be pre-specified (fixed size) or dynamic. All containers can be defined as memory allocating or overlaid. The former provide user control over matrix storage order (row-major or column-major). The latter facilitate wrapping any memory block with a vector or matrix interface, as well as defining slices of existing containers, such as row- and column-vectors in a matrix, or submatrices in a large matrix. The library provides a large collection of algebraic operations (e.g., sums, products, etc.) with uniform interfaces across all container types and efficient implementations, such as template metaprogramming. The structure of the library enables rapid extensions (scalability) across container-element types and container sizes through templated classes, and a simple addition of new methods. The spatial transformations, with generic interfaces, includes a diverse collection of rotation representations, with a uniform syntax for converting from one to another. Besides the broad internal API, the cisstVector library can easily and efficiently interface external software packages, such as LAPACK, VNL and OpenGL, and provides the underlying data types used in the cisstNumerical library. The interfaces can also be exported to a Python environment through Swig wrapping -- typemaps are used to convert between cisstVector vector/matrix types and standard Python numpy arrays.

cisstNumerical: cisstNumerical is a library of numerical routines. The majority of cisstNumerical features rely on well established and tested routines, written in Fortran (such as Singular Value Decomposition, LU decomposition, LU based matrix inverse, Hanson and Haskell least squares with or without constraints...). cisstNumerical adds a user-friendly C++ interface based on the cisstVector fixed size and dynamic vectors and matrices. While this interface greatly eases the task of a novice user, it retains the flexibility required for advanced users by allowing them to overlay their input over pre-allocated memory. Furthermore, the cisstNumerical wrappers ensure that the format of the input is correct (size, storage order and compactness), and, whenever possible, enable the use of any storage order (either Fortran-like column major or C-like row major). Finally, since cisstNumerical uses LAPACK3E, it is thread safe as opposed to most libraries based on LAPACK or CLAPACK. Besides the Fortran wrappers, cisstNumerical contains some optimized functions for specific cases (such as Gauss-Jordan inverse of small fixed size matrices) and some basic algebraic utilities (test orthonormality).

cisstInteractive: C++ classes and Python scripts for the cisst Interactive Research Environment (IRE).

cisstOSAbstraction: Wrappers for Operating System services such as threads, mutual exclusion, time, dynamic loading, ...

cisstMultiTask: cisstMultiTask supports multi-threaded programming with efficient, lock-free, and thread-safe data exchange. The task class contains a (periodic) thread, state table, and mechanisms for interaction. The design utilizes component-based software engineering concepts, where all interaction occur via interfaces. Each interface contains multiple commands that implement the functionality provided by that interface.

Clone this wiki locally