Overview
The cisst package is a collection of libraries designed to ease
the development of computer assisted intervention systems. One
motivation is the development of a Surgical Assistant Workstation
(SAW), which is a platform that combines robotics, stereo vision,
and intraoperative imaging (e.g., ultrasound) to enhance a surgeon's
capabilities for minimally-invasive surgery (MIS).
Our current release is cisst-0.9.0 (September 5th 2008). It includes the
following libraries and associated example and test programs:
- cisstCommon: Common infrastructure for the rest of the package
such as logging, error and exception handling, class and object
registries.
- 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.
- 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 threads, mutex, 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.
Other libraries (e.g.,
tracking systems, robot control, stereo vision) are in development and
will be released in the future.
The cisst package, including software and documentation, is copyrighted
by the Johns Hopkins University. The use of the software is subject to
the [CISST Software License].