Optimal Motion Generation-tools: motion planning made easy
Clone or download


oh my god!

Build Status PyPI version

Optimal Motion Generation-tools is a Python software toolbox facilitating the modeling, simulation and embedding of motion planning problems. Its main goal is to collect research topics concerning (spline-based) motion planning into a user-friendly package in order to enlarge its visibility towards the scientific and industrial world.

This toolbox focuses on receding horizon control for single-agent systems as well as on distributed control for multi-agent systems. The approaches implemented in OMG-tools are described in the following publications:

  • Mercy T., Van Loock W., Pipeleers G. (2016). Real-time motion planning in the presence of moving obstacles. Proceedings of the 2016 European Control Conference. European Control Conference. Aalborg, 29 June - 1 July 2016 (pp. 1586-1591). (pdf)
  • Van Parys R., Pipeleers G. (2016). Online distributed motion planning for multi-vehicle systems. Proceedings of the 2016 European Control Conference. European Control Conference. Aalborg, 29 June - 1 July 2016 (pp. 1580-1585). (pdf)
  • Van Parys R., Pipeleers G. (2017). Spline-Based Motion Planning in an Obstructed 3D environment. Proceedings of the 20th IFAC World Congress. IFAC World Congress. Toulouse, France, 9-14 July 2017 (pp. 8998-9003). (pdf)
  • Mercy T., Van Parys R., Pipeleers G. (2017), Spline-based motion planning for autonomous guided vehicles in a dynamic environment, Transactions on Control systems Technology. (pdf)
  • Van Parys R., Pipeleers G. (2017), Distributed MPC for multi-vehicle systems moving in formation, Robotics and Autonomous Systems, vol. 97C (pp. 144-152). (pdf)
  • Mercy T., Hostens E., Pipeleers G. (2018). Online motion planning for autonomous vehicles in vast environments. Proceedings of the 2018 International Workshop on Advanced Motion Control. Tokyo, March 9-11 2018 (pdf)

If these methods help you with your research, please cite us!



The animations below give an overview of typical problems that OMG-tools can handle.

Formation attacked by cannonballs Holonomic vehicle moving through a maze Holonomic vehicle passing through a revolving door
Formation through narrow passage Dubins vehicles moving in relative formation Dubins vehicle with trailer
Big warehouse with rectangular bouncing obstacles Quadrotors avoiding a UFO 3D quadrotor in obstructed environment
Rear-wheel steered AGV parking Holonomic vehicle moving while suddenly blocked Differential drive moving through a revolving door
Big warehouse with circular bouncing obstacles Holonomic vehicle finding its way in a warehouse Quadrotors landing on platform
Trajectory generation for GCode of 2D anchor Formation of quadrotor with rotating wall Differential drive vehicle moving through environment using multiple frames
Holonomic vehicle moving through big warehouse using multiple shifted frames Holonomic vehicle moving through big warehouse using multiple frames without stationary obstacles Holonomic vehicle moving through vast warehouse using multiple frames without stationary obstacles
Trajectory generation for a racetrack

Experimental validation

OMG-tools implemented on real-life motion systems. Click on a picture to watch the Youtube video.

Online motion planning Online distributed motion planning
Online motion planning Plate transportation
Spline-based motion planning Spline-based motion planning
Spline-based motion planning Spline-based motion planning in a vast environment
Spline-based motion planning in a vast environment Spline-based motion planning in a vast environment
Spline-based CNC trajectory generation Spline-based CNC trajectory generation

Code example

This elementary code example illustrates the basic functionality of the toolbox for steering a holonomic vehicle from an initial to terminal pose in a dynamic environment.

from omgtools import *

# make and set-up vehicle
vehicle = Holonomic()
vehicle.set_initial_conditions([-1.5, -1.5])
vehicle.set_terminal_conditions([2., 2.])
vehicle.set_options({'safety_distance': 0.1})

# make and set-up environment
environment = Environment(room={'shape': Square(5.)})

# add stationary obstacles to environment
rectangle = Rectangle(width=3., height=0.2)
environment.add_obstacle(Obstacle({'position': [-2.1, -0.5]}, shape=rectangle))
environment.add_obstacle(Obstacle({'position': [ 1.7, -0.5]}, shape=rectangle))

# generate trajectory for moving obstacle
traj = {'velocity': {'time': [3., 4.],
                     'values': [[-0.15, 0.0], [0., 0.15]]}}
# add moving obstacle to environment
environment.add_obstacle(Obstacle({'position': [1.5, 0.5]}, shape=Circle(0.4),
    simulation={'trajectories': traj}))

# give problem settings and create problem
problem = Point2point(vehicle, environment)

# simulate, plot some signals and save a movie
simulator = Simulator(problem)
vehicle.plot('input', labels=['v_x (m/s)', 'v_y (m/s)'])

Point-to-point motion of holonomic vehicle

More examples

Check out the examples directory for more code examples. There you can find a simple tutorial example which provides a documented overview of the basic functionality of the toolbox.


Basic installation

OMG-tools is written in Python 2.7 and requires the installation of the following packages:

sudo apt-get install python-pip python-numpy python-scipy python-matplotlib

OMG-tools itself is downloaded from the PyPI repository and installed using pip:

sudo pip install omg-tools

This also installs CasADi, a powerful open-source tool for nonlinear optimization and algorithmic differentiation.

Advanced installation

If you want to save simulation results in gif-format, you need imagemagick. For Linux Debian users:

sudo add-apt-repository main && apt-get update && install imagemagick

For faster solving of the motion problems, we recommend to install the HSL linear solvers.

If you want to install OMG-tools for development purposes, you can link your installed files to the cloned repository, by invoking the following command in the repository's root folder:

sudo pip install -e .


OMG-tools is developed by Ruben Van Parys and Tim Mercy as part of their research in spline-based motion planning, under supervision of Goele Pipeleers within the MECO research team. Any questions, comments or propositions of collaboration can be addressed to ruben[dot]vanparys[at]kuleuven[dot]be and tim[dot]mercy[at]kuleuven[dot]be.