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
  <https://raw.github.com/morse-simulator/morse/master/tools/convert_0.6_to_1.0.sh>`_
  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)
