Skip to content

Optimal Motion Generation-tools: motion planning made easy

License

Notifications You must be signed in to change notification settings

Sunshine352/omg-tools

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

oh my god!

Build Status Coverage Status Codacy Badge

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

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

Examples

Overview

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

Point-to-point motion of bicycle model Holonomic vehicle moving through a maze Holonomic vehicle passing through a revolving door
Formation of quadrotor with rotating wall 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

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
Spline-based motion planning Spline-based motion planning
Spline-based motion planning Plate transportation

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)
problem.init()

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

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.

Installation

OMG-tools is written in Python 2.7 and depends on the packages numpy, scipy and matplotlib:

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

It uses CasADi as a framework for symbolic computations and interface to IPOPT, a software package for large-scale nonlinear optimization. The current implementation of this toolbox relies on CasADi 3.1, which can be obtained from its install page. In the examples, we use the HSL linear solvers, as they result in a much faster execution.

If you want to save your simulation results in Tikz-format, you need matplotlib2tikz.

If you want to save your simulation results in gif-format, you need imagemagick.

To install the toolbox itself, run the following command in the root directory of this repository:

sudo python setup.py install

Authors

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.

About

Optimal Motion Generation-tools: motion planning made easy

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 83.3%
  • C++ 16.2%
  • Makefile 0.5%