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 provides *middleware* layers which bridge the gap, both for services with the concept of :doc:`overlays` and for datastreams with the concept of `datastream handler` (this page). .. _compatibility-matrix: Features compatibility matrix ----------------------------- The table below summarizes the level of support of MORSE features for each middleware. Further information can be found by 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. .. csv-table:: :header-rows: 1 :stub-columns: 1 :file: compatibility_matrix.csv 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 :py:meth:`morse.builder.abstractcomponent.AbstractComponent.add_stream` on your component. The process is explained in more detail and with numerous examples in the following tutorials: - :doc:`beginner_tutorials/tutorial` - :doc:`beginner_tutorials/yarp_tutorial` - :doc:`beginner_tutorials/ros_tutorial` - :doc:`advanced_tutorials/hla_tutorial` Extending middleware support of MORSE ------------------------------------- The following :doc:`documentation <../dev/adding_datastream_handler>` 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 :doc:`instructions <../dev/new_middleware>`. Bindings -------- We provide some bindings to access the different components using the :tag:`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 :doc:`here <../pymorse>`. For other middlewares, you can, of course, rely on standard tools provided by these middlewares (that's the main purpose of the middleware layer after all!).