diff --git a/source/Releases/Release-Lyrical-Luth.rst b/source/Releases/Release-Lyrical-Luth.rst
index 4addbe9b939..299bf562163 100644
--- a/source/Releases/Release-Lyrical-Luth.rst
+++ b/source/Releases/Release-Lyrical-Luth.rst
@@ -5,10 +5,6 @@
Lyrical Luth (codename 'lyrical'; May, 2026)
============================================
-.. contents:: Table of Contents
- :depth: 2
- :local:
-
*Lyrical Luth* is the twelfth release of ROS 2.
What follows is highlights of the important changes and features in Lyrical Luth since the last release.
diff --git a/source/Tutorials/Advanced/Creating-An-RMW-Implementation.rst b/source/Tutorials/Advanced/Creating-An-RMW-Implementation.rst
index 38125cd07e8..37573e98eb4 100644
--- a/source/Tutorials/Advanced/Creating-An-RMW-Implementation.rst
+++ b/source/Tutorials/Advanced/Creating-An-RMW-Implementation.rst
@@ -7,9 +7,6 @@ Creating an ``rmw`` implementation
**Time:** 30+ minutes
-.. contents:: Table of Contents
- :local:
-
Introduction
------------
diff --git a/source/Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects.rst b/source/Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects.rst
index b1be402ee26..ea64b54bf9a 100644
--- a/source/Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects.rst
+++ b/source/Tutorials/Intermediate/Launch/Using-ROS2-Launch-For-Large-Projects.rst
@@ -65,23 +65,26 @@ To do this, let's create a ``launch_turtlesim_launch`` file in the ``/launch`` f
Earlier launch system versions may not support ``let`` inside ``include`` statements and require ``arg`` instead.
The syntax is the same: ``name`` and ``value`` attributes remain unchanged (e.g., ````).
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
Copy and paste the complete code into the ``launch/launch_turtlesim_launch.xml`` file:
.. literalinclude:: launch/launch_turtlesim_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
Copy and paste the complete code into the ``launch/launch_turtlesim_launch.yaml`` file:
.. literalinclude:: launch/launch_turtlesim_launch.yaml
:language: yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
Copy and paste the complete code into the ``launch/launch_turtlesim_launch.py`` file:
@@ -108,23 +111,26 @@ However, there are cases when some nodes or launch files have to be launched sep
We will begin by writing a launch file that will start our first turtlesim simulation.
First, create a new file called ``turtlesim_world_1_launch``.
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
Copy and paste the complete code into the ``launch/turtlesim_world_1_launch.xml`` file:
.. literalinclude:: launch/turtlesim_world_1_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
Copy and paste the complete code into the ``launch/turtlesim_world_1_launch.yaml`` file:
.. literalinclude:: launch/turtlesim_world_1_launch.yaml
:language: yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
Copy and paste the complete code into the ``launch/turtlesim_world_1_launch.py`` file:
@@ -139,23 +145,26 @@ This launch file starts the ``turtlesim_node`` node, which starts the turtlesim
In the second launch, we will start a second turtlesim simulation with a different configuration.
Now create a ``turtlesim_world_2_launch`` file.
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
Copy and paste the complete code into the ``launch/turtlesim_world_2_launch.xml`` file:
.. literalinclude:: launch/turtlesim_world_2_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
Copy and paste the complete code into the ``launch/turtlesim_world_2_launch.yaml`` file:
.. literalinclude:: launch/turtlesim_world_2_launch.yaml
:language: yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
Copy and paste the complete code into the ``launch/turtlesim_world_2_launch.py`` file:
@@ -190,9 +199,10 @@ A solution is to use wildcard characters, which act as substitutions for unknown
Now let's create a new ``turtlesim_world_3_launch`` file similar to ``turtlesim_world_2_launch`` to include one more ``turtlesim_node`` node in a new namespace ``turtlesim3``:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
Copy and paste the complete code into the ``launch/turtlesim_world_3_launch.xml`` file:
@@ -200,7 +210,8 @@ Now let's create a new ``turtlesim_world_3_launch`` file similar to ``turtlesim_
:language: xml
:emphasize-lines: 3
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
Copy and paste the complete code into the ``launch/turtlesim_world_3_launch.yaml`` file:
@@ -208,7 +219,8 @@ Now let's create a new ``turtlesim_world_3_launch`` file similar to ``turtlesim_
:language: yaml
:emphasize-lines: 7
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
Copy and paste the complete code into the ``launch/turtlesim_world_3_launch.py`` file:
@@ -261,9 +273,10 @@ Every nested node will inherit that namespace automatically.
To do that, firstly, we need to remove the ``namespace='turtlesim2'`` line from the ``turtlesim_world_2_launch`` file.
Afterwards, we need to update the ``launch_turtlesim_launch`` to change the include statement to the following:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: xml
@@ -272,7 +285,8 @@ Afterwards, we need to update the ``launch_turtlesim_launch`` to change the incl
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: yaml
@@ -282,7 +296,8 @@ Afterwards, we need to update the ``launch_turtlesim_launch`` to change the incl
- include:
file: "$(find-pkg-share launch_tutorial)/launch/turtlesim_world_2_launch.yaml"
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: python
@@ -304,23 +319,26 @@ As a result, each node in the ``turtlesim_world_2_launch`` launch description wi
Now create a ``broadcaster_listener_launch`` file.
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
Copy and paste the complete code into the ``launch/broadcaster_listener_launch.xml`` file:
.. literalinclude:: launch/broadcaster_listener_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
Copy and paste the complete code into the ``launch/broadcaster_listener_launch.yaml`` file:
.. literalinclude:: launch/broadcaster_listener_launch.yaml
:language: yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
Copy and paste the complete code into the ``launch/broadcaster_listener_launch.py`` file:
@@ -341,21 +359,24 @@ We also start a ``turtle_tf2_listener`` node and set its ``target_frame`` parame
Recall that we called the ``broadcaster_listener_launch`` file in our top-level launch file.
In addition to that, we have passed it ``target_frame`` launch argument as shown below:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/launch_turtlesim_launch.xml
:language: xml
:lines: 5-7
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/launch_turtlesim_launch.yaml
:language: yaml
:lines: 8-12
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/launch_turtlesim_launch.py
:language: python
@@ -370,23 +391,26 @@ This will assign ``target_frame`` its default value, which is ``turtle1``.
Now create a ``mimic_launch`` file.
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
Copy and paste the complete code into the ``launch/mimic_launch.xml`` file:
.. literalinclude:: launch/mimic_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
Copy and paste the complete code into the ``launch/mimic_launch.yaml`` file:
.. literalinclude:: launch/mimic_launch.yaml
:language: yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
Copy and paste the complete code into the ``launch/mimic_launch.py`` file:
@@ -404,23 +428,26 @@ This way ``turtle1`` in our ``turtlesim2`` simulation world will follow ``turtle
Let's now create a file called ``turtlesim_rviz_launch``.
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
Copy and paste the complete code into the ``launch/turtlesim_rviz_launch.xml`` file:
.. literalinclude:: launch/turtlesim_rviz_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
Copy and paste the complete code into the ``launch/turtlesim_rviz_launch.yaml`` file:
.. literalinclude:: launch/turtlesim_rviz_launch.yaml
:language: yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
Copy and paste the complete code into the ``launch/turtlesim_rviz_launch.py`` file:
@@ -435,23 +462,26 @@ This RViz configuration will set the world frame, enable TF visualization, and s
Let's now create the last launch file called ``fixed_broadcaster_launch`` in our package.
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
Copy and paste the complete code into the ``launch/fixed_broadcaster_launch.xml`` file:
.. literalinclude:: launch/fixed_broadcaster_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
Copy and paste the complete code into the ``launch/fixed_broadcaster_launch.yaml`` file:
.. literalinclude:: launch/fixed_broadcaster_launch.yaml
:language: yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
Copy and paste the complete code into the ``launch/fixed_broadcaster_launch.py`` file:
@@ -494,21 +524,24 @@ The ``data_files`` field should now look like this:
To finally see the result of our code, build the package and launch the top-level launch file using the following command:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch launch_tutorial launch_turtlesim_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch launch_tutorial launch_turtlesim_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-CPP.rst b/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-CPP.rst
index 3fbc67bdc51..f3c30bb883f 100644
--- a/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-CPP.rst
+++ b/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-CPP.rst
@@ -399,21 +399,24 @@ Navigate back to the root of your workspace, ``ros2_ws``, and rebuild your updat
Then source the setup files:
-.. tabs::
+.. tab-set::
- .. group-tab:: Linux
+ .. tab-item:: Linux
+ :sync: Linux
.. code-block:: console
$ . install/setup.bash
- .. group-tab:: macOS
+ .. tab-item:: macOS
+ :sync: macOS
.. code-block:: console
$ . install/setup.bash
- .. group-tab:: Windows
+ .. tab-item:: Windows
+ :sync: Windows
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-Python.rst b/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-Python.rst
index cdea50ceef8..430fd847945 100644
--- a/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-Python.rst
+++ b/source/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-Python.rst
@@ -380,21 +380,24 @@ Navigate back to the root of your workspace, ``ros2_ws``, and rebuild your updat
Then source the setup files:
-.. tabs::
+.. tab-set::
- .. group-tab:: Linux
+ .. tab-item:: Linux
+ :sync: Linux
.. code-block:: console
$ . install/setup.bash
- .. group-tab:: macOS
+ .. tab-item:: macOS
+ :sync: macOS
.. code-block:: console
$ . install/setup.bash
- .. group-tab:: Windows
+ .. tab-item:: Windows
+ :sync: Windows
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Cpp.rst b/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Cpp.rst
index cfa4ba3788b..51f846e24c9 100644
--- a/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Cpp.rst
+++ b/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Cpp.rst
@@ -183,19 +183,22 @@ Finally, add the ``install(TARGETS…)`` section so ``ros2 run`` can find your e
Now let's create a launch file for this example.
With your text editor, create a new file called ``turtle_tf2_fixed_frame_demo_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``src/learning_tf2_cpp/launch`` directory, and add the following lines:
-.. tabs::
+.. tab-set::
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/turtle_tf2_fixed_frame_demo_launch.py
:language: python
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/turtle_tf2_fixed_frame_demo_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/turtle_tf2_fixed_frame_demo_launch.yaml
:language: yaml
@@ -204,21 +207,24 @@ This launch file imports the required packages and then creates a ``demo_nodes``
The last part of the code will add our fixed ``carrot1`` frame to the turtlesim world using our ``fixed_frame_tf2_broadcaster`` node.
-.. tabs::
+.. tab-set::
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/turtle_tf2_fixed_frame_demo_launch.py
:language: python
:lines: 14-18
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/turtle_tf2_fixed_frame_demo_launch.xml
:language: xml
:lines: 3-4
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/turtle_tf2_fixed_frame_demo_launch.yaml
:language: yaml
@@ -485,19 +491,22 @@ Finally, add the ``install(TARGETS…)`` section so ``ros2 run`` can find your e
To test this code, create a new launch file ``turtle_tf2_dynamic_frame_demo_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``src/learning_tf2_cpp/launch`` directory and paste the following code:
-.. tabs::
+.. tab-set::
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/turtle_tf2_dynamic_frame_demo_launch.py
:language: python
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/turtle_tf2_dynamic_frame_demo_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/turtle_tf2_dynamic_frame_demo_launch.yaml
:language: yaml
diff --git a/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Py.rst b/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Py.rst
index 547e15f062d..f666bfefef9 100644
--- a/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Py.rst
+++ b/source/Tutorials/Intermediate/Tf2/Adding-A-Frame-Py.rst
@@ -161,20 +161,23 @@ Add the following line between the ``'console_scripts':`` brackets:
Now let's create a launch file for this example.
With your text editor, create a new file called ``turtle_tf2_fixed_frame_demo_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``src/learning_tf2_py/launch`` directory, and add the following lines:
-.. tabs::
+.. tab-set::
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/py_turtle_tf2_fixed_frame_demo_launch.py
:name: turtle_tf2_fixed_frame_demo_launch.py
:language: python
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/py_turtle_tf2_fixed_frame_demo_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/py_turtle_tf2_fixed_frame_demo_launch.yaml
:language: yaml
@@ -183,21 +186,24 @@ This launch file imports the required packages and then creates a ``demo_nodes``
The last part of the code will add our fixed ``carrot1`` frame to the turtlesim world using our ``fixed_frame_tf2_broadcaster`` node.
-.. tabs::
+.. tab-set::
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/py_turtle_tf2_fixed_frame_demo_launch.py
:language: python
:lines: 14-18
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/py_turtle_tf2_fixed_frame_demo_launch.xml
:language: xml
:lines: 3-4
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/py_turtle_tf2_fixed_frame_demo_launch.yaml
:language: yaml
@@ -443,19 +449,22 @@ Add the following line between the ``'console_scripts':`` brackets:
To test this code, create a new launch file ``turtle_tf2_dynamic_frame_demo_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``src/learning_tf2_py/launch`` directory and paste the following code:
-.. tabs::
+.. tab-set::
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/py_turtle_tf2_dynamic_frame_demo_launch.py
:name: turtle_tf2_dynamic_frame_demo_launch.py
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/py_turtle_tf2_dynamic_frame_demo_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/py_turtle_tf2_dynamic_frame_demo_launch.yaml
:language: yaml
diff --git a/source/Tutorials/Intermediate/Tf2/Debugging-Tf2-Problems.rst b/source/Tutorials/Intermediate/Tf2/Debugging-Tf2-Problems.rst
index 27c55514b8e..13bdb5966b5 100644
--- a/source/Tutorials/Intermediate/Tf2/Debugging-Tf2-Problems.rst
+++ b/source/Tutorials/Intermediate/Tf2/Debugging-Tf2-Problems.rst
@@ -68,19 +68,22 @@ to
And save changes to the file.
In order to run this demo, we need to create a launch file ``start_tf2_debug_demo_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``launch`` subdirectory of package ``learning_tf2_cpp``:
-.. tabs::
+.. tab-set::
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/start_tf2_debug_demo_launch.py
:language: python
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/start_tf2_debug_demo_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/start_tf2_debug_demo_launch.yaml
:language: yaml
@@ -89,21 +92,24 @@ Don't forget to add the ``turtle_tf2_listener_debug`` executable to the ``CMakeL
Now let's run it to see what happens:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch learning_tf2_cpp start_tf2_debug_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch learning_tf2_cpp start_tf2_debug_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
@@ -179,9 +185,10 @@ To fix this bug, just replace ``turtle3`` with ``turtle2`` in line 65.
And now stop the running demo, build it, and run it again:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
@@ -191,7 +198,8 @@ And now stop the running demo, build it, and run it again:
time 1630223704.617054 but the latest data is at time 1630223704.616726, when looking up
transform from frame [turtle1] to frame [turtle2]
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
@@ -201,7 +209,8 @@ And now stop the running demo, build it, and run it again:
time 1630223704.617054 but the latest data is at time 1630223704.616726, when looking up
transform from frame [turtle1] to frame [turtle2]
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
@@ -251,21 +260,24 @@ In the new code we are asking for the transform between the turtles 100 millisec
It is usual to use a longer periods, just to make sure that the transform will arrive.
Stop the demo, build and run:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch turtle_tf2 start_tf2_debug_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch turtle_tf2 start_tf2_debug_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp.rst b/source/Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp.rst
index d83c5c34e13..98fd3700c39 100644
--- a/source/Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp.rst
+++ b/source/Tutorials/Intermediate/Tf2/Learning-About-Tf2-And-Time-Cpp.rst
@@ -104,21 +104,24 @@ It will block for up to that duration waiting for it to timeout.
You can now build the package and run the launch file.
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp.rst b/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp.rst
index 51956ab7287..51bf86e6297 100644
--- a/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp.rst
+++ b/source/Tutorials/Intermediate/Tf2/Time-Travel-With-Tf2-Cpp.rst
@@ -47,21 +47,24 @@ Now if you run this, during the first 5 seconds, the second turtle would not kno
But what happens after these 5 seconds?
Build the package then let's just give it a try:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
@@ -122,21 +125,24 @@ Checking the results
Build the package then let's run the simulation again, this time with the advanced time-travel API:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_fixed_frame_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Tf2/Using-Stamped-Datatypes-With-Tf2-Ros-MessageFilter.rst b/source/Tutorials/Intermediate/Tf2/Using-Stamped-Datatypes-With-Tf2-Ros-MessageFilter.rst
index ac2a494a9dd..1f05173ae4e 100644
--- a/source/Tutorials/Intermediate/Tf2/Using-Stamped-Datatypes-With-Tf2-Ros-MessageFilter.rst
+++ b/source/Tutorials/Intermediate/Tf2/Using-Stamped-Datatypes-With-Tf2-Ros-MessageFilter.rst
@@ -36,15 +36,17 @@ Prerequisites
This tutorial expects you to have ``turtle_tf2_py`` package installed.
-.. tabs::
+.. tab-set::
- .. group-tab:: Linux
+ .. tab-item:: Linux
+ :sync: Linux
.. code-block:: console
$ sudo apt install ros-{DISTRO}-turtle-tf2-py
- .. group-tab:: From Source
+ .. tab-item:: From Source
+ :sync: From Source
.. code-block:: console
@@ -235,19 +237,22 @@ Then we fill up the ``PointStamped`` messages of ``turtle3`` with incoming ``Pos
In order to run this demo, we need to create a launch file ``turtle_tf2_sensor_message_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``launch`` subdirectory of package ``learning_tf2_py``:
-.. tabs::
+.. tab-set::
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/turtle_tf2_sensor_message_launch.py
:language: python
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/turtle_tf2_sensor_message_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/turtle_tf2_sensor_message_launch.yaml
:language: yaml
@@ -695,21 +700,24 @@ Open a new terminal, navigate to the root of your workspace, and source the setu
First we need to run several nodes (including the broadcaster node of PointStamped messages) by launching the launch file ``turtle_tf2_sensor_message_launch``:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch learning_tf2_py turtle_tf2_sensor_message_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch learning_tf2_py turtle_tf2_sensor_message_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Cpp.rst b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Cpp.rst
index e7ef2aad070..62013419433 100644
--- a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Cpp.rst
+++ b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Cpp.rst
@@ -247,19 +247,22 @@ Now create a launch file for this demo.
Create a ``launch`` folder in the ``src/learning_tf2_cpp`` directory.
With your text editor, create a new file called ``turtle_tf2_demo_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``launch`` folder, and add the following lines:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/turtle_tf2_demo_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/turtle_tf2_demo_launch.yaml
:language: yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/turtle_tf2_demo_launch.py
:language: python
@@ -270,9 +273,10 @@ With your text editor, create a new file called ``turtle_tf2_demo_launch`` with
Let's examine the launch file structure.
Each format has its own way of setting up the launch file:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
XML launch files start with an XML declaration and a root ```` element.
@@ -280,7 +284,8 @@ Each format has its own way of setting up the launch file:
:language: xml
:lines: 1-2
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
YAML launch files start with a YAML version declaration and a ``launch:`` key.
@@ -288,7 +293,8 @@ Each format has its own way of setting up the launch file:
:language: yaml
:lines: 1-3
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
In Python launch files, we first import required modules from the ``launch`` and ``launch_ros`` packages.
It should be noted that ``launch`` is a generic launching framework (not ROS 2 specific) and ``launch_ros`` has ROS 2 specific things, like nodes that we import here.
@@ -299,21 +305,24 @@ Each format has its own way of setting up the launch file:
Now we run our nodes that start the turtlesim simulation and broadcast ``turtle1`` state to the tf2 using our ``turtle_tf2_broadcaster`` node.
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/turtle_tf2_demo_launch.xml
:language: xml
:lines: 3-6
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/turtle_tf2_demo_launch.yaml
:language: yaml
:lines: 4-9
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/turtle_tf2_demo_launch.py
:language: python
@@ -435,21 +444,24 @@ Open a new terminal, navigate to the root of your workspace, and source the setu
Now run the launch file that will start the turtlesim simulation node and ``turtle_tf2_broadcaster`` node:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py.rst b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py.rst
index 0d1f9f9f149..fac3eb9f29d 100644
--- a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py.rst
+++ b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Py.rst
@@ -254,21 +254,24 @@ Now create a launch file for this demo.
Create a ``launch`` folder in the ``src/learning_tf2_py`` directory.
With your text editor, create a new file called ``turtle_tf2_demo_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``launch`` folder, and add the following lines:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/py_turtle_tf2_demo_launch.xml
:language: xml
:name: turtle_tf2_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/py_turtle_tf2_demo_launch.yaml
:language: yaml
:name: turtle_tf2_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/py_turtle_tf2_demo_launch.py
:language: python
@@ -281,9 +284,10 @@ With your text editor, create a new file called ``turtle_tf2_demo_launch`` with
Let's examine the launch file structure.
Each format has its own way of setting up the launch file:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
XML launch files start with an XML declaration and a root ```` element.
@@ -291,7 +295,8 @@ Each format has its own way of setting up the launch file:
:language: xml
:lines: 1-2
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
YAML launch files start with a YAML version declaration and a ``launch:`` key.
@@ -299,7 +304,8 @@ Each format has its own way of setting up the launch file:
:language: yaml
:lines: 1-3
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
In Python launch files, we first import required modules from the ``launch`` and ``launch_ros`` packages.
It should be noted that ``launch`` is a generic launching framework (not ROS 2 specific) and ``launch_ros`` has ROS 2 specific things, like nodes that we import here.
@@ -310,21 +316,24 @@ Each format has its own way of setting up the launch file:
Now we run our nodes that start the turtlesim simulation and broadcast ``turtle1`` state to the tf2 using our ``turtle_tf2_broadcaster`` node.
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/py_turtle_tf2_demo_launch.xml
:language: xml
:lines: 3-6
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/py_turtle_tf2_demo_launch.yaml
:language: yaml
:lines: 4-9
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/py_turtle_tf2_demo_launch.py
:language: python
@@ -457,21 +466,24 @@ Open a new terminal, navigate to the root of your workspace, and source the setu
Now run the launch file that will start the turtlesim simulation node and ``turtle_tf2_broadcaster`` node:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch learning_tf2_py turtle_tf2_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch learning_tf2_py turtle_tf2_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Cpp.rst b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Cpp.rst
index bce08b784e8..8cc9fe39244 100644
--- a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Cpp.rst
+++ b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Cpp.rst
@@ -280,19 +280,22 @@ Finally, add the ``install(TARGETS…)`` section so ``ros2 run`` can find your e
Open the launch file called ``turtle_tf2_demo_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``src/learning_tf2_cpp/launch`` directory with your text editor, add two new nodes to the launch description, add a launch argument, and add the imports.
The resulting file should look like:
-.. tabs::
+.. tab-set::
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/listener_cpp_launch.py
:language: python
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/listener_cpp_launch.xml
:language: xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/listener_cpp_launch.yaml
:language: yaml
@@ -386,21 +389,24 @@ Open a new terminal, navigate to the root of your workspace, and source the setu
Now you're ready to start your full turtle demo:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch learning_tf2_cpp turtle_tf2_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console
diff --git a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py.rst b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py.rst
index 72093ba7be7..7180f6e8990 100644
--- a/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py.rst
+++ b/source/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Listener-Py.rst
@@ -230,21 +230,24 @@ Add the following line between the ``'console_scripts':`` brackets:
Open the launch file called ``turtle_tf2_demo_launch`` with extension ``.py``, ``.xml``, or ``.yaml`` in the ``src/learning_tf2_py/launch`` directory with your text editor, add two new nodes to the launch description, add a launch argument, and add the imports.
The resulting file should look like:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. literalinclude:: launch/listener_py_launch.xml
:language: xml
:name: turtle_tf2_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. literalinclude:: launch/listener_py_launch.yaml
:language: yaml
:name: turtle_tf2_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. literalinclude:: launch/listener_py_launch.py
:language: python
@@ -341,21 +344,24 @@ Open a new terminal, navigate to the root of your workspace, and source the setu
Now you're ready to start your full turtle demo:
-.. tabs::
+.. tab-set::
- .. group-tab:: XML
+ .. tab-item:: XML
+ :sync: XML
.. code-block:: console
$ ros2 launch learning_tf2_py turtle_tf2_demo_launch.xml
- .. group-tab:: YAML
+ .. tab-item:: YAML
+ :sync: YAML
.. code-block:: console
$ ros2 launch learning_tf2_py turtle_tf2_demo_launch.yaml
- .. group-tab:: Python
+ .. tab-item:: Python
+ :sync: Python
.. code-block:: console