ros2 trace是ros2的官方追踪工具(基于LTTng),用来记录节点、话题、回调、生命周期等运行时事件,便于性能分析、延迟排查、卡顿定位。
# 1. 安装 LTTng 与依赖sudo apt updatesudo apt install -y lttng-tools liblttng-ust-dev python3-babeltrace# 2. 安装 ros2trace 与分析工具(替换 humble 为你的发行版)sudo apt install -y ros-humble-ros2trace ros-humble-tracetools-analysis# 3. 检查是否启用追踪source /opt/ros/humble/setup.bashros2 run tracetools status# 输出:Tracing enabled 即可```{insert\_element\_1\_}---### 二、常用命令(直接复制用)#### 1)开始追踪(默认捕获所有 ROS 2 事件)```bashros2 trace
1、会创建会话:~/.ros/tracing/session-xxxxxx
按 Enter 停止追踪
2、自定义事件:
# 只抓 ros2:* 所有事件ros2 trace -u 'ros2:*'# 抓回调 + 话题 + 服务ros2 trace -u 'ros2:callback*' 'ros2:topic*' 'ros2:service*'
3、指定会话名(方便查找)
ros2 trace -n my_test_trace
# 用 babeltrace 可读格式输出babeltrace ~/.ros/tracing/session-xxxxxx | less# 过滤关键字(如 callback)babeltrace ~/.ros/tracing/session-xxxxxx | grep callback```{insert\_element\_3\_}---### 四、简单分析(画回调耗时图)```bash# 1. 生成分析文件ros2 run tracetools_analysis analyze --path ~/.ros/tracing/session-xxxxxx# 2. 画回调耗时时序图ros2 run tracetools_analysis plot_callback_durations```{insert\_element\_4\_}---### 五、常见报错- `Permission denied`:```bashsudo usermod -aG tracing $USERnewgrp tracing
Tracing disabled:
确认已安装 lttng-tools,且 ros2 run tracetools status 显示 enabled。
查延迟 / 卡顿:ros2 trace -u ‘ros2:callback‘
查消息丢失:ros2 trace -u ‘ros2:topic‘
查生命周期 / 节点启停:ros2 trace -u ‘ros2:lifecycle*’
ROS 2 核心(rcl/rclcpp)自带 trace 埋点
官方编译好的 ROS 2 包(apt 安装的)默认开启了 trace
你的程序只是调用 ROS 2 接口 → 自动带 trace 能力
如果显示 Tracing disabled 必须处理,但依然不用重新编译你的程序!
sudo apt install -y ros-humble-tracetools ros-humble-tracetools-read
sudo apt install -y lttng-tools liblttng-ust-dev linux-modules-extra-$(uname -r)
加载追踪模块(立刻生效)
sudo modprobe lttng_tracersudo modprobe lttng_types
现在再检查!
ros2 run tracetools status
正确输出:
Tracing enabled
最后再给你权限(避免报错)
sudo usermod -aG tracing $USERnewgrp tracing
如果出现以下问题:
ubuntu@ubuntu-YogaPro-16s-IRP8:~/docker/ubuntu22_arm$ sudo modprobe lttng_tracersudo modprobe lttng_typesmodprobe: FATAL: Module lttng_tracer not found in directory /lib/modules/6.8.0-110-genericmodprobe: FATAL: Module lttng_types not found in directory /lib/modules/6.8.0-110-generic
使用的是桌面版 Ubuntu 内核,没有自带 LTTng 追踪内核模块!所以 modprobe 会报错:找不到模块。
sudo apt install -y lttng-modules-dkmssudo modprobe lttng
应该显示:
Tracing enabled
追踪用户空间:
sudo apt install -y ros-humble-ros2trace ros-humble-tracetoolsros2 trace --ust
ROS2 Humble 官方 apt 安装的版本 = 默认关闭 trace,需要源码编译ros2开启trace功能:
mkdir -p ~/ros2_humble_src/srccd ~/ros2_humble_srccurl -O https://raw.githubusercontent.com/ros2/ros2/humble/ros2.reposvcs import src < ros2.reposrosdep initrosdep updaterosdep install --from-paths src --ignore-src -r -ycolcon build \--cmake-args \-DTRACETOOLS_ENABLED=ON \-DTRACETOOLS_LTTNG_ENABLED=ON \--packages-up-to tracetools ros2trace
编译完检查:
source ~/ros2_humble_src/install/setup.bashros2 run tracetools status
正确输出:
Tracing enabled