Skip to content

Non-ROS Threads#

The thread configurator can also manage scheduling for threads that are not part of any ROS 2 executor — for example, sensor driver threads or custom worker threads.

Usage#

Use agnocast_cie_thread_configurator::spawn_non_ros2_thread instead of std::thread to create the thread. This function automatically reports the thread's ID to the configurator so that scheduling parameters can be applied.

```cpp

include "agnocast_cie_thread_configurator/cie_thread_configurator.hpp"#

// Instead of: // std::thread t(my_worker_function, arg1, arg2);

// Use: std::thread t = agnocast_cie_thread_configurator::spawn_non_ros2_thread( "my_worker", // unique thread name (must match YAML config) my_worker_function, arg1, arg2); ```

The thread_name must be unique among all threads managed by the configurator, and must match the name field in the YAML configuration.

CMake#

Add agnocast_cie_thread_configurator as a dependency:

cmake find_package(agnocast_cie_thread_configurator REQUIRED) ament_target_dependencies(your_target agnocast_cie_thread_configurator)

YAML Configuration#

Configure non-ROS threads under the non_ros_threads section:

yaml non_ros_threads: - name: my_worker policy: SCHED_FIFO priority: 85 affinity: [3]

The fields are the same as callback_groups except name is used instead of id. All scheduling policies including SCHED_DEADLINE are supported. See the YAML Specification for details.

Prerun Mode#

Non-ROS threads are also discovered by --prerun mode and included in the generated template.yaml.