The Modular OpenRobots Simulation Engine

Presentation outline

The MORSE project

The MORSE community

The MORSE community

Blender Game Engine + Bullet

What if...

...we want to simulate a PR2 mapping a kitchen environment?

$ morse create pr2_kitchen

This example requires latest git version of MORSE

$ vim pr2_kitchen/

from morse.builder import *

robot = BasePR2() # Bare PR2 model
robot.add_default_interface('ros') # control PR2 via ROS

odometry = Odometry() # Sensor for Odometry information
odometry.add_interface('ros', topic="/odom")

keyboard = Keyboard() # Keyboard control

scan = Hokuyo() # Hokuyo 2D laser scanner
scan.translate(x=0.275, z=0.252)
scan.add_interface('ros', topic='/scan')

env = Environment("kitchen.blend") # load custom 3d model

$ morse run pr2_kitchen

Using standard ROS robot_state_publisher and gmapping

$ morse run pr2_kitchen

Using standard ROS amcl localization

Navigation using move_base and AMCL localization

motion = MotionXYW() # Motion controller
motion.add_interface('ros', topic='/cmd_vel')

$ morse run pr2_kitchen

MORSE specific features

MORSE Principles: level of realism

Levels of abstraction: level 0
Levels of abstraction: vision level
This set of 4 slides show how MORSE can be used at different level of abstraction: from 'few things simulated, lot of robot software running' to 'almost everything simulated, only high-level robot softwares'.
Levels of abstraction: level 1
Levels of abstraction: depth map level
Levels of abstraction: level 2
Levels of abstraction: terrain level
Levels of abstraction: level 3
Levels of abstraction: semantic level

MORSE Principles: Components

A click on the image redirect to MORSE Component Library in the on-line doc.
Scroll there to quickly show the available components.

MORSE Principles: Inner loop

MORSE Principles: Interfaces

Human-Robot interaction
Realistic outdoors simulation