0. 简介
之前时间同步也写过一篇文章介绍机器人&自动驾驶中的时间同步。在最近的学习中发现一些额外需要阐述学习的内容,这里就再次写一些之前没写到的内容。
1. NTP
NTP 是网络时间协议,用来同步网络中各计算机时间的协议,把计算机的时钟同步到标准世界时间即UTC时间。NTP version 1 出现于1988年6月,最新的NTP协议标准NTPv4,精度在局域网中可以达到0.1ms,在互联网中大多数地方也可以达到1-50ms。
在一些同步精度要求不高的场合, 达到秒级即可以, 为此推出了 NTP的简化版标准 SNTP 协议(Simple Network Time Protocol), 它简化和缩减了 NTP协议的数据处理算法, 方便应用于同步精度要求不高的场合。
为了寻求并提供精确时间,NTP的时间服务器会与客户端交换时间,利用对方给予的数据计算延迟或误差秒数,并重新调整服务器时间。NTP传输UTC时间的模式为层级状,第零层接收”真实时间”的卫星系统为所有时钟的参考,并将时间传到第一层,第一层再传到第二层,第二层接着传到第三层,如此一来可以避免请求量过大的情况,相对的时间精准度可能也会随着层级下降。
NTP一般只可以用作消费级的内容,是远远不能满足车规级的,因为NTP自身就不稳定,所以还是使用PTP和gPTP多一些
2. PPS
在自动驾驶系统中,时间源一般是来自GPRMC+PPS的信号组合,GNSS接收机的 NMEA-0183 GPRMC报文可以输出UTC时间信息,同时还有一路单独的PPS秒脉冲信号,PPS信号精度在几十ns级别,可以用来精确校时。
这一块之前在之前的文章中就详细介绍了PPS,虽然PPS精度是要比PTP高的,但是实际上很多传感器是不支持PPS硬触发的,所以PTP和gPTP目前是车规的主流同步方式
3. PTP
精确时间协议(PTP)是一种用于在整个计算机网络中同步时钟的协议。在局域网上,它可实现亚微秒级的时钟精度,使其适用于测量和控制系统。IEEE 1588专为要求精度超出使用NTP可获得的精度的本地系统而设计。IEEE 1588标准描述了用于时钟分配的分层主从体系结构。在这种体系结构下,时间分配系统由一个或多个通信媒体(网段)和一个或多个时钟组成。
PTP同步模式采用主从式(master-slave architecture)架构,指每个PTP网域内只有一个主时钟(grandmaster clock),主时钟可直接收到卫星系统的时间,故其最为稳定、精准,在节点底下接收的则为从属时钟,换言之,主时钟与从属时钟同步时间后,后者会再将精确数据送到不同设备。PTP亦使用最佳主时钟算法(Best master clock algorithm),自动选择每个网域内的主要时钟。
PTP之所以优于NTP,是因为前者拥有硬件时间戳(Timestamps)与透明时钟(Transparent clock),比起利用在应用层记录时间戳的NTP,PTP利用实体层(硬件)更能将延迟降到最低,并计算出以供接收端计算自己与网络时间的误差,透明时钟则是用来测量通讯介质的延迟,再交由系统补足延迟的时间。
[外链图片转存中…(img-Kw5Wur59-1695711034039)]
如果需要检查两个设备的PTP时间同步状态可以看一下PTP(Precision Time Protocol)高精度时间同步协议+CS模式测试代码,如果是通信设备可以看一下通过PPS信号验证PTP同步这一篇文章。
4. gPTP
工业网络的一个特殊优势在于其快速“启动” 能力,在同步的语境中,这意味着它可以在几秒钟之内锁定并进行精确定时。为了促进实现这个目标,gPTP系统使用逻辑同步(频率对齐)技术,而不是使用其他PTP系统中的物理同步技术。 这一点,再加上对通道和设备延迟的实时测量,使得网络中的桥接节点和端部节点可以快速实现时间对齐(同步)。
gPTP通过标有时间戳的报文消息交换,在主时钟与多个桥接设备和端点设备之间进行时间通信。 带有时间戳的报文消息是SYNC,PEER_DELAY_REQ 和PEER_DELAY_RESP, 如下所示。与其他PTP实现方式的明显区别在于,gPTP还使用时间戳消息计算频偏,并在运行过程中进行调整。