What’s new in MORSE 1.0?

General

  • MORSE is mature! stable release !
  • Unit-test coverage has been substantially improved
  • Documentation of component is now partially auto-generated: this should bring a better, up-to-date, complete documentation, including code examples
  • MORSE has a new logo!

Components

  • All components now explicitly expose their data fields and properties with respectively add_data and add_property.
  • Introduced “abstraction levels” that allow to define several levels of realism for a given component (#166). Many components remain to be ported to use this interface, though.
  • Many component classes have been renamed to be more readable and match Builder conventions
  • Creation and configuration of armatures in Blender, suitable for MORSE is now properly documented.
  • Most of the component do not need a Blender file anymore (only the one with complex meshes or armature are kept) (#221).
  • Blender file for components do not require any game property of logic brick anymore. It is now fully created within the Builder API. This means that any Blender model can be used as MORSE model, without specific configuration (#241).
  • components can now be easily profiled for performance assessment from the Builder API.

Robot

  • Substantial improvement regarding the PR2 robot support. Besides 2D navigation, the robot’s joint state and joint control via standard tools like pr2_tuck_arm works out-of-the-box. PR2 joint name have been updated to match the latest version. Several scripts allow to create a PR2 with variable level of equipment.
  • Fixed the WheeledRobot class of robot that had a erratic physics behaviour. Make Pioneer3DX inherit from this robot class (#245).

Actuators

  • Complete rewrite of the armature actuator. It can now track joints state (interpolating joint rotation if required, and not only ‘jumping’ to the target position) and execute trajectories with interpolation. It also introduces support for prismatic joints (#231, #232).
  • Waypoint actuator: improve handling of interruption (the robot motion now actually stops).

Sensors

  • New sensor: depth camera (Thanks to Gilberto’s patch in Blender 2.65), with specialization like Kinect (#122, #123, #138). It uses Python 3.3 memory_view for fast, copy-less transfer of binary data between the OpenGL buffers, the C processor, and the interface.
  • Laser sensors have been reorganized and grouped in one single category (#155, #226).
  • Odometry now expose several abstraction levels (raw, differential, integrated)
  • New sensor: armature pose. This sensor superseeds previous sensors like kuka_pose or pr2_posture by proving a clean interface to armature states.
  • New sensor: Velodyne
  • New special compound sensor that allows to merge the output of several sensors. Used for instance to merge the joints values of the different PR2 armature in a single joint state (#240).
  • Former rosace sensor has been renamed to a more appropriate search_and_rescue sensor.
  • Laser scanner ranges ordering has been reversed to match ROS conventions.

Builder API

  • One class per component: for instance, Robot(‘atrv’) becomes ATRV(). The documentation page of each component gives an example.
  • New FakeRobot() for clock and other static components (like environment cameras).
  • Former functions configure_mw and configure_service replaced by new add_interface, add_datastream, add_service or add_default_interface that sets an interface for a whole robot (#217).
  • Components are now automatically renamed after the variable names used in the Builder script, provide much more natural naming schemes. Names can still be configured explicitly with component.name (#133).
  • Component profiling with component.profile()
  • Errors in Builder scripts are now better handled, with meaningful error messages.
  • The simulation can now be configured from the Builder script for 3D output (split screen), including configuration of eye separation.
  • Added ability to automatically save your scene as a Blender file from the Builder script.
  • Added a fastmode option when setting up the environment: in fastmode, only wireframes are displayed. This improves MORSE loading time and performance, but some sensors (like cameras) won’t work. Most of the unit-tests now use this mode.

Warning

It basically means that scene are incompatible between release 0.6 and 1.0. To help the conversion, you can use the tool available here Basically, you can use it like that:

sh convert_0.6_to_1.0.sh your_scene.py > your_scene_1.0.py

You may need to edit the resulting file manually to fix last issues. If you get in trouble, feel free to send us a mail on morse-users@laas.fr with your scene.

Assets

  • Added a new empty environment, especially suited for tests.

Interfaces

  • Interfaces can now implement data serialization/deserialization in explicit classes: no more hacky appending of free functions (#144, #145).

ROS

  • GPS : cleaned, to be validated
  • Odometry now publish both Odometry and TF
  • Pose publish only Pose (no more Odometry)
  • Laser scanners can now export point clouds (PointCloud2)
  • New PointCloud2 publisher for depth camera, Kinect in progress
  • Support for the JointTrajectory ROS action for armature control
  • Special unit-test class for ROS tests that takes care of setting up an appropriate ROS environment (including launching roscore).

Sockets

  • Support for cancelling asynchronous requests
  • Support for exporting matrices and 3D transformations

pocolibs

  • Large rewrite of pocolibs interface, now using ctypes instead of SWIG bindings. This simplifies a lot the compilation and maintenance of these interfaces.

Text

  • Improved the text interface, to allow for instance output as .csv files.

pymorse

The Python bindings for MORSE have been completely rewritten, now supporting a modern asynchronous interface (based on Python 3.2 futures). It is also deemed as feature complete: it supports discovery of the simulation components, synchronous/asynchronous service invocation (including service cancellation) and synchronous/asynchronous read/write of datastream (#216).

MORSE unit-tests now use this new API.

Internals

  • Substantial changes in MORSE internals:
    • lots of refactoring, to improve code consistency (including {middleware->datastream} (#186))
    • many files have been renamed for consistency

Misc

  • MORSE now uses the MORSE_RESOURCE_PATH environment variable to look after custom location for assets: convenient to store your own model out of MORSE tree (#187).
  • Added configuration file required by the Travis buildbot
  • Several large examples or tutorials have been removed (because either deprecation or doubtful usefulness)
  • New CSS for documentation, based on GitHub minimal style.
  • Numerous bugfixes, including:
    • the ‘objects flying around’ bug, that was due to the way Blender handle transformation matrices (#139).
    • a bug affecting the color of some materials
    • bug with logging when restarting the simulation in special cases (#183)