Livox设备时间同步(livox device time synchronization manual)
1 时间同步说明
Livox设备支持3种时间同步方式:
PTP:IEEE 1588v2.0 PTP 网络协议同步;
GPS:秒脉冲+GPRMC时间数据,组成GPS时间同步方式;
PPS:秒脉冲同步,需要上层应用程序通过其他途径(如:uart)获取每个脉冲的时间信息,并修正点云时间。目前仅LiDAR支持这种同步方式,且由于用法较为复杂,不推荐用户使用这种方式进行LiDAR时间的同步。
不同设备支持的同步方式:
| 设备 | 支持的同步方式 |
|---|---|
| Livox LiDAR | 1. PTP v2 2. GPS 3. PPS(不推荐使用) |
| Livox Hub | 1. PTP v2 2. GPS |
1.1 同步原理
1.1.1 PTP时间同步原理
同步过程使用IEEE 1588v2.0 PTP的Delay request-response机制(two steps),Livox设备作为slave端,和master时钟设备进行ptp时间同步。
master和slave时钟通过Sync、Follow_Up、Delay_Req、Delay_Resp这几个数据包的交互,得到t1、t2、t3、t4时间,通过如下计算得到传输路径延迟和两时钟的偏移:
传输路径延时:Delay = [(t4 – t1) – (t3 – t2)]/2
时间偏移:Offset = (t2 - t1) - Delay = [(t2 – t1) + (t3 – t4)]/2
1.1.2 GPS时间同步原理
GPS时钟源的PPS端口每秒发送一次硬件脉冲(PPS信号),随后数据端口发送一次对应这个脉冲上升沿的时间信息(GPRMC格式)。
Livox设备接收到PPS信号上升沿,并由GPRMC数据解析出正确的时间信息后,会设置点云时间为GPS时间,并保持此时间基准持续累加,来实现和GPS设备的时间同步。
-
Livox Hub可以直接接收RS485电平的GPRMC信号;
-
Livox LiDAR无法直接接收GPRMC信号,需要将GPRMC数据端口接入PC,然后通过sdk协议发送给雷达;
PPS信号和GPRMC信号的时序要求:
| 时间 | 描述 | 有效范围 | 推荐值 |
|---|---|---|---|
| t0 | 相邻两次秒脉冲上升沿的间隔 | 900 ms ~ 1100 ms | 1000 ms |
| t1 | 秒脉冲的高电平时间 | 5 ms ~ 900 ms | 10 ms ~ 200 ms |
| t2 | GPRMC的传输时间(波特率:9600bps) | ≈ 70 ms | 70 ms |
| t3 | GPRMC数据开始发送相对于脉冲上升沿的延迟 | 0 ms ~ 900 ms | 0 ms ~ 430 ms |
1.2 应用场景
PTP:
在没有GPS和PPS硬件信号的情况下,PTP v2可用于Livox LiDAR/Hub和其他设备之间的时间同步。这种方法所需要的外部硬件支持最少,只需要在整个网络中有一个master时钟设备即可。
GPS:
Livox Hub接入多个LiDAR时可以使用这种同步方式,Livox Hub需要接入GPS接收器的PPS信号,以及GPRMC格式的时间信号,此时LiDAR点云时间会自动修正成GPS时间。
Livox LiDAR也可以使用GPS同步,但需要将GPRMC信号接入PC,然后通过SDK协议将时间数据发送给LiDAR。
2 使用方法
2.1 PTP
当Livox LiDAR或者Hub连接到有ptp master时钟的网络中时,设备会自动同步自己的时间到主时钟。
2.1.1 配置和使用
第一步:检查网络中的master时钟是否正常:
PC上配置主时钟的方法可参考附录 配置PTP主时钟;
如果网络中有Sync、Follow_Up这两个数据,则说明存在PTP master时钟源,且正常工作:
第二步:连接Livox LiDAR/Hub
通过网线正常连接Livox LiDAR/Hub即可,无需额外接线。
第三步:如何查看设备在使用PTP 1588同步
1、通过查看点云数据包头中的timestamp_type数据,点云数据协议:https://github.com/Livox-SDK/Livox-SDK/wiki/Livox-SDK-Communication-Protocol
如果timestamp_type为1,则说明设备正在进行PTP时间同步:
| timestamp_type | data_type | 时间类型 |
|---|---|---|
| 1 | uint64_t | 纳秒(ns) |
2、或者在Livox Viewer上位机中,查看Settings选项,下图的Sync State表明Hub在使用ptp 1588同步。
2.1.2 注意事项
- PTP同步优先级最高,当PTP、PPS或GPS同时可用时,会优先使用PTP网络同步;
- 不支持具有多个主时钟的网络环境;
- 百纳秒精度;
2.2 GPS
为了兼容其他厂商的LiDAR硬件,Livox设备也支持GPS时间同步。
由于Livox有不同种类的硬件(LiDAR/Hub),在使用GPS同步时,可以将硬件接口分为3类:
- 使用Livox Hub;
- 使用Livox Converter 1.0连接的LiDAR(如:Mid-40、Mid-100);
- 使用Livox Converter 2.0连接的LiDAR(如:Tele-15、Horizon);
下面将分别介绍如何使用这3种接口进行GPS时间同步。
2.2.1 配置和使用
2.2.1.1 Livox Hub
硬件连接
如果GPS模块的时间信号和PPS信号是RS485电平,直接将线接入Hub的GPS时间同步口(GPS sync port)即可。
如果GPS模块的时间信号和PPS信号是TTL电平,则需要进行如下的电平转换后,才能将信号接入Hub的GPS时间同步口(GPS sync port)。
备注:
Hub使用GPS同步时,不需要进行SDK软件的配置。
2.2.1.2 Livox Converter 1.0
目前默认使用Livox Converter 1.0的设备有:
- Mid-40
- Mid-100
硬件连接
将GPS模块的时间信号(GPRMC)通过TTL转usb模块接入PC,PPS信号接入LiDAR转接盒同步口(Sync Port)。
如果GPS模块输出的PPS为RS485电平的信号,则上图可以省略TTL转485模块。
软件配置
由于需要PC接收GPRMC数据,然后通过SDK协议发送给LiDAR,对产品的固件版本有如下要求:
- Mid firmware version: >= v03.07.0000
- SDK version >= v2.1.0
使用ROS driver的情况
1、按照上面的介绍正确连接硬件;
2、查看接入PC的usb模块的端口名称,例如 /dev/ttyUSB0,添加到 livox_lidar_config.json 文件中"timesync_config"的"device_name",然后将"enable_timesync"配置为 true,波特率"baudrate_index"可以参考 https://github.com/Livox-SDK/livox_ros_driver 来配置具体数值;
"timesync_config": {
"enable_timesync": true,
"device_name": "/dev/ttyUSB0",
"comm_device_type": 0,
"baudrate_index": 2,
"parity_index": 0
3、运行launch file;
**只使用SDK的情况 **
下面的链接是实现GPRMC数据接收和解析,并通过SDK协议发送给LiDAR的程序:
https://github.com/Livox-SDK/Livox-SDK/tree/master/sample_cc/lidar_utc_sync
2.2.1.3 Livox Converter 2.0
目前包装盒中标配使用Livox Converter 2.0的设备有:
- Horizon
- Tele-15
硬件连接
将GPS模块的时间信号(GPRMC)通过TTL转usb模块接入PC,PPS信号接入LiDAR转接盒同步口(Sync Port)。
软件配置
由于需要PC接收GPRMC数据,然后通过SDK协议发送给LiDAR,对产品的固件版本有如下要求:
- Horizon firmware version: >= v06.06.0000
- Tele-15 firmware version: >= v07.09.0000
- SDK version >= v2.1.0
使用ROS driver的情况
1、按照上面的介绍正确连接硬件;
2、查看接入PC的usb模块的端口名称,例如 /dev/ttyUSB0,添加到 livox_lidar_config.json 文件中"timesync_config"的"device_name",然后将"enable_timesync"配置为 true,波特率"baudrate_index"可以参考 https://github.com/Livox-SDK/livox_ros_driver 来配置具体数值;
"timesync_config": {
"enable_timesync": true,
"device_name": "/dev/ttyUSB0",
"comm_device_type": 0,
"baudrate_index": 2,
"parity_index": 0
3、运行launch file;
**只使用SDK的情况 **
下面的链接是实现GPRMC数据接收和解析,并通过SDK协议发送给LiDAR的程序:
https://github.com/Livox-SDK/Livox-SDK/tree/master/sample_cc/lidar_utc_sync
2.2.3 状态检查
1、通过查看点云数据包头中的timestamp_type数据,点云数据协议:https://github.com/Livox-SDK/Livox-SDK/wiki/Livox-SDK-Communication-Protocol
如果timestamp_type为3,则说明设备正在进行GPS时间同步:
| timestamp_type | data_type | 时间类型 |
|---|---|---|
| 3 | UTC(8 Bytes) | UTC时间格式 |
UTC时间格式:
2、或者在Livox Viewer上位机中,查看Settings选项,下图的Sync State表明Hub在使用GPS同步。
2.2.3 注意事项
- 通常情况下,GPS模块接收到GPS信号,才能正常输出PPS信号和时间信号。在使用时,需要确保GPS信号是稳定的;
- 目前时间信号只支持GPRMC/GNRMC这两种格式;
- 1 us级别精度
2.3 PPS
由于这个用法较为复杂,不建议用户使用这种同步方式
Livox LiDAR每次接收到PPS信号的上升沿后,会将当前时刻的点云时间置为0,然后重新开始计时直到下一个PPS脉冲到来。我们可以利用这个特性,来实现PPS脉冲对LiDAR时间的同步。
下面是实现这个流程的伪代码:
// PPS Time Synchronization
static uint64_t lidar_time_last;
static uint64_t lidar_time_real;
// 1. Read the PPS rising edge time, Unit is nanosecond.
uint64_t pps_time_ns = get_pps_rising_nsecond();
// 2. Read LiDAR point time, Unit is nanosecond.
uint64_t lidar_time = get_lidar_pack_time();
// 3. Update real time.
if (lidar_time < lidar_time_last)
{
//LiDAR time jump indicates the generation of PPS rising edge.
lidar_time_real = pps_time_ns + lidar_time%(1000000000);
}
else
{
lidar_time_real += lidar_time - lidar_time_last;
}
//Update history
lidar_time_last = lidar_time;
备注:
用戶需要通过其他方式获得PPS上升沿的时间信息,对应上述代码中的get_pps_rising_nsecond()接口。
附录
配置PTP主时钟
地址:http://linuxptp.sourceforge.net
下载,编译和安装:
git clone http://git.code.sf.net/p/linuxptp/code linuxptp
cd linuxptp
make
sudo make install
如果要让ptp4l正常工作,需要系统的Linux kernel version 3.0或者更新版本。通过下面的指令来检查网卡是否支持软件/硬件时间戳功能(如:查询网卡 'eth0' 的状态)。
ethtool -T eth0
下图的例子中,表明eth0网卡支持硬件时间戳。
下图的例子中wlan0网卡不支持硬件和软件时间戳,linuxptp/ptp4l不能正常工作。
运行如下指令,开启ptp4l的master时钟功能:
sudo ptp4l -i eth0 -l 6 -m
如果网络中出现 Sync Message 数据,说明ptp4l程序的master时钟功能正常运行:
可以使用如下命令让系统时间和PTP硬件时钟同步:
如果需要更多相关的信息, 请参考 phc2sys 链接
sudo phc2sys -c eth0 -s CLOCK_REALTIME -O 0
完成以上步骤,即可通过ptp4l实现雷达时间和PC本地系统时间的同步。









