【硬件调试-1】配置 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添加开机启动脚本的方法

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值