Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

Motion Strategy Library Main Page

Motion Strategy Library

Windows XP version is available for download!
See the Download part of this page.
The Motion Strategy Library (MSL) allows easy development and testing of motion planning algorithms for a wide variety of applications. The software architecture is object-oriented and the general design is highly modular. It was developed on a Linux system using GNU C++, STL, and the FOX GUI Toolkit.

The MSL is available as Open Source, free for both academic and commerical use. Here is a copy of the licensing agreement, which offers substantial freedom, to help spread interest and applications of motion planning algorithms.

Presently MSL includes planners based on Rapidly-exploring Random Trees (RRTs), Probabilistic Roadmaps (PRMs), and forward dynamic programming (FDP). If you have any questions or comments regarding the software, please do not hesitate to send e-mail.

A. General Overview
B. Downloading and Installation
C. Help Getting Started
D. Known Problems
E. Revision History
F. To-Do List
G. Contributors

A. General Overview

MSL consists of seven C++ class hierarchies, each of which serving an independent purpose. The relationship between these classes is shown below.

This is not an inheritance diagram; it merely shows what information is passed from one hierarchy to another. Inheritance diagrams are included in the
Class Hierarchy documentation. Each of the seven class hierarchies is briefly explained below:

B. Downloading and Installation

Here is the download information:

MSL Release 2.0 (07/24/03)

Source distribution: [gzipped tar file]
Linux binary distribution (Compiled using Red Hat 7.2): [gzipped tar file]
Linux binary distribution (Compiled using Red Hat 8.0): [gzipped tar file]
Windows XP binary distribution (Made in 2008 by Wei Wang,; Version Info): [7.1MB rar file]
Updated source for MSL 2.0 using Fox 1.6.37, PQP 1.3, GCC 4.1.2 (Made in 2010 by Ian Baldwin at Oxford University, Version Info): [2.2MB tgz file]

For information about the new version, see the Revision History


MSL was developed on a PC running Red Hat Linux. Therefore installation will probably be easiest on this platform. Versions of the software has also successfully been installed on an SGI, SunOS, Windows 2000, and many other flavors of Linux.

The following libraries are used by MSL:

C. Help Getting Started

Several README files are contained within the distribution. These contain useful information regarding installation, running examples, and developing your own code that uses the library.

Running the examples

In the default configuration, two executables are generated, plangl and planleda. When running either of these, a path must be specified that contains the problem. There are many example problems in the data directory. To run one, type "plangl data/cage1".

The GuiPlanner window

The Construct button generates a planning graph, but does not attempt to solve the problem. Plan attempts to find a path that connects the InitialState to the GoalState (the PRM planner requires first using Construct; RRT-based planners do not). If Plan fails, it can be pressed again and the planner will continue to search using the previous planning graphs as a starting point. The Planner menu allows different planners to be attempted. The Display menu has functions that show a solution path or show a 2D projection of the planning graph. By default, the projection is shown using the first two state varibles. In the planner control window the variables DrawIndexX and DrawIndexY can be used to select other state variables to show in the projection. The File menu contains many straightforward options to read and write files. The Settings menu allows some planning parameters to be adjusted, including DeltaT (the time step), NumNodes (number of nodes to try to make each time Plan is pressed), and GapDist (the distance threshold to use to declaring a connection has been made in a dual tree search algorithm).

The GL renderer

The GL rendering window is primarily controlled using the render control window. Some of the render control options can be performed by pressing keys. Press 'h' to see a listing of these. Holding each mouse button while moving allows a different type of change in the viewpoint.

The Inventor Renderer

You can grab onto the environment and spin it.

The Performer renderer

When the Performer rendering window is open, there are several ways to interact with the display. Pressing "c" will show or hide a control bar that changes the animation speed. Pressing "b" will show or hide a bounding box that is based on LowerWorld and UpperWorld. Pressing "v" changes the viewpoint from either being global or being attached to a body. Holding each mouse button while moving allows a different type of change in the viewpoint.

Making a new problem

Each problem is described by a directory full of files. Most of them are ASCII files that are easily read and written. To make a new example, some files are necessary, while others are optional. Default values of parameters will be assumed when optional files are not present. Some particular models might require files that are not used in other models. For example, ModelLinear requires files "A" and "B" which specify the matrices in the equation xdot = Ax + Bu. Other than reading the code, an easy way to find out which files might be needed for a particular model is to modify an example that has been included in this distribution and uses the same model.

The following files are required for all examples:

The following files are optional:

Extending existing models

Suppose that you would like to make your model derived class from Model, or you would like to make your own variation of an RRT, PRM, or FDP planner. This can be accomplished by writing very little code. An example of how to make and use your own model is given in the "tests" directory of the MSL distribution. Included in that directory is a README that explains the examples. These are the recommended way to use the MSL in a clean, object-oriented way. If you write code this way and make some interesting contributions, it will be easy for us to include it in future releases of the library. If you simply hack away at the MSL source code, then it will be nearly impossible to do this, and you will have difficulty using upgraded versions of MSL.

D. Known Problems

Version 2.0

E. Revision History

I get many messages from researchers attempting to get the MSL to work on Windows platforms. My student, Libo Yang took an MSL version from a couple of years ago and fixed the code up to work under Windows 2000. Beyond that, we do not have the resources to maintain the code for various Windows distributions, such as NT or XP. Once we release the new open source version this summer, we would welcome any contributions that help make the MSL work under these platforms. We generally do our development in Linux, and do not have the expertise or desire to provide extensive support for Windows. However, since many users care about this, we are willing to incoprorate the contributions of others, which may enable the library to be compiled under various Windows platforms.

F. To-Do List

G. Contributors

Web page maintained by Steve LaValle and his students at the University of Illinois.