4. 录制工具与流程

在 Cyber RT 的数据闭环中,cyber_recorder record 是最常用的数据采集入口。它把自动驾驶系统中各通道(Channel)的消息按时间顺序写入磁盘,形成可回放的 .record 文件。理解 record 命令的参数、录制策略、通道过滤与文件切分机制,是构建稳定数据采集流程的基础。

一、核心原理:record 命令如何工作

cyber_recorder record 启动后,会向 Cyber RT 的传输层订阅指定通道,收到消息后按“通道 + 时间戳 + 原始字节”的格式追加写入文件。其内部由三个关键角色协作:订阅管理器负责按通道名或正则表达式建立订阅;写入器负责将消息序列化并落盘;切分控制器根据文件大小或时间阈值触发新文件创建。整个过程对发布者透明,发布者无需感知录制行为。

录制文件采用分块结构,包含文件头、通道定义段和消息数据段。回放时,cyber_recorder play 会先读取通道定义,再按时间戳顺序重放消息。因此,录制时通道定义的完整性直接决定回放能否成功。

cyber_recorder record 数据流与切分机制 传感器/算法节点 发布消息 Cyber RT 通道 /camera /lidar /chassis 订阅管理器 通道过滤 / 正则匹配 写入器 序列化 + 落盘 切分控制器 按大小切分(-s) / 按时间切分(-t) 达到阈值 → 关闭当前文件 → 创建新文件 输出文件序列 record_20250101_120000_0.record record_20250101_120000_1.record ... 关键参数:-a 录制全部通道 | -c 指定通道 | -o 输出目录 | -s 单文件大小上限 | -t 单文件时长上限 | -b 起始时间 | -e 结束时间 录制策略:全量录制适合问题复现;通道过滤适合定向采集;切分策略保障单文件可管理、可传输、可回放。

二、参数配置与常用命令

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,便于后续上传和回放。操作流程如下:

  1. 确认通道:cyber_channel list | grep -E "lidar|camera|chassis"
  2. 启动录制:cyber_recorder record -c "/lidar/.*" "/camera/.*" "/chassis/.*" -s 1073741824 -o /data/record/
  3. 观察输出:终端会显示当前录制文件、消息数量与文件大小
  4. 结束录制:按 Ctrl+C,工具会完成当前文件写入并退出
  5. 校验结果:cyber_recorder info /data/record/xxx.record 查看通道与消息统计
关键点:录制结束后务必用 cyber_recorder info 检查文件完整性,确认通道数量、消息条数和时间范围是否符合预期。若发现某通道消息数为 0,通常是通道名不匹配或该通道未发布。

五、误区与复盘

误区一:认为 -a 一定能录到所有数据。实际上,-a 只录制当前已注册的通道。如果某个节点在录制启动后才发布新通道,该通道可能不会被捕获。建议在系统稳定运行后再启动录制。

误区二:忽略磁盘写入速度。高频率激光雷达和摄像头同时录制时,磁盘 I/O 可能成为瓶颈,导致丢帧。应使用 SSD 或 RAID 阵列,并监控写入速率。

误区三:切分文件后直接单独回放。切分文件之间存在时间连续性,单独回放某个分片可能缺少上下文。建议按文件名顺序批量回放,或使用 cyber_recorder play -f 指定多个文件。

误区四:不设置文件大小上限。长时间全量录制可能生成数十 GB 的单文件,导致传输困难、回放加载慢。应根据存储介质和传输方式设置合理的 -s 或 -t 阈值。

复盘时,建议记录每次采集的通道列表、切分参数、磁盘占用和消息统计,形成可追溯的采集日志。这样在后续数据分析或问题复现时,能快速定位数据来源与完整性。