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.
|
|
|
|
|
|
|
|
|
---|---|---|---|---|---|---|---|---|
Communications |
||||||||
Datastreams |
✔ |
✔ (topics) |
✔ (ports) |
✔ (posters) |
✔ (database) |
✔ |
✔ (attribute update) |
✔ |
Services |
✔ |
✔ (services + actions) |
✔ |
✔ (requests) |
✘ |
✘ |
✘ |
✘ |
Sensors |
||||||||
✔ |
✔ TwistPublisher |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✔ JointStatePublisher |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
|
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
|
✔ |
✔ Float32Publisher |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
|
✔ |
✔ ClockPublisher |
✔ |
✘ |
✔ |
✘ |
✘ |
✔ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ a JSON-Encoded message for the DepthCamera |
✔ DepthCameraPublisher |
✘ |
✘ |
✘ |
✘ |
✘ |
||
✔ a JSON-Encoded message for the DepthCamera |
✔ DepthCameraPublisher |
✔ yarp::ImageFloat |
✘ |
✘ |
✘ |
✘ |
||
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✔ StringPublisher |
✔ |
✔ POM_ME_POS or POM_POS |
✔ db entries |
✘ |
✘ |
✔ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✔ |
||
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
Laser Scanner Sensors (raw level ) |
✔ |
✔ LaserScanPublisher or PointCloud2Publisher |
✔ yarp::Bottle |
✘ |
✔ db entries |
✘ |
✘ |
✘ |
Laser Scanner Sensors (rssi level ) |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
Odometry (raw level ) |
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
Odometry (differential level ) |
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
Odometry (integrated level ) |
✔ |
✔ OdometryPublisher |
✔ |
✔ POM_ME_POS or POM_POS |
✘ |
✘ |
✔ |
|
✔ |
✔ JointStatePublisher |
✔ |
✘ |
✘ |
✘ |
✔ |
||
✔ |
✔ PoseStampedPublisher or TFPublisher |
✔ |
✔ POM_ME_POS or POM_POS |
✔ db entries |
✘ |
✘ |
✔ |
|
✔ |
✔ StringPublisher |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
|
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✔ |
||
✔ |
✔ SemanticCameraPublisher or SemanticCameraPublisherLisp |
✔ |
✘ |
✘ |
✘ |
✘ |
||
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
||
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
|
✔ |
✔ TwistStampedPublisher |
✔ |
✘ |
✘ |
✘ |
✘ |
✔ |
|
✔ base64 encoded RGBA image |
✔ VideoCameraPublisher |
✔ yarp::ImageRGBA |
✘ |
✘ |
✘ |
✘ |
||
Actuators |
||||||||
✔ |
✔ PoseReader |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✘ |
✔ |
✔ Gb_q7 |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✔ PointReader |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
Differential Driver Actuator: Linear and angular speed (V, W) actuator |
✔ |
✔ TwistReader |
✔ |
✔ db entries |
✘ |
✘ |
✘ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✔ WrenchReader |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✘ |
✔ |
✔ Gb_q7 |
✘ |
✘ |
✘ |
✘ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✔ BoolReader |
✔ |
✘ |
✔ db entries |
✘ |
✘ |
✘ |
|
✔ |
✔ TwistReader |
✔ |
✔ db entries |
✘ |
✘ |
✘ |
||
✔ |
✔ TwistReader |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✔ QuaternionReader |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✔ Vector3Reader |
✔ |
✘ |
✘ |
✘ |
✘ |
||
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✔ TwistReader |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✔ PoseReader |
✔ |
✘ |
✘ |
✘ |
✘ |
||
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
|
✔ |
✘ |
✔ |
✘ |
✔ db entries |
✘ |
✘ |
✘ |
|
✔ |
✔ PoseReader |
✔ |
✘ |
✔ db entries |
✘ |
✘ |
✘ |
|
✔ |
✘ |
✔ |
✘ |
✘ |
✘ |
✘ |
✘ |
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!).