4. 录制工具与流程
在 Cyber RT 的数据闭环中,cyber_recorder record 是最常用的数据采集入口。它把自动驾驶系统中各通道(Channel)的消息按时间顺序写入磁盘,形成可回放的 .record 文件。理解 record 命令的参数、录制策略、通道过滤与文件切分机制,是构建稳定数据采集流程的基础。
一、核心原理:record 命令如何工作
cyber_recorder record 启动后,会向 Cyber RT 的传输层订阅指定通道,收到消息后按“通道 + 时间戳 + 原始字节”的格式追加写入文件。其内部由三个关键角色协作:订阅管理器负责按通道名或正则表达式建立订阅;写入器负责将消息序列化并落盘;切分控制器根据文件大小或时间阈值触发新文件创建。整个过程对发布者透明,发布者无需感知录制行为。
录制文件采用分块结构,包含文件头、通道定义段和消息数据段。回放时,cyber_recorder play 会先读取通道定义,再按时间戳顺序重放消息。因此,录制时通道定义的完整性直接决定回放能否成功。
二、参数配置与常用命令
record 命令的参数可分为四类:通道选择、输出控制、切分控制和时间控制。以下是最常用的参数组合:
# 录制全部通道,输出到指定目录
cyber_recorder record -a -o /data/record/
# 只录制指定通道
cyber_recorder record -c /camera/front /lidar/top -o /data/record/
# 使用正则表达式过滤通道
cyber_recorder record -c "/camera/.*" -o /data/record/
# 按文件大小切分,单文件不超过 512MB
cyber_recorder record -a -s 536870912 -o /data/record/
# 按时间切分,单文件录制 60 秒
cyber_recorder record -a -t 60 -o /data/record/
# 指定录制时间段
cyber_recorder record -a -b 2025-01-01T12:00:00 -e 2025-01-01T12:10:00 -o /data/record/
cyber_channel list 确认实际通道名,避免因命名差异导致漏录。例如 /camera/front 与 /camera/front/compressed 是两个不同通道。
三、录制策略:全量、过滤与切分
录制策略的选择取决于数据用途。下表对比了三种常见策略的适用场景与注意事项:
| 策略 | 命令示例 | 适用场景 | 注意事项 |
|---|---|---|---|
| 全量录制 | record -a |
问题复现、算法回归、数据备份 | 磁盘消耗大,需监控剩余空间 |
| 通道过滤 | record -c /lidar/top |
定向采集、降低带宽与存储压力 | 需确认通道名,避免漏录关键话题 |
| 大小切分 | record -a -s 536870912 |
长时间录制、便于传输与归档 | 切分点可能截断消息,回放需按序加载 |
| 时间切分 | record -a -t 60 |
按分钟/小时分段,便于检索 | 时间边界与消息时间戳可能不完全对齐 |
实际工程中,常将通道过滤与切分组合使用。例如只录制感知和定位相关通道,并按 512MB 切分,既控制单文件体积,又保留关键数据。
四、案例:一次典型的路测数据采集
假设车辆路测需要采集 30 分钟数据,重点关注激光雷达、摄像头和底盘信号,同时要求单文件不超过 1GB,便于后续上传和回放。操作流程如下:
- 确认通道:
cyber_channel list | grep -E "lidar|camera|chassis" - 启动录制:
cyber_recorder record -c "/lidar/.*" "/camera/.*" "/chassis/.*" -s 1073741824 -o /data/record/ - 观察输出:终端会显示当前录制文件、消息数量与文件大小
- 结束录制:按
Ctrl+C,工具会完成当前文件写入并退出 - 校验结果:
cyber_recorder info /data/record/xxx.record查看通道与消息统计
cyber_recorder info 检查文件完整性,确认通道数量、消息条数和时间范围是否符合预期。若发现某通道消息数为 0,通常是通道名不匹配或该通道未发布。
五、误区与复盘
误区一:认为 -a 一定能录到所有数据。实际上,-a 只录制当前已注册的通道。如果某个节点在录制启动后才发布新通道,该通道可能不会被捕获。建议在系统稳定运行后再启动录制。
误区二:忽略磁盘写入速度。高频率激光雷达和摄像头同时录制时,磁盘 I/O 可能成为瓶颈,导致丢帧。应使用 SSD 或 RAID 阵列,并监控写入速率。
误区三:切分文件后直接单独回放。切分文件之间存在时间连续性,单独回放某个分片可能缺少上下文。建议按文件名顺序批量回放,或使用 cyber_recorder play -f 指定多个文件。
误区四:不设置文件大小上限。长时间全量录制可能生成数十 GB 的单文件,导致传输困难、回放加载慢。应根据存储介质和传输方式设置合理的 -s 或 -t 阈值。
复盘时,建议记录每次采集的通道列表、切分参数、磁盘占用和消息统计,形成可追溯的采集日志。这样在后续数据分析或问题复现时,能快速定位数据来源与完整性。