From 94bf175e45e225c5db25ca62d3bb46789061f50f Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Fri, 13 Dec 2024 14:55:11 -0800 Subject: [PATCH] add explanation about component containers. Signed-off-by: Tomoya.Fujita --- .../Intermediate/About-Composition.rst | 21 +++++++++++++++++ source/Tutorials/Intermediate/Composition.rst | 23 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/source/Concepts/Intermediate/About-Composition.rst b/source/Concepts/Intermediate/About-Composition.rst index a6cbdb5dcc1..613eabd208a 100644 --- a/source/Concepts/Intermediate/About-Composition.rst +++ b/source/Concepts/Intermediate/About-Composition.rst @@ -33,6 +33,27 @@ By making the process layout a deploy-time decision the user can choose between: Additionally ``ros2 launch`` can be used to automate these actions through specialized launch actions. +Component container +------------------- + +Component container is a host process that allows you to load and manage multiple components at runtime within the same process space. +This enables better performance and memory efficiency because it avoids inter-process communication overhead when nodes interact. + +As of now, these are generic component container types available. + +* `component_container `__ + * The most generic component container that uses a single ``SingleThreadedExecutor`` to execute all components including component container itself. + +* `component_container_mt `__ + * Component container that uses a single ``MultiThreadedExecutor`` to execute the components including component container itself. + * ``thread_num`` parameter option is available to specify the number of threads in ``MultiThreadedExecutor``. + +* `component_container_isolated `__ + * Component container with dedicated either ``SingleThreadedExecutor`` (default) or ``MultiThreadedExecutor`` executors for each component. (Component container is executed by ``SingleThreadedExecutor``) + * ``--use_multi_threaded_executor`` argument specifies executor type used for each component to ``MultiThreadedExecutor``. + +See more details for :doc:`Types of Executors <../Concepts/About-Executors#types-of-executors>`. + Writing a Component ------------------- diff --git a/source/Tutorials/Intermediate/Composition.rst b/source/Tutorials/Intermediate/Composition.rst index f8de6942a1b..5c97ae04a71 100644 --- a/source/Tutorials/Intermediate/Composition.rst +++ b/source/Tutorials/Intermediate/Composition.rst @@ -210,6 +210,29 @@ Advanced Topics Now that we have seen the basic operation of components, we can discuss a few more advanced topics. +Component container types +^^^^^^^^^^^^^^^^^^^^^^^^^ + +As introduced in :doc:`Component container <../../Concepts/About-Composition#component-container>`, there is a few component container types with options. +You can choose the most appropriate component container type for your requirement. + +* ``component_container`` (No options / parameters available) + +.. code-block:: bash + + ros2 run rclcpp_components component_container + +* ``component_container_mt`` with ``MultiThreadedExecutor`` composed of 4 threads. + +.. code-block:: bash + + ros2 run rclcpp_components component_container_mt --ros-args -p thread_num:=4 + +* ``component_container_isolated`` with ``MultiThreadedExecutor`` for each component. + +.. code-block:: bash + + ros2 run rclcpp_components component_container_isolated --use_multi_threaded_executor Unloading components ^^^^^^^^^^^^^^^^^^^^