Skip to content

Commit

Permalink
add explanation about component containers.
Browse files Browse the repository at this point in the history
Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
Co-authored-by: Christophe Bedard <bedard.christophe@gmail.com>
  • Loading branch information
fujitatomoya and christophebedard committed Dec 26, 2024
1 parent 3d4b2ef commit e1cc880
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 0 deletions.
24 changes: 24 additions & 0 deletions source/Concepts/Intermediate/About-Composition.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,30 @@ 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.

.. _ComponentContainer:

Component Container
-------------------

A component container is a host process that allows you to load and manage multiple components at runtime within the same process space.

As of now, the following generic component container types are available:

* `component_container <https://github.com/ros2/rclcpp/blob/{REPOS_FILE_BRANCH}/rclcpp_components/src/component_container.cpp>`__

* The most generic component container that uses a single ``SingleThreadedExecutor`` to execute all components.

* `component_container_mt <https://github.com/ros2/rclcpp/blob/{REPOS_FILE_BRANCH}/rclcpp_components/src/component_container_mt.cpp>`__

* Component container that uses a single ``MultiThreadedExecutor`` to execute the components.

* `component_container_isolated <https://github.com/ros2/rclcpp/blob/{REPOS_FILE_BRANCH}/rclcpp_components/src/component_container_isolated.cpp>`__

* Component container that uses a dedicated executor for each component: either ``SingleThreadedExecutor`` (default) or ``MultiThreadedExecutor``.

For more information about the types of executors, see the :ref:`TypesOfExecutors`.
For more information about the options of each component container, see :ref:`ComponentContainerTypes` in the composition tutorial.

Writing a Component
-------------------

Expand Down
2 changes: 2 additions & 0 deletions source/Concepts/Intermediate/About-Executors.rst
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ The *wait set* is also used to detect when timers expire.

The Single-Threaded Executor is also used by the container process for :doc:`components <./About-Composition>`, i.e. in all cases where nodes are created and executed without an explicit main function.

.. _TypesOfExecutors:

Types of Executors
------------------

Expand Down
27 changes: 27 additions & 0 deletions source/Tutorials/Intermediate/Composition.rst
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,33 @@ Advanced Topics

Now that we have seen the basic operation of components, we can discuss a few more advanced topics.

.. _ComponentContainerTypes:

Component container types
^^^^^^^^^^^^^^^^^^^^^^^^^

As introduced in :ref:`ComponentContainer`, there are a few component container types with different 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.
* ``thread_num`` parameter option is available to specify the number of threads in ``MultiThreadedExecutor``.

.. code-block:: bash
ros2 run rclcpp_components component_container_mt --ros-args -p thread_num:=4
* ``component_container_isolated`` with ``MultiThreadedExecutor`` for each component.
* ``--use_multi_threaded_executor`` argument specifies executor type used for each component to ``MultiThreadedExecutor``.

.. code-block:: bash
ros2 run rclcpp_components component_container_isolated --use_multi_threaded_executor
Unloading components
^^^^^^^^^^^^^^^^^^^^
Expand Down

0 comments on commit e1cc880

Please sign in to comment.