3D激光SLAM:Livox激光雷达硬件时间同步
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设备支持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()接口。
3D激光SLAM:Livox激光雷达硬件时间同步相关推荐
- Livox激光雷达硬件时间同步---PPS方法
Livox激光雷达硬件时间同步---PPS方法 Livox对PPS信号的要求 STM32F4 通用定时器简介 STM32F4 通用定时器的寄存器 控制寄存器 1 DMA/中断使能寄存器 预分频寄存器 ...
- 激光SLAM:Livox激光雷达硬件时间同步
作者 | 月照银海似蛟龙 编辑 | 古月居 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[SLAM]技术交流群 后台回复[SLAM ...
- 3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图
3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图 激光雷达里程计 针对LOAM的改进 激光雷达建图 原文 激光雷达里程计 激光雷达里程计模块的功能就是:估计相邻帧之间的位姿变换. ...
- 3D激光雷达SLAM算法学习01——3D激光SLAM整体框架
#1.3D激光雷达系列主要内容 结合个人毕业设计和日后发展方向,开始学习3D激光雷达的相关感知算法,预计SLAM(定位和建图)开始,本篇给出简单的框架和绪论,后边会按照图优化/滤波原理.传感器基础.数 ...
- SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别
本文为我在浙江省北大信研院-智能计算中心-情感智能机器人实验室-科技委员会所做的一个分享汇报,现在我把它搬运到博客中. 由于参与分享汇报的同事有许多是做其他方向的机器人工程师(包括硬件.控制等各方面并 ...
- 3d激光SLAM:LIO-SAM框架—IMU预积分功能数据初始化
前言 LIO-SAM的全称是:Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping 从全称上可以看出,该算法是一个紧耦合的 ...
- 3D激光SLAM:LOAM 论文--算法详细解读
3D激光SLAM:LOAM 论文--算法详细解读 LOAM简介 论文里面的符号表示 算法部分 激光雷达里程计 A 特征点提取 B 找特征点的匹配对 C 运动估计 lidar 建图 测试结果 LOAM是 ...
- 激光SLAM算法学习(三)——3D激光SLAM
3D激光SLAM 1.3D激光SLAM的介绍 3D激光SLAM的输入: IMU数据 3D激光雷达数据 里程计数据 3D激光SLAM的输出: 3D点云地图 机器人的轨迹 or PoseGraph 2.3 ...
- 彻底搞懂基于LOAM框架的3D激光SLAM全套学习资料汇总!
地图定位算法是自动驾驶模块的核心,而激光SLAM则是地图定位算法的关键技术,其重要性不言而喻,在许多AI产品中应用非常多(包括但不限于自动驾驶.移动机器人.扫地机等).相比于传统的视觉传感器,激光传感 ...
最新文章
- 2021年还适合参加软件测试培训吗
- 一份为高中生准备的机器学习与人工智能入门指南
- 信息安全的一些东西,初步查询了解!
- ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)
- AprilTag中的apriltag.h文件
- python-常用函数模块学习-subprocess
- 十个必备的.NET开发小工具(1):Snippet Compiler
- Java EE 7 Batch中传递属性/参数的2种方式
- Spring MVC集成测试:断言给定的模型属性有全局错误
- 【游戏】基于 matlab GUI lanchester作战模拟设计【含Matlab源码 426期】
- 编写时间的php,PHP如何实现简单日历类编写 PHP实现简单日历类编写代码
- [译]区块链技术全解析入门版
- 让你了解一下世界名人blog
- 问脉首创旁路云原生安全检测框架!
- 坚持写技术博客一年能有多少收获!
- 大一新生必看,自学必看,里昂详解数据结构之队列
- 硅基压力传感器—MEMS
- 饥荒专属服务器证书过期,饥荒TGP版存档丢失及证书不存在解决方法介绍
- loginsight,一款通用的日志分析工具
- PlantUML绘制类图