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 |
mavlink |
hla |
text |
|
---|---|---|---|---|---|---|---|---|
Support notes | 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 | ✔ | ✘ | ✘ | ✘ | ✘ | ✔ |
Airspeed | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Armature Pose Sensor | ✔ | ✔ JointStatePublisher | ✔ | ✘ | ✘ | ✘ | ✘ | ✔ |
Barometer | ✔ | ✘ | ✔ | ✘ | ✘ | ✘ | ✘ | ✔ |
Battery Sensor | ✔ | ✔ Float32Publisher | ✔ | ✘ | ✘ | ✘ | ✘ | ✔ |
Clock | ✔ | ✔ ClockPublisher | ✔ | ✘ | ✔ | ✘ | ✘ | ✔ |
Collision | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Compound Sensor | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Depth camera (raw Z-Buffer) | ✔ a JSON-Encoded message for the DepthCamera | ✔ DepthCameraPublisher | ✘ | ✔ Spix3DImage | ✘ | ✘ | ✘ | ✘ |
Depth camera (raw Z-Buffer) | ✔ a JSON-Encoded message for the DepthCamera | ✔ DepthCameraPublisher | ✔ yarp::ImageFloat | ✔ ViamImageBank | ✘ | ✘ | ✘ | ✘ |
Depth camera (raw Z-Buffer) | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Generic Camera | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Gyroscope | ✔ | ✔ StringPublisher | ✔ | ✔ POM_ME_POS or POM_POS | ✔ db entries | ✘ | ✘ | ✔ |
Hokuyo | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Human Posture | ✔ | ✘ | ✔ | ✔ STRUCT_SPARK_CONFIGURATION | ✘ | ✘ | ✘ | ✔ |
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 | ✘ | ✔ LOCAL_POSITION_NED | ✘ | ✔ |
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 | ✘ | ✘ | ✘ |
Drag | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
External Force/Torque | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
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 | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Orientation Actuator | ✔ | ✔ QuaternionReader | ✔ | ✘ | ✘ | ✘ | ✘ | ✘ |
Pan-Tilt Unit | ✔ | ✔ Vector3Reader | ✔ | ✔ POM_SE_POSTER or PLATINE_AXIS_STR | ✘ | ✘ | ✘ | ✘ |
Quadrotor dynamic controller | ✔ | ✘ | ✔ | ✘ | ✘ | ✘ | ✘ | ✘ |
Rotorcraft Velocity motion controller | ✔ | ✔ TwistReader | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Rotorcraft Waypoint motion controller | ✔ | ✔ PoseReader | ✔ | ✘ | ✘ | ✔ SET_POSITION_TARGET_LOCAL_NED | ✘ | ✘ |
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!).