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

Motion Strategy Library Main Page

Motion Strategy Library


The Motion Strategy Library (MSL) allows easy development and testing of motion planning algorithms for a wide variety of applications. It was developed by Steven M. LaValle and his students, mainly from 2000 to 2003. It was the first open-source motion planning library and has been updated as of July 2021. 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. It has been successfully compiled on various Windows systems as well.

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).

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.0a (04.07.21)

Source distribution: [gzipped tar file]
Linux binary distribution (Compiled using 64 bit Ubuntu 20.04): [gzipped tar file]

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.

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

G. Contributors