本教程展示了如何使用 ros2_tracing https://github.com/ros2/ros2_tracing来跟踪和分析 ROS 2 应用程序。在本教程中,应用程序将是 performance_test。https://gitlab.com/ApexAI/performance_test
概述
本教程涵盖:
运行和跟踪
performance_test
运行使用 tracetools_analysis https://github.com/ros-tracing/tracetools_analysis 分析跟踪数据以绘制回调持续时间
先决条件
本教程针对实时 Linux 系统。请参阅实时系统设置教程 https://docs.ros.org/en/jazzy/Tutorials/Miscellaneous/Building-Realtime-rt_preempt-kernel-for-ROS-2.html 。但是,如果您使用的是非实时 Linux 系统,本教程也适用。
安装和构建
按照安装说明在 Linux 上安装 ROS 2。https://docs.ros.org/en/jazzy/Installation.html
便条
本教程通常适用于所有受支持的 Linux 发行版。但是,您可能需要调整一些命令。
安装 babeltrace
和 ros2trace
。
sudo apt-get update
sudo apt-get install -y babeltrace ros-jazzy-ros2trace ros-jazzy-tracetools-analysis
源 ROS 2 安装并验证跟踪是否已启用:
source /opt/ros/jazzy/setup.bash
ros2 run tracetools status
您应该在输出中看到 Tracing enabled
。
然后创建一个工作区,并克隆 performance_test
和 tracetools_analysis
。
cd ~/
mkdir -p tracing_ws/src
cd tracing_ws/src/
git clone https://gitlab.com/ApexAI/performance_test.git
git clone https://github.com/ros-tracing/tracetools_analysis.git
cd ..
使用 rosdep 安装依赖项。
rosdep update
rosdep install --from-paths src --ignore-src -y
然后为 ROS 2 构建和配置 performance_test
。请参阅其文档。https://gitlab.com/ApexAI/performance_test/-/tree/master/performance_test#performance_test
colcon build --packages-select performance_test --cmake-args -DPERFORMANCE_TEST_RCLCPP_ENABLED=ON
接下来,我们将进行一个 performance_test
实验并追踪它。
追踪
第 1 步:追踪
在一个终端中,配置工作区并设置跟踪。运行命令时,将打印出 ROS 2 用户空间事件列表。它还会打印出包含结果跟踪的目录路径(在 ~/.ros/tracing
下)。
# terminal 1
cd ~/tracing_ws
source install/setup.bash
ros2 trace --session-name perf-test --list
按回车键开始跟踪。
cxy@ubuntu2404-cxy:~/tracing_ws$ ros2 trace --session-name perf-test --list
UST tracing enabled (35 events)
ros2:rcl_init
ros2:rcl_node_init
ros2:rmw_publisher_init
ros2:rcl_publisher_init
ros2:rclcpp_publish
ros2:rclcpp_intra_publish
ros2:rcl_publish
ros2:rmw_publish
ros2:rmw_subscription_init
ros2:rcl_subscription_init
ros2:rclcpp_subscription_init
ros2:rclcpp_subscription_callback_added
ros2:rmw_take
ros2:rcl_take
ros2:rclcpp_take
ros2:rcl_service_init
ros2:rclcpp_service_callback_added
ros2:rcl_client_init
ros2:rcl_timer_init
ros2:rclcpp_timer_callback_added
ros2:rclcpp_timer_link_node
ros2:rclcpp_callback_register
ros2:callback_start
ros2:callback_end
ros2:rcl_lifecycle_state_machine_init
ros2:rcl_lifecycle_transition
ros2:rclcpp_execu