很多新人学 ROS2 时会遇到一个问题:
命令能跑、节点也在跑,但系统到底在“做什么”,心里没底。
这就是 RViz 的价值:把抽象的数据流变成可视化画面,让你能快速判断“是算法问题、配置问题,还是坐标系问题”。
这篇给你一套可直接照做的流程,目标是:
- 跑起 RViz
- 正确显示机器人常见数据
- 用一套排障顺序快速定位问题
一、先理解:RViz 是什么,不是什么
RViz 是什么
RViz 是 ROS2 的可视化工具。它可以显示:
- 坐标系(TF)
- 激光雷达点云 / 扫描
- 地图
- 机器人模型
- 路径与轨迹
- 各类 Marker
RViz 不是什么
- 它不是仿真器(仿真是 Gazebo / Ignition 这类)
- 它不是算法本体(算法在你的节点里)
你可以把它理解成:
ROS2 系统的“监控面板 + 可视化调试台”。
二、启动前的最小检查(别省)
先在终端做 4 个确认:
# 1) ROS 环境是否正确
printenv | grep -E "ROS_DISTRO|ROS_VERSION"
# 2) 当前有哪些节点
ros2 node list
# 3) 当前有哪些话题
ros2 topic list
# 4) TF 是否在发布
ros2 topic echo /tf --once
如果这里已经空空如也,RViz 打开也只会是“黑屏 + 无数据”。
三、标准启动流程(新人照抄版)
步骤 1:启动你的系统/仿真
先启动机器人相关节点(传感器、定位、控制等)。
步骤 2:启动 RViz
rviz2
步骤 3:设置 Fixed Frame(最关键)
在 RViz 左侧 Global Options 找到 Fixed Frame,常见值:
如果这个设置错了,通常会出现:
- 画面不动
- 数据“飞走”
- 报
No transform from ...
步骤 4:按需添加 Display
常用 Display(建议先加这几个):
- TF:看坐标树是否正常
- RobotModel:看 URDF 模型是否加载
- LaserScan:看激光是否有数据
- PointCloud2:看深度/点云数据
- Map:看建图结果
- Path / Pose / Marker:看规划与可视化标注
四、每个显示项怎么判断“正常/异常”
1) TF(最先看)
正常表现:坐标树稳定,父子关系合理(如 map -> odom -> base_link)。
异常表现:
- 缺某一层 frame
- frame 名称拼写不一致
- 抖动/跳变明显
排查命令:
ros2 run tf2_ros tf2_echo map base_link
ros2 topic hz /tf
2) LaserScan / PointCloud2
正常表现:扫描数据连续刷新,与机器人朝向一致。
异常表现:
- 完全没数据:通常是 topic 选错或驱动没起
- 数据旋转 90°/180°:常见是外参或 frame 朝向错
- 数据断断续续:频率过低或消息丢失
排查命令:
ros2 topic list | grep -E "scan|point|cloud"
ros2 topic echo /scan --once
ros2 topic hz /scan
3) RobotModel
正常表现:机器人模型比例正确、关节状态变化合理。
异常表现:
- 模型不显示:URDF 未加载或
robot_description 未发布
- 模型位置漂移:TF 链断裂或时间戳问题
五、最常见的 5 个坑(以及怎么解)
坑 1:Fixed Frame 设错
现象:看起来“什么都有问题”。
解决:先统一到 map 或 odom,再观察。
坑 2:Topic 名称对不上
现象:RViz 显示 “No messages received”。
解决:用 ros2 topic list 找真实 topic,再在 Display 里改。
坑 3:QoS 不匹配
现象:命令行能看到数据,RViz 却收不到。
解决:在对应 Display 里调整 QoS(尤其是 Reliability / Durability)。
坑 4:时间不同步(真机多机常见)
现象:画面跳动、TF extrapolation 错误。
解决:统一时钟源,必要时检查 NTP/Chrony。
坑 5:frame 命名混乱
现象:base_link、base_footprint、odom 关系混乱。
解决:先画清楚你自己的坐标树约定,再改代码。
六、一套通用排障顺序(建议收藏)
出现“RViz 显示异常”时,按这个顺序走:
ros2 topic list:确认数据源在不在
ros2 topic echo <topic> --once:确认有消息
ros2 topic hz <topic>:确认频率是否正常
- 检查 RViz Display 的 Topic 与 QoS
- 检查 Fixed Frame 与 TF 连通性
- 最后再怀疑算法逻辑
这个顺序能避免你把“配置问题”误判成“算法问题”。
七、推荐给新人的最小练习
你可以做一个 30 分钟练习:
- 启动一个发布
LaserScan 的 demo
- RViz 添加 TF + LaserScan
- 故意把 Fixed Frame 改错,观察报错
- 改回正确 frame,确认恢复
- 故意改错 topic 名称,再改回
做完这一轮,你对 RViz 的理解会从“会点按钮”升级到“会调系统”。
结语
ROS2 学习里,RViz 不是可选项,而是高频必备工具。
它最大的价值不是“好看”,而是让你在复杂系统里更快找到问题边界。
先把“Fixed Frame、TF、Topic、QoS”这四件事练熟,后面的导航、建图、定位都会顺很多。