4、回放工具详解:rviz2可视化回放、plotjuggler数据曲线分析、foxglove studio高级回放
做自动驾驶调试,最头疼的是什么?
我个人的答案是:数据回放。车在路上跑的时候一切正常,回来一分析日志,发现某个时刻感知丢了、规划路径抽风了。这时候你手里只有一堆 rosbag 文件,怎么把当时的场景「复活」出来?
嗯,这就是今天要聊的核心——三种回放工具,各有各的脾气。
一句话总结:rviz2 适合看「画面」,plotjuggler 适合看「数字」,foxglove studio 适合看「一切」。
4.1 rviz2 可视化回放:最直观的「场景重现」
rviz2 是 ROS2 的亲儿子,也是我最早接触的回放工具。说白了,它就是把你车上的传感器数据、障碍物框、规划轨迹,用 3D 画面重新演一遍。
基本操作流程:
- 启动 rviz2:
rviz2 - 加载你之前保存的配置文件(.rviz),或者手动添加 Display 类型
- 播放 rosbag:
ros2 bag play your_bag_file - 在 rviz2 中观察数据流动
我在项目中遇到过一个问题:回放时点云显示特别卡,一帧一帧地跳。后来发现是 rviz2 的 Global Options 里 Fixed Frame 设错了。你想想看,如果 frame_id 对不上,rviz2 就得不停地做坐标变换计算,不卡才怪。
我的习惯:回放前先看一眼 bag 里的 topic 列表,确认一下 frame_id 的命名。Autoware 里常用的是 base_link 或 map,别搞混了。
常用 Display 类型:
| 数据类型 | Display 类型 | 说明 |
|---|---|---|
| 激光雷达点云 | PointCloud2 | 注意设置 Decay Time,不然画面会糊 |
| 障碍物框 | MarkerArray | Autoware 的感知结果通常用这个 |
| 规划轨迹 | Path | 看路径是否平滑,有没有急转弯 |
| 车辆模型 | RobotModel | 加载 urdf,能看到方向盘转动 |
rviz2 最大的优点是「所见即所得」。你一眼就能看出障碍物框是不是在乱跳、规划路径是不是穿墙了。但它的短板也很明显——看不了数值变化。比如你想知道某个时刻的车辆速度具体是多少,rviz2 就无能为力了。
4.2 plotjuggler 数据曲线分析:把数据「画」出来
plotjuggler 是我调试控制模块时的最爱。它能把 rosbag 里的数值型 topic 变成曲线图,让你一眼看出数据的变化趋势。
我记得有一次,车辆在弯道里总是跑偏。用 rviz2 看半天没发现问题,后来用 plotjuggler 把方向盘转角、横向偏差、横摆角速度三条曲线叠在一起看,才发现是转角指令有 200ms 的延迟。嗯,这种问题光靠「看画面」是看不出来的。
使用步骤:
- 安装:
sudo apt install ros-humble-plotjuggler-ros - 启动:
ros2 run plotjuggler plotjuggler - 在 PlotJuggler 界面中,点击「Start」按钮,选择你的 rosbag 文件
- 从左侧 topic 列表拖拽你关心的数据到绘图区
我曾经踩过的坑:plotjuggler 默认只显示最近 1000 个数据点。如果你回放一个小时的 bag,前面的数据会被自动丢弃。解决办法是在 Settings 里把 Buffer Size 调大,比如设成 100000。
plotjuggler 的杀手锏功能:
- 多曲线叠加:把实际速度和目标速度叠在一起,一眼看出跟踪误差
- 数据导出:选中一段曲线,右键导出为 CSV,方便做离线分析
- 自定义计算:比如你想看「速度的导数」,可以直接写公式
deriv(/vehicle/velocity)
说白了,plotjuggler 就是给数据做「心电图」的。它不关心画面好不好看,只关心数字对不对。
4.3 foxglove studio 高级回放:新一代的「全能选手」
foxglove studio 是这两年火起来的工具。我第一次用的时候,说实话有点被惊艳到——它把 rviz2 的 3D 可视化和 plotjuggler 的曲线分析整合到了一个界面里。
安装方式:
- 直接下载 AppImage:foxglove.dev/download(注意:不要链接网络URL,此处仅为说明)
- 或者用 Docker:
docker run -p 8080:8080 ghcr.io/foxglove/studio:latest
核心优势:
- 多面板布局:左边放 3D 视图,右边放曲线图,中间放表格,想怎么摆就怎么摆
- 时间轴同步:拖动时间轴,所有面板的数据一起动,不会出现「画面到了但曲线没到」的情况
- 数据过滤:可以按时间范围、topic 名称、甚至数值条件来过滤数据
我个人的工作流:先用 foxglove 打开 bag,在 3D 视图里找到异常时刻(比如障碍物突然消失),然后切换到曲线面板,看那个时刻的感知置信度、跟踪状态等数值。整个过程不用切换工具,效率高很多。
foxglove 的布局示例:
+------------------+------------------+
| 3D 视图 | 曲线图面板 |
| (点云+障碍物) | (速度/加速度) |
+------------------+------------------+
| 原始消息面板 | 状态表格 |
| (查看JSON数据) | (关键指标汇总) |
+------------------+------------------+
不过 foxglove 也有个小问题:它对老版本的 rosbag 兼容性不太好。如果你用的是 ROS2 Humble 之前的版本,可能需要先转换一下 bag 格式。
4.4 三种工具怎么选?
我一般这样用:
- 初步排查:用 rviz2 快速过一遍 bag,看有没有明显的画面异常
- 数值分析:用 plotjuggler 深挖控制、定位等数值型数据
- 综合诊断:用 foxglove studio 做最后的「会诊」,把画面和数值结合起来看
你想想看,如果只靠一种工具,很容易漏掉关键线索。比如 rviz2 里看到路径很平滑,但 plotjuggler 一分析发现横向偏差一直在震荡——这种问题,只有组合使用才能发现。
一句话建议:别嫌麻烦,三种工具都装上。调试的时候多切换几次,你会发现很多「原来如此」的时刻。
好了,三种工具的基本用法就聊到这儿。记住一个原则:没有最好的工具,只有最合适的组合。下次调试的时候,不妨三种都试试,你会发现数据回放这件事,其实没那么难。