2. 时间系统基础

在机器人系统中,“时间”不是抽象概念,而是所有传感器数据、控制指令、日志记录和状态估计的公共坐标轴。激光雷达的一帧点云、相机的一张图像、IMU 的一段角速度、底盘的一次里程计更新,只有被放到同一个时间基准上,才能进行融合、标定和闭环控制。本节先建立时间标准的全局图景,再讨论时钟漂移、时钟偏移与时钟同步这三个最容易被混淆的基本概念。

一、常见时间标准及其关系

现实世界中最常用的时间标准并不是同一个东西,它们各自服务于不同领域,彼此之间存在固定的偏移量。理解这些偏移,是后续做多传感器时间对齐的前提。

  • UTC(协调世界时):以原子时为基础,通过闰秒调整使其接近地球自转。它是民用时间的基准,我们日常看到的“北京时间”就是 UTC+8。UTC 的秒长均匀,但会因为闰秒出现不连续的跳变。
  • TAI(国际原子时):由全球原子钟加权平均得到,秒长严格均匀,不插入闰秒,是连续、单调的时间尺度。TAI 与 UTC 的差值为整数秒,截至当前约为 37 秒,即 TAI = UTC + 37 s。
  • GPS 时间:由 GPS 卫星星载原子钟维持,起点为 1980-01-06 00:00:00 UTC。GPS 时间同样不跳闰秒,因此它与 TAI 保持固定偏移:TAI = GPS + 19 s,进而 GPS = UTC + 37 − 19 = UTC + 18 s(当前值)。
  • Unix 时间:从 1970-01-01 00:00:00 UTC 起算的秒数,通常以 UTC 为参考,因此会受闰秒影响。工程中常用其毫秒或微秒形式作为时间戳。
  • ROS 时间:ROS 内部使用 ros::Time 或 rclcpp::Time,本质是秒+纳秒的二元组。它既可以来自系统时钟(Wall Time),也可以来自仿真时钟(Sim Time),由 /clock 话题或 use_sim_time 参数决定。

关键换算关系(当前历元):

TAI  = UTC + 37 s
GPS  = UTC + 18 s
TAI  = GPS + 19 s
Unix = UTC 起算的秒数(受闰秒影响)
ROS  = 秒 + 纳秒,来源可为系统时钟或仿真时钟

下面这张图展示了各时间标准之间的偏移关系与转换路径,是本节最核心的结构图。

常见时间标准偏移关系与转换路径 UTC 协调世界时(含闰秒) TAI 国际原子时(连续) GPS 时间 起点 1980-01-06 Unix 时间 1970-01-01 起算 ROS 时间 秒 + 纳秒 系统时钟 Wall / Sim Time +37 s −19 s 起算点 时间戳 提供源 注:偏移量随闰秒更新而变化,工程中应以实际历元查表为准

二、时钟漂移、时钟偏移与时钟同步

有了统一的时间标准,还需要理解本地时钟与标准时间之间的误差来源。这里涉及三个层层递进的概念。

  • 时钟偏移(Clock Offset):某一时刻本地时钟与参考时钟之间的瞬时差值。例如本地时钟显示 10:00:00.120,标准时间是 10:00:00.000,则偏移为 +120 ms。偏移是一个“点”上的量。
  • 时钟漂移(Clock Drift):本地时钟频率与理想频率之间的相对偏差,通常用 ppm(百万分之一)表示。晶振受温度、老化影响,频率不可能绝对准确。漂移导致偏移随时间线性累积,是一个“斜率”量。
  • 时钟同步(Clock Synchronization):通过协议或算法估计并补偿偏移与漂移,使多个节点的时钟在可接受误差内保持一致。同步的目标不是消除误差,而是把误差控制在系统容忍范围内。

一句话区分:偏移是“现在差多少”,漂移是“每秒会多差多少”,同步是“如何把两者压到阈值以内”。

可以用一个简单模型描述本地时钟:

t_local = (1 + ρ) · t_true + θ

其中:
  ρ  为时钟漂移率(ppm 量级,如 20 ppm = 2e-5)
  θ  为初始时钟偏移
  t_true 为参考时间

若 ρ = 20 ppm,则每经过 1 秒,本地时钟会多走 20 微秒;经过 1 小时,累积偏移约 72 毫秒。对于 10 Hz 的激光雷达与 100 Hz 的 IMU 融合,这个量级已经足以造成明显的运动畸变和标定误差。

三、典型场景:多传感器时间戳对齐

假设一台移动机器人同时搭载激光雷达、相机和 IMU。三者各自使用自己的时钟打时间戳,若不做同步,会出现以下现象:

  1. 激光雷达一帧点云内部各点时间不同,若直接按帧头时间处理,快速转弯时点云会被“拉弯”。
  2. 相机曝光时刻与 IMU 采样时刻存在固定偏移,视觉惯性标定会得到错误的外参和时间延迟。
  3. 不同节点的 ROS 时间来自各自系统时钟,若未启用 NTP/PTP,偏移可能达到数十毫秒并持续漂移。

工程上通常采用“硬件触发 + 软件时间戳 + 在线估计”的组合策略:用 PPS 或 PTP 把各节点时钟对齐到同一基准,再在标定阶段估计并补偿残余的时间延迟。

四、常见误区与复盘

误区 后果 正确做法
把 UTC 与 TAI 混用 引入约 37 秒的固定偏差 明确数据源使用的时间标准,统一换算
认为 GPS 时间等于 UTC 产生 18 秒量级错误 记住 GPS = UTC + 18 s(当前)
忽略时钟漂移,只做一次对齐 偏移随时间累积,长时间运行后失配 周期性重同步或在线估计漂移率
ROS 中混用 Wall Time 与 Sim Time 仿真与实车时间轴不一致,回放错乱 统一设置 use_sim_time,检查 /clock
用消息接收时间代替采样时间 引入通信延迟,破坏时间对齐 使用传感器硬件时间戳或驱动打标时间

复盘要点:时间同步问题的排查顺序应为——先确认时间标准是否统一,再检查偏移量级,最后评估漂移率。多数“标定不准”的问题,根源并不在算法,而在时间戳本身。

掌握本节的时间标准体系与三个基本概念后,后续讨论 NTP、PTP、PPS 以及 ROS 时间接口时,就能清楚地知道每一步在解决哪一类误差。