MORSE is an generic simulator for academic robotics. It focuses on realistic 3D simulation of small to large environments, indoor or outdoor, with one to tenths of autonomous robots.
MORSE can be entirely controlled from the command-line. Simulation scenes are generated from simple Python scripts.
MORSE comes with a set of standard sensors (cameras, laser scanner, GPS, odometry,...), actuators (speed controllers, high-level waypoints controllers, generic joint controllers) and robotic bases (quadrotors, ATRV, Pioneer3DX, generic 4 wheel vehicle, PR2,...). New ones can easily be added.
MORSE rendering is based on the Blender Game Engine. The OpenGL-based Game Engine supports shaders, provides advanced lightning options, supports multi-texturing, and use the state-of-the-art Bullet library for physics simulation.
In MORSE, simulations are small Python scripts that describe the robots and the environment. MORSE provides several command-line tools to create stubs, and it takes virtually no time to get a first simulation running.
One of the main design choice for MORSE is the ability to select the degree of realism of the simulation: if you are working on vision, you need accurate camera sensors, but may not care about the realism of your motion controller, and you may find a waypoint controller good enough and easier to use. On the contrary, if you work on robot supervision, you may prefer skip the perception stack and directly work with objects ID and positions. MORSE lets you define how realistic the different components of you robot need to be to fit your needs.
MORSE also supports two different strategies for handling time: best effort, that tries to keep a real-time pace, at the cost of dropping frames if necessary, or fixed step that ensures the simulation is accurate. In this case, MORSE exports its own clock that can be used to adjust other time-dependent modules in your system.
MORSE is mostly written in Python: except for computation intensive processes (like 3D rendering or physics simulation), MORSE is a purely Python application. This enable easy and fast modification of the source code.
Besides, MORSE has been designed to be modular: adding a new sensor, a new actuator, a post-processing (like applying a noise function), adding new services, or even a complete communication middleware is reasonably easy and documented.
MORSE do not make any assumption on your architecture. MORSE currently supports 6 open-source middlewares (ROS, YARP, Pocolibs, MOOS, HLA and Mavlink). Check here the exact list of features supported for each middleware.
It also supports a simple socket-based protocol for easy integration in other languages/toolbox. Complete bindings for Python are provided.
Also note that MORSE benefits from Blender import/export capabilities: existing models in many 3D formats (Collada, DXF, 3DS Max, VRML to name a few) can be used to build robots and environments.
MORSE is able to handle dozen of robots in a single environment as long as cameras are not simulated (because of bandwidth limitation).
For instance, MORSE running on an Opteron quadcore 2GHz, in headless mode (i.e. without 3D acceleration), can simulate:
(measured with standard ROS tools)
When cameras do no need to be simulated, MORSE offers a fast mode with much improved performances.
MORSE is also suited for large simulations of complex robots: MORSE can be run as a distributed network of simulation nodes. Each node automatically synchronizes with the others (however, due to latencies, do not expect to simulate accurate physical interactions in the distributed mode).
MORSE is packaged in Debian/Ubuntu: sudo apt-get install morse-simulator
MORSE is also easy to compile from the source. It has only two dependencies: Python and Blender (well, plus the middlewares you want to use, obviously). Any Linux distribution should provide out of the box all required dependencies.
MORSE installation is based on CMake, and allows you to only install support for parts relevant to your needs (why installing YARP support if you are using ROS?).
MORSE is also available as a robotpkg package: robotpkg is a package manager for robotics related software that will take care automatically of all dependencies required by MORSE.
MORSE and all the libraries it relies on are open-source projects.
MORSE itself is licensed under a permissive BSD license: you can use it for any purposes, without having to share your modifications back.
This also means that MORSE follows a open development process: you can fork MORSE source code on GitHub and everybody is invited to propose new features, report bugs and submit patches.
According to Ohloh, MORSE is an active and mature project, with well over 20 contributors.
These two huge open-source projects are very active and are supported by large communities of users and developers.
This means tons of tutorials, code examples, reusable snippets, etc.
This also ensures that, even if the MORSE core team would disappear, you would still be able to ask for support!
MORSE also integrates with other large open-source projects like ROS, which further anchors it into the open-source robotics community.
MORSE is born at LAAS-CNRS, a public French laboratory, one of the biggest in robotics.
Many more universities and institutes have joined the effort and collaboratively take part in assuring the future of MORSE.
Our close interactions with academic research in robotics worldwide guarantees that many innovative requirements end up in our roadmap without much delay.
Check here MORSE related publications and workshop.
To name a few other features:
Last but not least, MORSE has some important limitations you must be aware of when assessing simulation solutions: