当前位置:网站首页>3D激光SLAM:Livox激光雷达硬件时间同步
3D激光SLAM:Livox激光雷达硬件时间同步
2022-07-06 18:23:00 【月照银海似蛟龙】
3D激光SLAM:Livox激光雷达硬件时间同步
前言
在进行机器人进行slam的时候往往单一的传感器不能实现强鲁棒性,很多时候需要用到多个传感器的融合,例如激光雷达+相机+IMU+GPS+轮速计+毫米波雷达等等。
在进行多传感器融合的时候就涉及到了数据帧的对应,如果需要用时间戳去对应的话,那么则需要进行时间同步。由于数据的传输接收等存在不同程度的延时,数据的产生频率也不相同,如果仅用软同步的话,那么必然会存在一定偏差,导致数据对准不精确,那么就体现了硬件时间同步的重要性。
本篇主要介绍在3D激光SLAM中,如何对Livox激光雷达进行时间硬件同步。
Livox设备支持3种时间同步方式:
- 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、t4时间,通过如下计算得到传输路径延迟和两时钟的偏移:
传输路径延时:
时间偏移:
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同步时,可以将硬件接口分为3类:
- 使用Livox Hub;
- 使用Livox Converter 1.0连接的LiDAR(如:Mid-40、Mid-100);
- 使用Livox Converter 2.0连接的LiDAR(如:Tele-15、Horizon、Avia);
下面将分别介绍如何使用这3种接口进行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(必须是RS485电平)信号接入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()接口。
边栏推荐
- 长按按钮执行函数
- Centros 8 installation MySQL Error: The gpg Keys listed for the "MySQL 8.0 Community Server" repository are already ins
- POJ 3177 redundant paths POJ 3352 road construction (dual connection)
- 初识MySQL
- AcWing 361. Sightseeing cow problem solution (SPFA seeking positive ring)
- BigDecimal 的正确使用方式
- Yiwen takes you into [memory leak]
- C语言【23道】经典面试题【下】
- AcWing 346. 走廊泼水节 题解(推公式、最小生成树)
- dvajs的基础介绍及使用
猜你喜欢
js如何快速创建一个长度为 n 的数组
盒子拉伸拉扯(左右模式)
开发中对集合里面的数据根据属性进行合并数量时犯的错误
百度飞将BMN时序动作定位框架 | 数据准备与训练指南 (下)
鼠标右键 自定义
Flir Blackfly S USB3 工业相机:白平衡设置方法
Flir Blackfly S 工业相机:配置多个摄像头进行同步拍摄
Modify the system time of Px4 flight control
Errors made in the development of merging the quantity of data in the set according to attributes
Reptile practice (VI): novel of climbing pen interesting Pavilion
随机推荐
刨析《C语言》【进阶】付费知识【完结】
ROS学习(26)动态参数配置
JVM memory model
猫猫回收站
AcWing 1142. 繁忙的都市 题解(最小生成树)
JS Es5 can also create constants?
AcWing 1140. Shortest network (minimum spanning tree)
ROS learning (21) robot slam function package -- installation and testing of orbslam
ROS学习(十九)机器人SLAM功能包——cartographer
Analyze "C language" [advanced] paid knowledge [II]
Right mouse button customization
拖拽改变顺序
Flir Blackfly S 工业相机:配置多个摄像头进行同步拍摄
Compile command line terminal swift
Hutool post requests to set the body parameter to JSON data
Set WordPress pseudo static connection (no pagoda)
一文带你走进【内存泄漏】
AcWing 1141. 局域网 题解(kruskalkruskal 求最小生成树)
Centos8 install MySQL 8.0 using yum x
Recognition of C language array