激光雷达与系统PTP时间同步
前言
无
一、安装软件工具
sudo apt update
sudo apt-get install linuxptp ethtool
二、确定网卡的时间同步功能
sudo ethtool -T 网卡名字(ifconfig可以查看)
注意:此处显示的hardware或software表示网卡对时间同步具备那些功能。其中,硬件同步能够达到微秒量级,软件同步额外误差在1-2ms
三、将网卡配置为grand master clock并运行
1、hardware
cd /etc/linuxptp
sudo -H gedit ./ptp4l.conf
(找到boundary_clock_jbod,修改值为1,且网卡名添加进去)
另外,为防止网络上存在多个master clock而引起冲突,可以将该网卡的ClockClass (时钟等级)设置的高一些,从而使其作为更优先的PTP参考时钟。设置方法很简单,找到clockClass条目,将原先的内容用“#”注释掉然后添加新的条目如下(原先数值为248,新值为128,数值越小表示优先级越高)
当然,如果确认网络中只有一个master clock,那不需要修改clockClass数值。
2、software
如果网卡只有software,需要将上述文件中的time_stamping参数的值设为software而不是默认的hardware.
sudo mkdir -p /etc/systemd/system/ptp4l.service.d
sudo -H gedit override.conf
在override.conf文件中写入下面内容
[Service]
ExecStart=
ExecStart=/usr/sbin/ptp4l -f /etc/linuxptp/ptp4l.conf
保存退出后,运行(重新加载 ptp4l)
sudo systemctl daemon-reload
sudo systemctl restart ptp4l
sudo systemctl status ptp4l
显示“assuming the grand master role”,表明网卡已经作为grand master clock并正常运行,此时它已经开始对外广播PTP同步数据包。上面还给出了该master clock的ID 为98fa9b.fffe.e8de37。 如果sudo systemctl status ptp4l没有显示以上提示信息,则可以多执行几次来查询最新状态,可能需要过十几秒钟才能看到。
四、用linux系统时间同步网卡的硬件时钟
默认情况下网卡会去抓取操作系统的时间并作为master clock对外提供参考,但是实际上抓取系统时间的操作本身会带来1~2毫秒的延时,导致PTP同步精度下降。为此,可以通过载入更新的phc2sys系统服务组件对网卡的硬件时钟先进行同步,消除这个延时。方法如下:
sudo mkdir -p /etc/systemd/system/phc2sys.service.d
sudo -H gedit override.conf
在override.conf文件中写入
[Service]
ExecStart=
ExecStart=/usr/sbin/phc2sys -O 37 -s CLOCK_REALTIME -c eth0
参数 -O 37 是指系统时间(UTC时间)和PTP时间(TAI时间)的37秒 offset (当前的闰秒数),如果希望雷达时钟以UTC来表示,则可设为 -O 0.
最后,重新运行phc2sys服务:
sudo systemctl daemon-reload
sudo systemctl restart phc2sys
sudo systemctl status phc2sys
五、若需要,配置Lidar
以ouster为例:
nc <lidar_ip> 7501
set_config_param timestamp_mode TIME_FROM_PTP_1588
reinitialize
save_config_params
通过get_time_info获取雷达的时钟信息,可以发现其时间显示为16多亿秒,并且同步模式是TIME_FROM_PTP_1588,这说明雷达时间已经被正确同步上了。
六、确认PTP同步状态
可以通过http http://<lidar_ip>/api/v1/system/time/ptp 来查询当前雷达的PTP同步状态,如下图所示。关注点已经在红框中标出。其中最重要的那个”offset_from_master” 指的就是雷达时钟与PTP master时钟的同步差异,单位为ns。在PTP成功同步时,该数值一般小于1 ms。