配置 livox-mid70 PTP时间同步
PTP时间同步
在ros下使用livox时,我们发现,livox的时间戳需要同步同步,否则在使用中有很多麻烦,特别是tf。所以本文使用了一种不用GPS的方法对livox进行时间同步。
当livox雷达接到一个有ptp主时钟的网络时,livox雷达就可以自动的将时间戳和这个主时钟的时间戳同步起来。
第1步、检查网络中的主时钟是否正常
参考:http://linuxptp.sourceforge.net/
首先,查看网口名称
ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
......
enp111s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
......
第一个是我连接路由器的网口:eno1
查看该网口是否支持硬件时钟
ethtool -T eno1
得到如下则正常,需要PTP Hardware Clock
处有0 or 1
Time stamping parameters for eno1:
Capabilities:
hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE)
software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)
hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE)
software-receive (SOF_TIMESTAMPING_RX_SOFTWARE)
software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 1
Hardware Transmit Timestamp Modes:
off (HWTSTAMP_TX_OFF)
on (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
none (HWTSTAMP_FILTER_NONE)
all (HWTSTAMP_FILTER_ALL)
ptpv1-l4-sync (HWTSTAMP_FILTER_PTP_V1_L4_SYNC)
ptpv1-l4-delay-req (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ)
ptpv2-l4-sync (HWTSTAMP_FILTER_PTP_V2_L4_SYNC)
ptpv2-l4-delay-req (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ)
ptpv2-l2-sync (HWTSTAMP_FILTER_PTP_V2_L2_SYNC)
ptpv2-l2-delay-req (HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ)
ptpv2-event (HWTSTAMP_FILTER_PTP_V2_EVENT)
ptpv2-sync (HWTSTAMP_FILTER_PTP_V2_SYNC)
ptpv2-delay-req (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)
如下是关闭状态:
Time stamping parameters for enp111s0:
Capabilities:
hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE)
software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)
hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE)
software-receive (SOF_TIMESTAMPING_RX_SOFTWARE)
software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
off (HWTSTAMP_TX_OFF)
on (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
none (HWTSTAMP_FILTER_NONE)
all (HWTSTAMP_FILTER_ALL)
如下是没有硬件
Time stamping parameters for enp4s0:
Capabilities:
software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)
software-receive (SOF_TIMESTAMPING_RX_SOFTWARE)
software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
PTP Hardware Clock: none # 这里
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none
第2步、安装能发起ptp的软件
第一种,安装ptpd
比较推荐这个,问题较少
sudo apt install ptpd
#这种方法安装,就用命令 ptpd
第二种,安装linuxptp
git clone http://git.code.sf.net/p/linuxptp/code linuxptp
cd linuxptp
make
sudo make install
#这种方法安装,就用命令 ptp4l
linuxptp是Precision Time Protocol (PTP)的实现,
以linuxptp命名ptp协议栈一定程度上有点片面,详细分析linuxptp会发现该开源软件包含的内容相当丰富,大致可以分为4个部分:
- 将GPS时间同步到PHC,这是一种使用1pps + TOD的时间同步技术,主要由ptp协议栈中的ts2phc进行实现。
- 对ptp协议的Ordinary clock, Boundary clock等时钟“角色”的实现,是对1588协议的实体化,主要由ptp协议栈中的ptp4l实现。
- 实现PHC时间同步到系统时间,由ptp协议栈中phc2sys实现。
- 其他就是一些调试和维测工具,如
phc_ctl
。
第3步、启动
启动PTP
#首选
#ptpd
sudo ptpd -M -i eno1 -C
#客户端
sudo ptpd -s -i eno1 -C
#客户端收到后修改自身系统时间
sudo ptpd -s -i eno1 -C -V
或者linuxptp:
# 服务端(主钟)
sudo ptp4l -i eno1 -l 6 -m
# 客户端(从钟)
sudo ptp4l -i eno1 -l 6 -m -s
如果还想要通过ptp来修改系统时间的话,还需要进一步设置
参考文章:https://www.bilibili.com/read/cv16082681/
#主钟,赋予网口系统时间或者pps时间
sudo phc2sys -m -s CLOCK_REALTIME -c enp0s31f6 -w
sudo ptp4l -i enp0s31f6 -m -H
#从钟,根据ptp修改系统时间
sudo phc2sys -m -s eno1 -w
sudo ptp4l -i eno1 -m -H -s
第4步、验证
-
在livox官网(https://www.livoxtech.com/cn/downloads)下载
Livox Viewer 0.10.0(64bit) - Ubuntu 16.04
(ubuntu18同样可以使用) -
解压->进入文件->打开livox_viwer(
./livox_viewer.sh
) -
连接雷达,在setting中查看PTP的状态。
未开启前:PTP State为 No 1588 Signal
开启后:
到这里,同步就算完成了
但是还需要配置一下启动命令的开机自启动。
第5步、启动命令开机自启
ubuntu18及之后版本开机自启参考文章:https://zhuanlan.zhihu.com/p/271963900
编辑文件:/etc/rc.local
把开机要执行的命令放到 exit0 前面。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
ptpd -M -i eno1 &
#或者:
#ptp4l -i eno1 -l 6 &
#其中 & 是ubuntu命令后台运行; -C是前台运行, 可以根据ptpd -h来查看
exit 0
参考文献
[1] livox device time synchronization manual
[2] PTP(Precision Time Protocol)高精度时间同步协议+CS模式测试代码
[3] Ubuntu 16.04添加开机启动脚本的方法