ROS2 核心功能与关键配置
三、核心功能与关键配置
命令行工具
| 命令 | 用途 |
ros2 node list / ros2 node info | 看节点与它们的接口 |
ros2 topic list / echo / hz / bw | 看话题、抓一帧数据、测频率与带宽 |
ros2 topic info -v | 看发布订阅两端的 QoS,排查丢消息的第一站 |
ros2 interface show | 查看消息/服务/动作的字段定义 |
ros2 param list / get / set | 运行期读写参数 |
ros2 bag record / play | 录制与回放数据,复现问题的主力工具 |
ros2 run / ros2 launch | 启动单个可执行文件 / 启动一组节点 |
ros2 doctor | 体检环境配置与网络发现 |
QoS 策略
| 策略 | 取值 | 含义与典型用法 |
| Reliability | reliable / best_effort | reliable 会重传,适合指令与状态;best_effort 不重传,适合高频传感器流 |
| Durability | volatile / transient_local | transient_local 会把历史样本留给后来的订阅者,适合地图、静态参数 |
| History | keep_last / keep_all | 配合 depth 使用;一般用 keep_last 加合理深度 |
| Depth | 整数 | 队列长度,太小会丢,太大会增加延迟 |
| Deadline | 时长 | 期望的发布周期,超时会触发回调,用于监测断流 |
| Lifespan | 时长 | 样本过期时间,过期的数据不再投递 |
传感器数据(雷达、相机)用 best_effort 是行业惯例,因为丢一帧比阻塞整个链路更划算。但如果你写了一个默认 reliable 的订阅者去订阅它,就会一帧都收不到,而且不会有任何报错——这是 ROS2 新手最常见的坑。
TF2 与坐标系
TF2 维护一棵从父坐标系到子坐标系的变换树。移动机器人上常见的链路是:map 到 odom 由定位模块发布,odom 到 base_link 由里程计或轮式控制器发布,base_link 到各传感器由静态变换发布。整棵树在任意时刻必须满足「每个坐标系只有一个父节点」,出现两个父节点就会报错并让查询间歇性失败。
# 发布一个静态变换:base_link 到 laser
ros2 run tf2_ros static_transform_publisher \
--x 0.2 --y 0 --z 0.3 --yaw 0 --pitch 0 --roll 0 \
--frame-id base_link --child-frame-id laser
# 查询两个坐标系之间的变换
ros2 run tf2_ros tf2_echo map base_link
# 导出当前变换树为 PDF
ros2 run tf2_tools view_frames
