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).
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.
Features | text | socket | yarp | ros | pocolibs | moos |
---|---|---|---|---|---|---|
Communications | ||||||
Datastreams | ✔ | ✔ | ✔ (ports) | ✔ (topics) | ✔ (posters) | ✔ (database) |
Services | ✘ | ✔ | ✔ | ✔ (services + actions) | ✔ (requests) | ✘ |
Sensors | ||||||
Accelerometer | ✔ | ✔ | ✔ | ✔ TwistPublisher | ✘ | ✘ |
Armature Pose Sensor | ✔ | ✔ | ✔ | ✔ JointStatePublisher | ✘ | ✘ |
Battery Sensor | ✔ | ✔ | ✔ | ✔ Float32Publisher | ✘ | ✘ |
Collision | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Compound Sensor | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Depth (XYZ) camera | ✘ | ✘ | ✘ | ✔ DepthCameraPublisher | ✔ Spix3DImage | ✘ |
Depth (XYZ) camera | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Depth (XYZ) camera | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
GPS | ✔ | ✔ | ✔ | ✔ NavSatFixPublisher | ✔ POM_ME_POS or POM_POS | ✔ db entries |
Generic Camera | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Gyroscope | ✔ | ✔ | ✔ | ✔ StringPublisher | ✔ POM_ME_POS or POM_POS | ✔ db entries |
Human Posture | ✔ | ✔ | ✔ | ✘ | ✔ STRUCT_SPARK_CONFIGURATION | ✘ |
Human Posture (kinect version) | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Inertial measurement unit | ✔ | ✔ | ✔ | ✔ ImuPublisher | ✘ | ✔ db entries |
Kinect | ✘ | ✘ | ✘ | ✔ XYZRGBPublisher | ✘ | ✘ |
Laser Scanner Sensors | ✘ | ✔ | ✔ yarp::Bottle | ✔ LaserScanPublisher or PointCloud2Publisher | ✘ | ✔ db entries |
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 | ✘ | ✘ |
Search And Rescue sensor | ✔ | ✔ | ✔ | ✘ | ✔ GENPOS_TRAJ_POINTS | ✘ |
Semantic camera | ✘ | ✔ | ✔ | ✔ SemanticCameraPublisher or SemanticCameraPublisherLisp | ✔ VimanObjectPublicArray | ✘ |
Stereo Camera Unit | ✘ | ✘ | ✘ | ✘ | ✔ ViamImageBank | ✘ |
Thermometer Sensor | ✔ | ✔ | ✔ | ✘ | ✘ | ✘ |
Velocity | ✔ | ✔ | ✔ | ✔ TwistStampedPublisher | ✘ | ✘ |
Video camera | ✘ | ✔ a JSON-encoded image | ✔ yarp::ImageRGBA | ✔ VideoCameraPublisher | ✔ ViamImageBank | ✘ |
Actuators | ||||||
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 | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Keyboard Actuator | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Light | ✘ | ✔ | ✔ | ✔ BoolReader | ✘ | ✘ |
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 Waypoint motion controller | ✘ | ✔ | ✔ | ✔ PoseReader | ✘ | ✘ |
Rotorcraft attitude motion controller | ✘ | ✔ | ✔ | ✘ | ✘ | ✘ |
Sound | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ |
Stabilized Flight for quadrotor | ✘ | ✔ | ✔ | ✘ | ✘ | ✘ |
Steer/Force Actuator | ✘ | ✔ | ✔ | ✘ | ✘ | ✔ db entries |
Teleport | ✘ | ✔ | ✔ | ✔ PoseReader | ✘ | ✘ |
Waypoint | ✘ | ✔ | ✔ | ✘ | ✘ | ✘ |
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:
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.
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!).