3D激光SLAM:Livox同步激光雷达硬件时间
- 前言
- 同步原理
-
- PTP时间同步原理
- GPS时间同步原理
- PPS时间同步原理
- GPS PPS同步使用时间
-
- Livox Hub
- Livox Converter 1.0
- Livox Converter 2.0
- 状态检查
- PPS同步使用时间
前言
机器人进行slam单个传感器往往无法实现强鲁棒,往往需要多个传感器的集成,如激光雷达 相机 IMU GPS 轮速计 毫米波雷达等。
在进行多传感器融合的时候就涉及到了数据帧的对应,如果需要用时间戳去对应的话,那么则需要进行时间同步。由于数据的传输接收等存在不同程度的延时,数据的产生频率也不相同,如果仅用软同步的话,那么必然会存在一定偏差,导致数据对准不精确,那么就体现了硬件时间同步的重要性。
本文主要介绍3D激光SLAM中,如何对Livox时间硬件同步激光雷达。
Livox设备支持三种时间同步方式:
- PTP:IEEE 1588v2.0 PTP 同步网络协议;
- GPS:秒脉冲 GPRMC时间数据,组成GPS时间同步模式;
- PPS:通过其他方式(如:uart)获取每个脉冲的时间信息,修正点云时间。
同步原理
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、t传输路径延迟和两时钟偏移通过以下计算得到: 传输路径延迟: 时间偏移:
GPS时间同步原理
GPS时钟源的PPS端口每秒发送一次硬件脉冲(PPS信号),然后数据端口发送与脉冲上升沿相对应的时间信息(GPRMC格式)。
Livox设备接收到PPS并由信号上升GPRMC在数据分析正确的时间信息后,将点云时间设置为GPS为了实现和保持这个时间基准的持续积累GPS设备时间同步。
Livox Hub可直接接收RS485电平的GPRMC信号; Livox LiDAR不能直接接收GPRMC需要将信号GPRMC接入数据端口PC,然后通过sdk协议发送给雷达
PPS信号和GPRMC信号时序要求:
PPS时间同步原理
Livox LiDAR每次接收到PPS信号上升后,将当前时刻的点云时间置于0,然后重新开始计时,直到下一个PPS脉冲的到来。我们可以利用这一特性来实现它PPS脉冲对LiDAR同步时间。
GPS PPS同步使用时间
与其他制造商兼容LiDAR硬件,Livox设备也支持GPS时间同步。 由于Livox硬件种类不同(LiDAR/Hub),在使用GPS硬件接口可分为三类:
- 使用Livox Hub;
- 使用Livox Converter 1.0连接的LiDAR(如:Mid-40、Mid-100);
- 使用Livox Converter 2.0连接的LiDAR(如:Tele-15、Horizon、Avia);
下面将分别介绍如何使用这三个接口GPS时间同步。
Livox Hub
如果GPS时间信号和模块PPS信号是RS485电平直接接入线路Hub的GPS时间同步口(GPS sync port)即可。 如果GPS时间信号和模块PPS信号是TTL在接入信号之前,需要进行以下电平转换Hub的GPS时间同步口(GPS sync port)。 Hub使用GPS无需同步SDK软件配置。
Livox Converter 1.0
将GPS时间信号模块(GPRMC)通过TTL转usb模块接入PC,PPS()信号接入LiDAR同步口同步口(Sync Port)。 查看接入PC的usb模块的端口名称, 例如 /dev/ttyUSB0, 添加到 livox_lidar_config.json 文件中“timesync_config”的“device_name”, 然后将“enable_timesync”配置为 true, 波特率“baudrate_index”可以参考 Livox_ros_driver 来配置具体数值
"timesync_config": {
"enable_timesync": true, "device_name": "/dev/ttyUSB0", "comm_device_type": 0, "baudrate_index": 2, "parity_index": 0 }
然后 运行launch file
Livox Converter 2.0
将GPS时间信号模块(GPRMC)通过TTL转usb模块接入PC,PPS(注意这是TTL信号电平)信号LiDAR同步口同步口(Sync Port)。 查看接入PC的usb模块的端口名称, 例如 /dev/ttyUSB0, 添加到 livox_lidar_config.json 文件中“timesync_config”的“device_name”, 然后将“enable_timesync”配置为 true, 波特率“baudrate_index”可以参考 Livox_ros_driver 配置具体值
"timesync_config": {
"enable_timesync": true, "device_name": "/dev/ttyUSB0",
"comm_device_type": 0,
"baudrate_index": 2,
"parity_index": 0
}
然后 运行launch file
状态检查
通过查看点云数据包头中的timestamp_type数据, 如果timestamp_type为3,则说明设备正在进行GPS时间同步: UTC时间格式:
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()接口。