Integrate MORSE in your software architecture

The core of MORSE is pure and independent of any specific robotic implementation. To make it possible to integrate easily with your architecture, MORSE proposes a middleware layers which bridge this gap, both for services with the concept of Component overlays and for datastream with the concept of datastream handler (this page).

Features compatibility matrix

The table below summarizes the level of support of MORSE features for each middleware. Further information can be found in clicking on the desired component.

When a component is supported (✔), we specify the middleware-specific format we use (like Viam or YarpImage).

If no format is specified, MORSE uses a generic serialization mechanism, e.g., a straight serialization of the JSON representation of the component data.

  socket ros yarp pocolibs moos hla text
  Support notes Support notes Support notes Support notes Support notes Support notes Support notes
Communications              
Datastreams ✔ (topics) ✔ (ports) ✔ (posters) ✔ (database) ✔ (attribute update)
Services ✔ (services + actions) ✔ (requests)
Sensors              
Accelerometer ✔ TwistPublisher
Armature Pose Sensor ✔ JointStatePublisher
Barometer
Battery Sensor ✔ Float32Publisher
Clock ✔ ClockPublisher
Collision
Compound Sensor
Depth (XYZ) camera ✔ a JSON-Encoded message for the DepthCamera ✔ DepthCameraPublisher Spix3DImage
Depth (XYZ) camera ✔ base64 encoded RGBA image ✔ DepthCameraPublisher ✔ yarp::ImageRGBA ViamImageBank
Depth (XYZ) camera
GPS              
GPS (simple level ) ✔ NavSatFixPublisher POM_ME_POS or POM_POS ✔ db entries
GPS (raw level )
GPS (extended level )
Generic Camera
Gyroscope ✔ StringPublisher POM_ME_POS or POM_POS ✔ db entries
Hokuyo
Human Posture STRUCT_SPARK_CONFIGURATION
Human Posture (kinect version)
Inertial measurement unit ✔ ImuPublisher ✔ db entries
Infrared Proximity Sensor
Kinect
Laser Scanner Sensors              
Laser Scanner Sensors (raw level ) ✔ LaserScanPublisher or PointCloud2Publisher ✔ yarp::Bottle ✔ db entries
Laser Scanner Sensors (rssi level )
Odometry              
Odometry (raw level )
Odometry (differential level )
Odometry (integrated level ) ✔ OdometryPublisher POM_ME_POS or POM_POS
PTU Pose Sensor ✔ JointStatePublisher PLATINE_STATES
Pose ✔ PoseStampedPublisher or TFPublisher POM_ME_POS or POM_POS ✔ db entries
Proximity Sensor ✔ StringPublisher
Radar Altimeter
SICK
SICK LD-MRS
Search And Rescue sensor GENPOS_TRAJ_POINTS
Semantic camera ✔ SemanticCameraPublisher or SemanticCameraPublisherLisp VimanObjectPublicArray
Stereo Camera Unit ViamImageBank
Thermometer Sensor
Velocity ✔ TwistStampedPublisher
Video camera ✔ base64 encoded RGBA image ✔ VideoCameraPublisher ✔ yarp::ImageRGBA ViamImageBank
Actuators              
ArUco Marker ✔ PoseReader
Armature Actuator Gb_q7
Destination ✔ PointReader
Differential Driver Actuator: Linear and angular speed (V, W) actuator ✔ TwistReader GENPOS_CART_SPEED ✔ db entries
Force/Torque Motion Controller ✔ WrenchReader
Gripper
Joystick Actuator
KUKA LWR Gb_q7
Keyboard Actuator
Light ✔ BoolReader ✔ db entries
Linear and angular speed (V, W) actuator ✔ TwistReader GENPOS_CART_SPEED ✔ db entries
Linear and angular speed (Vx, Vy, W) actuator ✔ TwistReader
Mitsubishi PA-10
Mocap controller NIUT_HUMAN_LIST
Orientation Actuator ✔ QuaternionReader
Pan-Tilt Unit ✔ Vector3Reader POM_SE_POSTER or PLATINE_AXIS_STR
Rotorcraft Velocity motion controller ✔ TwistReader
Rotorcraft Waypoint motion controller ✔ PoseReader
Rotorcraft attitude motion controller
Sound
Stabilized Flight for quadrotor
Steer/Force Actuator ✔ db entries
Teleport ✔ PoseReader ✔ db entries
Waypoint

Configuring Morse to export data in a specified way

To configure a component to export or import data using a specific method, you need to call the morse.builder.abstractcomponent.AbstractComponent.add_stream() on your component. The process is explained in more details and with numerous examples in the following tutorials:

Extending middleware support of MORSE

The following documentation explains how to add a specific datastream handler for one existing middleware. If you want to add a completely new middleware, you can refer to these instructions.

Bindings

We provide some bindings to access the different components using the socket interface and to control the simulation. At the moment, we only have bindings for the Python language but contributions are welcome! These bindings are documented here.

For other middlewares, you can, of course, rely on standard tools provided by these middlewares (that the main purpose of the middleware layer after all!).