4、回放工具详解:rviz2可视化回放、plotjuggler数据曲线分析、foxglove studio高级回放

做自动驾驶调试,最头疼的是什么?

我个人的答案是:数据回放。车在路上跑的时候一切正常,回来一分析日志,发现某个时刻感知丢了、规划路径抽风了。这时候你手里只有一堆 rosbag 文件,怎么把当时的场景「复活」出来?

嗯,这就是今天要聊的核心——三种回放工具,各有各的脾气。

一句话总结:rviz2 适合看「画面」,plotjuggler 适合看「数字」,foxglove studio 适合看「一切」。

4.1 rviz2 可视化回放:最直观的「场景重现」

rviz2 是 ROS2 的亲儿子,也是我最早接触的回放工具。说白了,它就是把你车上的传感器数据、障碍物框、规划轨迹,用 3D 画面重新演一遍。

基本操作流程:

  1. 启动 rviz2:rviz2
  2. 加载你之前保存的配置文件(.rviz),或者手动添加 Display 类型
  3. 播放 rosbag:ros2 bag play your_bag_file
  4. 在 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 的延迟。嗯,这种问题光靠「看画面」是看不出来的。

使用步骤:

  1. 安装:sudo apt install ros-humble-plotjuggler-ros
  2. 启动:ros2 run plotjuggler plotjuggler
  3. 在 PlotJuggler 界面中,点击「Start」按钮,选择你的 rosbag 文件
  4. 从左侧 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 一分析发现横向偏差一直在震荡——这种问题,只有组合使用才能发现。

一句话建议:别嫌麻烦,三种工具都装上。调试的时候多切换几次,你会发现很多「原来如此」的时刻。

回放工具知识体系 ROS2 Bag 数据回放 rviz2 3D 可视化回放 plotjuggler 数据曲线分析 foxglove studio 高级综合回放 适用场景 • 感知/规划画面排查 • 障碍物框验证 • 路径平滑度检查 适用场景 • 控制模块调试 • 延迟/偏差分析 • 多曲线对比 适用场景 • 综合诊断 • 多面板协同 • 时间轴同步

好了,三种工具的基本用法就聊到这儿。记住一个原则:没有最好的工具,只有最合适的组合。下次调试的时候,不妨三种都试试,你会发现数据回放这件事,其实没那么难。