返回专辑
·Johan·4 分钟阅读

传感器时间同步:stamp 语义比算法更重要

区分采集/到达/曝光中点三种时间戳,比较硬同步与软件 offset 估计,给出 bag 可复现的同步验收。

传感器时间同步:stamp 语义比算法更重要

1. bias 发散三天,最后是 stamp 错了

VIO 项目里 IMU 预积分和视觉残差长期对不上,调噪声、调外参、换前端都没用——最后发现相机 header.stamp 填的是主机到达时间,平均滞后 12ms、方差 4ms。融合算法假设的是采集时刻;驱动填 arrival time,等价于给观测加了未知时变延迟,预积分在错误时间上对齐,bias 会被迫吸收系统误差。

SLAM/VIO/LIO 论文默认「观测带正确时间戳」。真机上最常见的崩溃之一,是时间语义不一致:用 arrival 当 capture、曝光中点与快门模型不符、雷达点时间与 IMU 不在同一时钟域。团队契约应写死:stamp 是哪一种时间、谁负责正确性、算法层禁止猜。

2. 三种时间不要混

语义典型来源误用后果
采集时间传感器内部时钟 + 曝光模型融合与去畸变所需
到达时间now() / 网卡收包含 USB/调度 jitter
曝光中点快门开始 + 积分时间/2卷帘去畸变所需

全局快门常用 。卷帘快门每行时刻不同;快速运动下忽略行时戳,表现像外参错或「高速转弯掉高程」。能提供 per-row timestamp 或 rolling shutter 模型的驱动值得优先选——Kalibr 支持 rs cam;全局快门仍是多数 VIO 的 hard requirement。

3. LiDAR 与 IMU 的接口

机械雷达一帧内各点采样时刻不同,LIO 去畸变需要

驱动只给帧头、不给 per-point offset 时,去畸变退化为「整帧同一时刻」——快速 yaw 必弯墙。Velodyne/Ouster 驱动通常有 time field;使用前先验证 offset 范围 ≈ 扫描周期。

IMU 200–1000Hz,是插值姿态与估计相机/LiDAR 相对 IMU 常数偏移 的桥梁。要求 stamp 单调、无跳变、单位一致(rad/s、m/s²);丢包应可检测——silent drop 比 explicit gap 更危险。

4. 硬同步 vs 软件估计

硬同步(优先):PPS、IEEE 1588 PTP、相机 external trigger 对齐 IMU sample、雷达锁 GPS/PTP。动态运动下 offset 稳定;成本是布线、驱动支持,仍需 offline 验证。

软件估计:Kalibr / VIO 在线估 。部署简单,但可观性依赖加速度激励(需要 acceleration excitation);负载/温度变化可能 drift。产品策略:能硬同步就硬同步,软件估计作 backup 与诊断,不要当唯一真相。

5. ROS 2 典型坑

  • use_sim_time 与真机混用
  • 多 host 未 PTP → TF extrapolation error
  • 驱动用 this->now() 填 stamp(最差实践)
  • 录 bag 时各 topic stamp 来源不一致
  • 回放 bag 时 CPU 跟不上 → 伪 jitter

诊断核心:画 直方图,应接近常数(= ),std 目标 < 1–2ms;若随 CPU 负载变化,stamp 多半是 arrival time。

bash
ros2 topic delay /camera/image_raw
ros2 topic hz /imu/data --window 1000
ros2 run tf2_ros tf2_monitor

6. 与算法模块的契约

团队内应固定:

  • 融合输入必须是 capture timestamp
  • 驱动负责 stamp 正确性;算法不猜
  • 配置显式写 timeshift_cam_imu(秒)及来源(Kalibr / 在线)
  • bag metadata 记录同步模式(hardware trigger / software / unknown)

7. 案例:注入时延可检测

fix 外参与噪声,对同一 bag 把 image stamp 整体 +5ms 再跑 VIO——ATE 应可检测恶化。若 +5ms 无感,多半 stamp 本身已是 arrival time 或 未正确补偿,而不是算法「鲁棒」。同一项目里我们还试过把 LiDAR 帧头当点时刻——快速直线还好,原地转圈时墙线弯成弧线,和「外参 yaw 偏了」的症状一模一样,直到打开 per-point offset 才消失。

导航事故袋若没有各 topic 的 stamp 统计摘要,复盘只能猜同步模式。状态层录包应附带关键 topic 的 diff mean/std,证据链完整才分得清是算法责任还是时间契约责任。

8. 验收

  • 静止 5min:各 topic 频率稳定、stamp 单调、diff 常数
  • 已知时延注入:+5ms 应恶化 ATE / reproj
  • 快速 yaw:去畸变后墙/边缘直线度
  • 双机(若多机):PTP offset 视需求 < 1ms
  • CI 弱版:bag 内 stamp 单调性与 diff 统计自动化

时间戳是传感器与融合之间的行为接口;语义不清,再强的后端只是在错误时钟上优化。

← 全部文章

johan's blog