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

作者 | 月照银海似蛟龙  编辑 | 古月居

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【SLAM】技术交流群

后台回复【SLAM综述】获取视觉SLAM、激光SLAM、RGBD-SLAM等多篇综述!

前言

67e1d616b534d43f807542e49e2718be.gif

在进行机器人进行slam的时候往往单一的传感器不能实现强鲁棒性,很多时候需要用到多个传感器的融合,例如激光雷达+相机+IMU+GPS+轮速计+毫米波雷达等等。

在进行多传感器融合的时候就涉及到了数据帧的对应,如果需要用时间戳去对应的话,那么则需要进行时间同步。

由于数据的传输接收等存在不同程度的延时,数据的产生频率也不相同,如果仅用软同步的话,那么必然会存在一定偏差,导致数据对准不精确,那么就体现了硬件时间同步的重要性。

本篇主要介绍在3D激光SLAM中,如何对Livox激光雷达进行时间硬件同步。

Livox设备支持3种时间同步方式:

  • PTP:IEEE 1588v2.0 PTP 网络协议同步;

  • GPS:秒脉冲+GPRMC时间数据,组成GPS时间同步方式;

  • PPS:秒脉冲同步,需要上层应用程序通过其他途径(如:uart)获取每个脉冲的时间信息,并修正点云时间。

同步原理

2d1008c8ba9f9ea5abc1d462deb2ac49.gif

PTP时间同步原理

同步过程使用IEEE 1588v2.0 PTP的Delay request-response机制(two steps),Livox设备作为slave端,和master时钟设备进行ptp时间同步。

7ba6c74372ec1d2a2ae52ea77033477b.png

master和slave时钟通过Sync、Follow_Up、Delay_Req、Delay_Resp这几个数据包的交互,得到t1、t2、t3、t4时间,通过如下计算得到传输路径延迟和两时钟的偏移:


传输路径延时:

270baef4273addd9e12efa9b26384bf7.png

时间偏移:

05fad4e2bda76fdbd61607be776ed5a2.png

GPS时间同步原理

67a2b5c1c9ade01a2b1d380ac7240bd7.gif

GPS时钟源的PPS端口每秒发送一次硬件脉冲(PPS信号),随后数据端口发送一次对应这个脉冲上升沿的时间信息(GPRMC格式)。

Livox设备接收到PPS信号上升沿,并由GPRMC数据解析出正确的时间信息后,会设置点云时间为GPS时间,并保持此时间基准持续累加,来实现和GPS设备的时间同步。

注意:

  • Livox Hub可以直接接收RS485电平的GPRMC信号;

  • Livox LiDAR无法直接接收GPRMC信号,需要将GPRMC数据端口接入PC,然后通过sdk协议发送给雷达

PPS信号和GPRMC信号的时序要求:

dca894b7fc8389f28fa060081c750b9c.png

4995a2bf31224531eb0f7793c7be6082.png

PPS时间同步原理

Livox LiDAR每次接收到PPS信号的上升沿后,会将当前时刻的点云时间置为0,然后重新开始计时直到下一个PPS脉冲到来。

我们可以利用这个特性,来实现PPS脉冲对LiDAR时间的同步。

GPS+PPS时间同步使用方法

28c6df8ea16f2f6f8b2dccddad0b0308.gif

为了兼容其他厂商的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)。

af140eb98826abadf1d286350a232afe.png

Hub使用GPS同步时,不需要进行SDK软件的配置。

Livox Converter 1.0

将GPS模块的时间信号(GPRMC)通过TTL转usb模块接入PC,PPS(必须是RS485电平)信号接入LiDAR转接盒同步口(Sync Port)。

4a10e8271a7b69db8708a6557d7ed98e.png

查看接入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)。

f765f96979b3310639bedad8cbc38ea4.png

查看接入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时间同步:

6dfa6444cb7fd4a93c5a5150a2e091bb.png

35b93e094ab0ee1fba184f44709cfd31.png

UTC时间格式:

8f348ae753a7ed0fb472ff3f67c5024a.png

PPS时间同步使用方法

c7c2a06bc7e2b195c8714c82fb1356fb.gif

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()接口。

3aef30d6cdf1dac23b5406777e7fbd77.png

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;

ce077e00226d0366cf9c8fca21885ff9.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

使用Mid-360激光雷达进行SLAM(Simultaneous Localization and Mapping,同步定位与建图)是当前移动机器人、自动驾驶等领域的重要技术之一。Mid-360是一款由Livox推出的机械旋转式激光雷达,具备360°水平视场角和一定的垂直视场覆盖,适合用于室内外环境的建图与定位任务。 ### Mid-360用于SLAM的关键流程 Mid-360 SLAM建图通常包括以下几个主要模块: 1. **点云预处理(Point Cloud Preprocessing)** Mid-360输出的原始点云数据通常包含噪声、运动畸变等干扰因素,需进行去噪、坐标变换、时间同步等处理。例如,在使用Fast-LIO或Point-LIO算法时,会将点云数据转换为统一的坐标系,并进行IMU辅助的运动补偿。 2. **特征提取(Feature Extraction)** 为了提高计算效率和匹配精度,通常会对点云中的几何特征进行提取,如平面点、边缘点等。这些特征在后续的里程计计算中起到关键作用。例如,在LeGO-LOAM中,通过聚类和分割方法提取地面点与非地面点,进一步用于优化位姿估计[^2]。 3. **激光里程计(Lidar Odometry)** 基于点云匹配(如ICP、NDT或特征匹配)计算相邻帧之间的相对位姿变化。Mid-360的高密度点云数据可以提供更精确的匹配结果。例如,A-LOAM 和 LeGO-LOAM 都采用基于优化的方法进行位姿估计,并结合IMU数据提高鲁棒性[^2]。 4. **后端优化(Backend Optimization)** 后端负责处理闭环检测和全局一致性优化。常见的方法包括图优化(Graph-based SLAM)和因子图(Factor Graph)。例如,在使用LeGO-LOAM时,可以通过回环检测模块提升地图的全局一致性[^2]。 5. **地图构建(Mapping)** 将优化后的点云数据融合为全局地图。Mid-360的高分辨率使其适合构建稠密的三维地图。例如,在Fast-LIO中,地图可以保存为PCD格式文件,便于后续导航与路径规划使用[^3]。 ### 算法选择建议 - **Fast-LIO / Point-LIO** Fast-LIO是一种基于IMU的紧耦合激光惯性里程计算法,适用于高速移动平台。Point-LIO是其改进版本,优化了计算效率和稳定性。Mid-360的点云数据可通过`mapping_avia.launch`文件启动Point-LIO,其中需要设置`lidar_type: 1`以适配Livox雷达[^4]。 - **LeGO-LOAM** 适用于地面机器人,具有较低的计算资源需求。其模块化设计便于扩展,适合入门级SLAM系统搭建。Mid-360的数据可直接用于LeGO-LOAM,但需注意点云格式转换与坐标系对齐[^2]。 - **A-LOAM** 一种轻量级的激光SLAM框架,适合学习和二次开发。其核心流程包括点云预处理、特征提取、里程计计算和地图更新。 ### 实现示例 以使用Fast-LIO为例,启动Mid-360进行SLAM建图的ROS命令如下: ```bash roslaunch point_lio mapping_avia.launch ``` 在`avia.yaml`配置文件中设置: ```yaml lidar_type: 1 # 表示使用Livox Mid系列雷达 ``` 地图保存路径可在launch文件中指定,例如: ```xml <arg name="map" default="/home/rm/ws_sentry/src/FAST_LIO/PCD/scans.pcd" /> ``` ### 性能优化建议 - **IMU融合**:确保IMU数据与点云时间戳对齐,提高位姿估计精度。 - **点云降采样**:根据计算资源限制,适当降低点云密度以提升处理速度。 - **闭环检测**:在长距离运行中加入闭环检测模块,避免地图漂移。 - **坐标系统一**:确保雷达、IMU与机器人本体坐标系一致,避免TF变换错误[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值