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激光雷达硬件时间同步相关推荐

  1. Livox激光雷达硬件时间同步---PPS方法

    Livox激光雷达硬件时间同步---PPS方法 Livox对PPS信号的要求 STM32F4 通用定时器简介 STM32F4 通用定时器的寄存器 控制寄存器 1 DMA/中断使能寄存器 预分频寄存器 ...

  2. 激光SLAM:Livox激光雷达硬件时间同步

    作者 | 月照银海似蛟龙  编辑 | 古月居 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[SLAM]技术交流群 后台回复[SLAM ...

  3. 3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图

    3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图 激光雷达里程计 针对LOAM的改进 激光雷达建图 原文 激光雷达里程计 激光雷达里程计模块的功能就是:估计相邻帧之间的位姿变换. ...

  4. 3D激光雷达SLAM算法学习01——3D激光SLAM整体框架

    #1.3D激光雷达系列主要内容 结合个人毕业设计和日后发展方向,开始学习3D激光雷达的相关感知算法,预计SLAM(定位和建图)开始,本篇给出简单的框架和绪论,后边会按照图优化/滤波原理.传感器基础.数 ...

  5. SLAM学习笔记(十九)开源3D激光SLAM总结大全——Cartographer3D,LOAM,Lego-LOAM,LIO-SAM,LVI-SAM,Livox-LOAM的原理解析及区别

    本文为我在浙江省北大信研院-智能计算中心-情感智能机器人实验室-科技委员会所做的一个分享汇报,现在我把它搬运到博客中. 由于参与分享汇报的同事有许多是做其他方向的机器人工程师(包括硬件.控制等各方面并 ...

  6. 3d激光SLAM:LIO-SAM框架—IMU预积分功能数据初始化

    前言 LIO-SAM的全称是:Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping 从全称上可以看出,该算法是一个紧耦合的 ...

  7. 3D激光SLAM:LOAM 论文--算法详细解读

    3D激光SLAM:LOAM 论文--算法详细解读 LOAM简介 论文里面的符号表示 算法部分 激光雷达里程计 A 特征点提取 B 找特征点的匹配对 C 运动估计 lidar 建图 测试结果 LOAM是 ...

  8. 激光SLAM算法学习(三)——3D激光SLAM

    3D激光SLAM 1.3D激光SLAM的介绍 3D激光SLAM的输入: IMU数据 3D激光雷达数据 里程计数据 3D激光SLAM的输出: 3D点云地图 机器人的轨迹 or PoseGraph 2.3 ...

  9. 彻底搞懂基于LOAM框架的3D激光SLAM全套学习资料汇总!

    地图定位算法是自动驾驶模块的核心,而激光SLAM则是地图定位算法的关键技术,其重要性不言而喻,在许多AI产品中应用非常多(包括但不限于自动驾驶.移动机器人.扫地机等).相比于传统的视觉传感器,激光传感 ...

最新文章

  1. 2021年还适合参加软件测试培训吗
  2. 一份为高中生准备的机器学习与人工智能入门指南
  3. 信息安全的一些东西,初步查询了解!
  4. ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)
  5. AprilTag中的apriltag.h文件
  6. python-常用函数模块学习-subprocess
  7. 十个必备的.NET开发小工具(1):Snippet Compiler
  8. Java EE 7 Batch中传递属性/参数的2种方式
  9. Spring MVC集成测试:断言给定的模型属性有全局错误
  10. 【游戏】基于 matlab GUI lanchester作战模拟设计【含Matlab源码 426期】
  11. 编写时间的php,PHP如何实现简单日历类编写 PHP实现简单日历类编写代码
  12. [译]区块链技术全解析入门版
  13. 让你了解一下世界名人blog
  14. 问脉首创旁路云原生安全检测框架!
  15. 坚持写技术博客一年能有多少收获!
  16. 大一新生必看,自学必看,里昂详解数据结构之队列
  17. 硅基压力传感器—MEMS
  18. 饥荒专属服务器证书过期,饥荒TGP版存档丢失及证书不存在解决方法介绍
  19. loginsight,一款通用的日志分析工具
  20. PlantUML绘制类图

热门文章

  1. opensuse 13.1 firefox 支付宝安全控件安装失败的解决方法
  2. Qt OpenGL 蒙板
  3. NC212914 牛牛与后缀表达式
  4. jmeter 事务控制器
  5. iMindMap画布的灵活运用
  6. 设置favicon的几种方式
  7. 盗墓笔记——路由器密码破解
  8. 视频下载插件–Video Downloader for Chrome
  9. dnf服务器是什么系统,什么云服务器可以挂的起dnf
  10. python爬取淘宝商品信息_python爬取淘宝商品信息并加入购物车