You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: source/Concepts/Advanced/About-Internal-Interfaces.rst
+6-1Lines changed: 6 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -65,6 +65,8 @@ In this context, type support means: meta data or functions that are specific to
65
65
The type support for a given message might include things like a list of the names and types for each field in the message.
66
66
It might also contain a reference to code that can perform particular tasks for that type, e.g. publish a message.
67
67
68
+
.. _internal-interfaces_static-type-support:
69
+
68
70
Static Type Support
69
71
^^^^^^^^^^^^^^^^^^^
70
72
@@ -84,6 +86,8 @@ For example, consider the Fast DDS implementation, which has a package called ``
84
86
This package is responsible for generating code to handle things like converting a C++ message object into a serialized octet buffer to be written over the network.
85
87
This code, while specific to Fast DDS, is still not exposed to the user because of the abstraction in the type support code.
86
88
89
+
.. _internal-interfaces_dynamic-type-support:
90
+
87
91
Dynamic Type Support
88
92
^^^^^^^^^^^^^^^^^^^^
89
93
@@ -137,13 +141,14 @@ The ``rmw`` repository
137
141
138
142
The ROS middleware interface (``rmw`` |API|) is the minimal set of primitive middleware capabilities needed to build ROS on top.
139
143
Providers of different middleware implementations must implement this interface in order to support the entire ROS stack on top.
140
-
Currently all of the middleware implementations are for different DDS vendors.
144
+
Currently most of the middleware implementations are for different DDS vendors.
141
145
142
146
The ``rmw`` |API| is located in the `ros2/rmw <https://github.com/ros2/rmw>`_ repository.
143
147
The ``rmw`` |package| contains the C headers which define the interface, the implementation of which is provided by the various |packages| of rmw implementations for different DDS vendors.
144
148
145
149
For a definition of the ``rmw`` |API|, see `the rmw docs <http://docs.ros.org/en/{DISTRO}/p/rmw/>`_.
146
150
151
+
For a more practical in-depth overview of how ROS 2 integrates with different middleware implementations, see :doc:`the middleware implementation tutorial <../../Tutorials/Advanced/Creating-An-RMW-Implementation>`.
ROS middleware implementations are sets of |packages| that implement some of the internal ROS interfaces, e.g. the ``rmw``, ``rcl``, and ``rosidl`` |APIs|.
14
14
15
+
<<<<<<< HEAD
15
16
Common Packages for DDS Middleware Packages
16
17
-------------------------------------------
18
+
=======
19
+
For a more practical in-depth overview of how ROS 2 integrates with different middleware implementations, see :doc:`the middleware implementation tutorial <../../Tutorials/Advanced/Creating-An-RMW-Implementation>`.
20
+
21
+
Common Packages for DDS Middleware Implementations
All of the current ROS middleware implementations are based on full or partial DDS implementations.
19
26
For example, there is a middleware implementation that uses RTI's Connext DDS and an implementation which uses eProsima's Fast DDS.
@@ -26,7 +33,13 @@ In the `ros2/rosidl_dds <https://github.com/ros2/rosidl_dds>`_ repository on |Gi
26
33
The ``rosidl_generator_dds_idl`` |package| generates a DDS ``.idl`` file for each ``rosidl`` file, e.g. ``.msg`` file, defined by |packages| containing messages.
27
34
Currently DDS based ROS middleware implementations make use of this generator's output ``.idl`` files to generate pre-compiled type support that is vendor specific.
A ROS middleware implementation is typically made up of a few |packages| in a single repository:
@@ -54,7 +67,55 @@ As such, rmw implementations may provide support for the X-Types standard, and/o
54
67
55
68
As an example of an rmw implementation repository, the ``Eclipse Cyclone DDS`` ROS middleware implementation is on |GitHub|_ at `ros2/rmw_cyclonedds <https://github.com/ros2/rmw_cyclonedds>`_.
56
69
70
+
<<<<<<< HEAD
57
71
The rmw implementation for ``Fast DDS`` is on |GitHub|_ at `ros2/rmw_fastrtps_cpp <https://github.com/ros2/rmw_fastrtps_cpp>`_.
72
+
=======
73
+
|The ``Eclipse Cyclone DDS`` ROS middleware implementation is on |GitHub|_ at `ros2/rmw_cyclonedds <https://github.com/ros2/rmw_cyclonedds>`_.
74
+
|The RMW implementation for ``Fast DDS`` is on |GitHub|_ at `ros2/rmw_fastrtps_cpp <https://github.com/ros2/rmw_fastrtps_cpp>`_.
75
+
|The RMW implementation for ``Connext DDS`` is on |GitHub|_ at `ros2/rmw_connextdds <https://github.com/ros2/rmw_connextdds>`_.
76
+
|The RMW implementation for ``GurumDDS`` is on |GitHub|_ at `ros/rmw_gurumdds <https://github.com/ros2/rmw_gurumdds>`_.
77
+
78
+
.. _about-middleware-impls_struct_zenoh:
79
+
80
+
Structure of the Zenoh Middleware Implementation
81
+
------------------------------------------------
82
+
83
+
For data to be sent and received over Zenoh using ROS 2, the middleware package, ``rmw_zenoh_cpp``, maps the ROS 2 middleware |API| to Zenoh's |APIs| using `zenoh-c <https://github.com/eclipse-zenoh/zenoh-c>`_.
84
+
Unlike DDS-based implementations, this middleware relies on a Zenoh router to discover peers and pass discovery information along via Zenoh's 'gossip scouting'.
85
+
Therefore, ``rmw_zenoh_cpp`` requires the Zenoh router (``zenohd``) to be active on the local system or reachable over the network.
86
+
87
+
In ROS 2's Zenoh integration, each `context <https://docs.ros.org/en/rolling/p/rclcpp/generated/classrclcpp_1_1Context.html>`_ is mapped to a single Zenoh session.
88
+
This session is shared across all publishers, subscriptions, services, and clients within that context.
89
+
The context maintains a local graph cache that tracks the network topology of ROS 2 entities and the presence of each entity is managed through unique liveliness tokens issued on creation and revoked during destruction.
90
+
91
+
Here is an inexhaustive list of how the Zenoh middleware |API| adapts ROS 2 entities over its communication protocol:
92
+
93
+
**Nodes:** Nodes in ROS 2 have been referred to as "units of computation" in a ROS 2 graph, whereby each node should be responsible for a single, modular purpose.
94
+
Zenoh has no direct counterpart to the node, so ``rmw_zenoh_cpp`` creates no Zenoh entities for them.
95
+
However, when a node is created through the RMW |API|, a liveliness token of type ``NN`` is declared.
96
+
97
+
**Publishers:** A ROS 2 publisher sends data to a specific topic.
98
+
Because Zenoh publishers function very similarly with Keys, ``rmw_zenoh_cpp`` maps these entities directly.
99
+
When a publisher is created through the RMW |API|, a liveliness token of type ``MP`` is declared.
100
+
101
+
**Subscribers:** Subscribers in ROS 2 listen on topics for new data.
102
+
They are conceptually equivalent to subscribers in Zenoh so ``rmw_zenoh_cpp`` maps these entities directly.
103
+
When new data arrives, Zenoh's middleware |package| invokes an internal callback that takes ownership of the data and signals availability to ``rmw_wait``.
104
+
When a subscriber is created through the RMW |API|, a liveliness token of type ``MS`` is declared.
ROS 2 nodes use ``rmw_create_service`` to advertise services to the network and the Zenoh |API|, ``z_declare_queryable``, is used to create the server-side representation of a ROS 2 service.
114
+
``rmw_take_request`` delivers the query to the use callback to be processed and after the computation is complete, ``rmw_send_reponse`` returns the result to the requester.
115
+
When a server is created, a liveliness token of type ``SS`` is declared.
116
+
117
+
The RMW implementation for ``Zenoh`` is on |GitHub|_ at `ros2/rmw_zenoh <https://github.com/ros2/rmw_zenoh/tree/rolling>`_.
Copy file name to clipboardExpand all lines: source/Concepts/Intermediate/About-Quality-of-Service-Settings.rst
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -121,6 +121,7 @@ The currently defined QoS profiles are:
121
121
`Click here <https://github.com/ros2/rmw/blob/{REPOS_FILE_BRANCH}/rmw/include/rmw/qos_profiles.h>`__ for the specific policies in use for the above profiles.
122
122
The settings in these profiles are subject to further tweaks, based on the feedback from the community.
123
123
124
+
.. _about-qos_compatibilities:
124
125
125
126
QoS compatibilities
126
127
-------------------
@@ -279,6 +280,7 @@ Comparison to ROS 1
279
280
Historically in ROS 1, any publisher and subscriber with the same message type on the same topic would be connected.
280
281
The possibility of incompatible requested and offered QoS profiles is something new to be aware of when using ROS 2.
281
282
283
+
.. _about-qos_qos-events:
282
284
283
285
QoS events
284
286
----------
@@ -314,6 +316,7 @@ Developers may subscribe to the following QoS events that are associated with a
314
316
315
317
The subscription has encountered a publisher on the same topic that is offering a QoS profile that does not satisfy the requested QoS profile, resulting in no connection between the subscription and that publisher.
0 commit comments