Skip to content

Commit e831830

Browse files
christophebedardgavanderhoornwjwwoodclalancette
authored
Add rmw implementation tutorial (#5927)
Signed-off-by: Christophe Bedard <[email protected]> Co-authored-by: gavanderhoorn <[email protected]> Co-authored-by: William Woodall <[email protected]> Co-authored-by: Chris Lalancette <[email protected]>
1 parent eab5b4e commit e831830

File tree

7 files changed

+499
-2
lines changed

7 files changed

+499
-2
lines changed

source/Concepts/Advanced/About-Internal-Interfaces.rst

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ In this context, type support means: meta data or functions that are specific to
6565
The type support for a given message might include things like a list of the names and types for each field in the message.
6666
It might also contain a reference to code that can perform particular tasks for that type, e.g. publish a message.
6767

68+
.. _internal-interfaces_static-type-support:
69+
6870
Static Type Support
6971
^^^^^^^^^^^^^^^^^^^
7072

@@ -84,6 +86,8 @@ For example, consider the Fast DDS implementation, which has a package called ``
8486
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.
8587
This code, while specific to Fast DDS, is still not exposed to the user because of the abstraction in the type support code.
8688

89+
.. _internal-interfaces_dynamic-type-support:
90+
8791
Dynamic Type Support
8892
^^^^^^^^^^^^^^^^^^^^
8993

@@ -137,13 +141,14 @@ The ``rmw`` repository
137141

138142
The ROS middleware interface (``rmw`` |API|) is the minimal set of primitive middleware capabilities needed to build ROS on top.
139143
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.
141145

142146
The ``rmw`` |API| is located in the `ros2/rmw <https://github.com/ros2/rmw>`_ repository.
143147
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.
144148

145149
For a definition of the ``rmw`` |API|, see `the rmw docs <http://docs.ros.org/en/{DISTRO}/p/rmw/>`_.
146150

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>`.
147152

148153
The ``rosidl`` repository
149154
-------------------------

source/Concepts/Advanced/About-Middleware-Implementations.rst

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ ROS middleware implementations are sets of |packages| that provide the underlyin
1414
These packages interact with core ROS 2 interfaces such as the ``rmw``, ``rcl``, and ``rosidl`` |APIs| to integrate with external protocols like Zenoh, DDS, or others.
1515
For example, ``rmw_fastrtps_cpp`` adapts eProsima's Fast DDS implementation to ROS 2's middleware |API|, while ``rmw_zenoh_cpp`` provides similar integration for the Zenoh protocol.
1616

17+
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>`.
18+
1719
Common Packages for DDS Middleware Implementations
1820
--------------------------------------------------
1921

@@ -29,6 +31,8 @@ The ``rosidl_generator_dds_idl`` |package| generates a DDS ``.idl`` file for eac
2931
These interface definition files specify the data structures used for topics, services, and actions in ROS 2.
3032
DDS-based ROS middleware implementations then use these generated ``.idl`` files to create vendor-specific pre-compiled type support.
3133

34+
.. _about-middleware-impls_struct_dds:
35+
3236
Structure of DDS Middleware Implementations
3337
-------------------------------------------
3438

@@ -62,6 +66,8 @@ For examples of example of DDS RMW implementation repositories,
6266
| The RMW implementation for ``Connext DDS`` is on |GitHub|_ at `ros2/rmw_connextdds <https://github.com/ros2/rmw_connextdds>`_.
6367
| The RMW implementation for ``GurumDDS`` is on |GitHub|_ at `ros/rmw_gurumdds <https://github.com/ros2/rmw_gurumdds>`_.
6468
69+
.. _about-middleware-impls_struct_zenoh:
70+
6571
Structure of the Zenoh Middleware Implementation
6672
------------------------------------------------
6773

@@ -99,6 +105,6 @@ ROS 2 nodes use ``rmw_create_service`` to advertise services to the network and
99105
``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.
100106
When a server is created, a liveliness token of type ``SS`` is declared.
101107

102-
The RMW implementation for ``Zenoh`` is on |GitHub|_ at `ros/rmw_zenoh <https://github.com/ros2/rmw_zenoh/tree/rolling>`_.
108+
The RMW implementation for ``Zenoh`` is on |GitHub|_ at `ros2/rmw_zenoh <https://github.com/ros2/rmw_zenoh/tree/rolling>`_.
103109

104110

source/Concepts/Intermediate/About-Quality-of-Service-Settings.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ The currently defined QoS profiles are:
121121
`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.
122122
The settings in these profiles are subject to further tweaks, based on the feedback from the community.
123123

124+
.. _about-qos_compatibilities:
124125

125126
QoS compatibilities
126127
-------------------
@@ -279,6 +280,7 @@ Comparison to ROS 1
279280
Historically in ROS 1, any publisher and subscriber with the same message type on the same topic would be connected.
280281
The possibility of incompatible requested and offered QoS profiles is something new to be aware of when using ROS 2.
281282

283+
.. _about-qos_qos-events:
282284

283285
QoS events
284286
----------
@@ -314,6 +316,7 @@ Developers may subscribe to the following QoS events that are associated with a
314316

315317
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.
316318

319+
.. _about-qos_matched-events:
317320

318321
Matched events
319322
--------------

source/How-To-Guides/Ament-CMake-Documentation.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,8 @@ To do so:
442442
Ament extensions work by defining a variable containing the name of the extension point and filling it with the macros to be executed.
443443
Upon calling ``ament_execute_extensions``, the scripts defined in the variable are then executed one after another.
444444

445+
.. _ament-cmake-doc_adding-resources:
446+
445447
Adding resources
446448
----------------
447449

source/How-To-Guides/DDS-tuning.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ Fast RTPS tuning
9696

9797
See the solutions under :ref:`Cross-vendor tuning <cross-vendor-tuning>`.
9898

99+
.. _cyclonedds-tuning:
100+
99101
Cyclone DDS tuning
100102
------------------
101103

source/Tutorials/Advanced.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ Advanced
1717
Advanced/Reading-From-A-Bag-File-CPP
1818
Advanced/Reading-From-A-Bag-File-Python
1919
Advanced/ROS2-Tracing-Trace-and-Analyze
20+
Advanced/Creating-An-RMW-Implementation
2021
Advanced/Simulators/Simulation-Main
2122
Advanced/Security/Security-Main

0 commit comments

Comments
 (0)