3. 时间系统与时钟模型
在多传感器载荷同步中,所有传感器最终都要回答同一个问题:这一帧数据究竟发生在什么时刻?如果相机、IMU、激光雷达、GNSS 各自使用独立的时间标签,而它们对“秒”的定义、起点和传播延迟又不同,那么后续的融合、标定和轨迹重建都会出现系统性偏差。因此,理解时间系统与时钟模型,是同步与标定的第一块基石。
一、核心原理:从“时间标准”到“本地时钟”
时间系统解决的是“绝对时间参考”问题,而时钟模型解决的是“本地设备如何逼近这个参考”的问题。两者不能混为一谈。
- UTC(协调世界时):以原子时为基础,通过闰秒与地球自转保持接近,是人类社会、日志系统和多数操作系统使用的通用时间标准。它包含闰秒,因此不是严格均匀的时间尺度。
- GPS时(GPST):由 GPS 卫星星座维护的连续时间尺度,起点为 1980-01-06 00:00:00 UTC。GPS时不含闰秒,因此与 UTC 之间存在整数秒偏差,截至当前已相差 18 秒。GNSS 接收机输出的时间通常以 GPS时或 UTC 表示,需明确配置。
- PPS(秒脉冲):一种硬件信号,每秒输出一个上升沿,代表“整秒到达”的物理时刻。PPS 本身不携带日期和时刻信息,只提供高精度的时间间隔基准,常与 NMEA/UBX 报文中的“秒数”配合,构成完整时间戳。
- NTP(网络时间协议):通过以太网或互联网与时间服务器交换报文,估算往返延迟并校正本地时钟。典型精度在毫秒级,适合非实时、对成本敏感的场合。
- PTP(精确时间协议,IEEE 1588):通过硬件时间戳和主从时钟交换 Sync/Follow_Up/Delay_Req/Delay_Resp 报文,补偿链路延迟,可实现亚微秒级同步,适合相机、激光雷达、工业控制等高速载荷。
本地时钟通常由晶振驱动。晶振并非理想器件,其实际频率会随温度、电压、老化和负载变化而偏移,这种偏移称为晶振漂移。漂移表现为频率偏差(ppm)和相位偏差(时间误差累积)。例如,一个 10 ppm 的晶振每天可能累积约 0.864 秒误差;即使经过初始校准,温度变化仍会引入新的漂移。因此,时钟同步的本质是:用外部高精度参考不断测量并补偿本地时钟的频率偏差和相位偏差。
二、方法流程:从时间源到传感器时间戳
一个典型的无人机多传感器时间同步流程可以概括为以下步骤:
- 选择主时间源:通常以 GNSS 的 PPS + GPS时作为绝对参考,因为它在户外可获取且精度高。
- 建立本地时钟:飞控或同步板使用晶振计数器维护一个连续递增的本地时间,避免因 GNSS 短时失锁导致时间跳变。
- 测量偏差:通过 PPS 捕获本地计数器值,计算本地时钟与 GPS时的相位差和频率差。
- 补偿与驯服:采用 PI 控制器或卡尔曼滤波调整本地时钟的计数增量,使其频率和相位逐步逼近参考。
- 分发时间:通过 PTP 或硬件触发线,将同步后的时间基准分发给相机、IMU、激光雷达等载荷。
- 打时间戳:各传感器在数据采集时刻记录本地时间,并转换为统一时间参考。
关键点:PPS 只给出“秒沿”,不给出“秒数”。必须将 PPS 与 GNSS 报文中的周内秒(TOW)或 UTC 日期时间结合,才能得到完整时间戳。否则会出现“知道整秒到了,但不知道是哪一秒”的问题。
三、案例/场景:GNSS 失锁下的时钟保持
无人机在穿越桥洞或城市峡谷时,GNSS 可能短时失锁。此时若直接使用 GNSS 时间,时间戳会出现跳变或中断。工程上通常采用“GNSS 驯服 + 晶振保持”的策略:
# 伪代码:本地时钟驯服与保持
if gnss_pps_valid:
# 测量本地计数器与PPS的偏差
phase_error = local_counter_at_pps - expected_counter
freq_error = (phase_error - last_phase_error) / dt
# PI控制器调整本地时钟增量
adjust = Kp * phase_error + Ki * integral_error
local_clock_rate = nominal_rate + adjust
else:
# GNSS失锁:保持最后一次校准的频率
local_clock_rate = last_calibrated_rate
# 依靠晶振短期稳定性维持时间
# 注意:漂移会随时间累积,需在恢复后重新驯服
假设晶振漂移为 5 ppm,GNSS 失锁 10 秒,则累积时间误差约为 50 微秒。对于 100 Hz 的 IMU,这相当于 0.005 个采样周期,短期可接受;但若失锁 10 分钟,误差将累积到 3 毫秒,足以影响视觉惯性里程计的精度。因此,失锁时间越长,对晶振稳定性的要求越高。
四、常见误区与复盘
| 误区 | 问题 | 正确做法 |
|---|---|---|
| 把 UTC 和 GPS时混用 | 两者相差 18 秒闰秒,导致时间戳整体偏移 | 统一使用一种时间尺度,并在配置中明确标注 |
| 只使用 NTP 同步相机 | NTP 精度为毫秒级,无法满足高速载荷 | 对高精度载荷使用 PTP 或硬件 PPS 触发 |
| 忽略晶振漂移 | 长时间运行后时间误差累积,融合轨迹漂移 | 定期驯服,或使用 TCXO/OCXO 提高短期稳定性 |
| PPS 未与报文对齐 | 只知道整秒沿,不知道对应哪一秒 | 将 PPS 与 TOW/UTC 报文配对使用 |
| 时间戳在软件层打 | 操作系统调度和驱动延迟引入抖动 | 尽量在硬件或驱动层打时间戳,减少软件路径 |
排障提示:如果发现多传感器数据在静止时对齐良好,但运动时出现固定滞后,优先检查时间戳是否在数据采集时刻生成,而不是在数据发送或接收时刻生成。发送/接收时间戳会引入与负载和链路相关的可变延迟,破坏同步精度。
总结来说,UTC 和 GPS时解决“时间参考”问题,PPS 提供“整秒物理沿”,NTP/PTP 解决“网络分发”问题,晶振漂移则是本地时钟必须持续补偿的误差源。只有把这几层关系理清,并在硬件、驱动和软件层分别落实时间戳策略,才能为后续的多传感器标定和融合提供可靠的时间基准。