LIO-SAM运行自己数据包遇到的问题解决--SLAM不学无数术小问题

LIO-SAM 成功适配自己数据集

注意本文测试环境 Ubuntu18.04 ROS melodic版本
笔者用到的硬件以简单参数:
激光雷达:速腾聚创16线激光雷达(RS-Lidar-16)
IMU:超核电子CH110型 9轴惯导,使用频率100Hz
注意!!!!!! 该教程旨在引导安装运行,可能现在已经不具时效性了,笔者于2022年7月下载的LIO-SAM源码已经不需要更改 frame_id 了,主要工作在于标定。标定工具无需局限于以下笔者使用的工具,可以github上逛一逛。各种跑飞可以尝试不同的开源数据集,试过两种以上再尝试标定自己的数据,注意修改细节。

背景

  笔者一直在测试3D-SLAM算法中具有优异性能的建图算法,之前入门的时候测试了LOAM,LeGo-LOAM,BLAM等算法 。以上算法全是单激光雷达数据即可建图的算法,建图效果有差别但是不大。之前注意到了激光雷达融合IMU的优异性能,准备上手一试,没想到试了将近两月。之前的单激光雷达建图算法也遇到过坑,但是踩几天总能找到踩平的方法。LIO-SAM效果是目前见到建图效果最好的,也是我测试时间最长的,踩过的坑最多的算法。下面是我个人使用自己数据集的一些经验,与各位简单分享。(其他类型的激光雷达与IMU仅可做参考)
先放两张效果图:
在这里插入图片描述
在这里插入图片描述

一、数据格式要求

1.1IMU数据格式

  其实IMU对格式要求的坑还没踩到,但是采样频率要注意一下,原作使用的是500Hz的IMU,并且在源码中对其将行了处理,转为了REP-105格式的数据,原作建议使用者最低使用200HZ的IMU,但是笔者使用100HZ的IMU仍具有以上效果,测试吗,可以随便试。

1.2激光雷达数据格式

  LIO-SAM算法对激光雷达的数据格式有着较为严格的要求,以往的单激光雷达建图的算法没注意到这一点,一般要求的是XYZI(x, y, z, intensity ) 格式即可,但是LIO-SAM要求的是 XYZIRT(x, y, z, intensity, ring, timestamp) 格式,即算法内使用了激光雷达的通道数ring参数和时间戳timestep参数,启动算法时会检查是否具有这两个参数。那么如何获得这两个参数呢? 如果你同笔者使用的激光雷达一样,你可以将激光雷达的驱动更新到RSLidar-SDK版本即可采集,参考笔者另一篇教程安装速腾最新的驱动:Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据.
  但问题是采集到的数据仍然有不可直接用,速腾格式的点和Velodyne格式的点还是有问题的。这又如何解决呢?笔者在某hub上找到了一位大佬的转化节点,这一节点可将速腾格式的点转化为Velodyne格式的点,具体安装步骤参考笔者另一篇教程链接: 速腾聚创雷达点云格式转换为Velodyne雷达点云格式.
其他雷达笔者没有,无能为力了。

( 1.3GPS 数据格式要求)

  留个小坑吧,笔者还没试融入GPS的情况,但是GPS数据是要求sensor_msgs/NavSatFix这一格式的,GPS会有很多格式,原作使用的是这一个,如果有大佬测试其他格式成功的话可以留言讨论一下。

1.4坐标系的一致性要求(2022年7月之后的源码似乎不需要这一步骤,如果无法建图再尝试该小节步骤)

  简单说就是对 frame_id 有要求,不想改源代码只能在外部使劲了,这里面涉及到了内部坐标的映射关系,不一样的话可能ERROR 导致无法建图,原作给出的数据集中的 frame_id是这样对应的:

//激光雷达数据
/points_raw-----------frame_id:"velodyne"--------
//IMU数据
/imu_raw--------------frame_id:"imu-link"--------
//GPS数据
/gps/fix--------------frame_id:"navset_link"-----

查看自己数据包的frame_id

// 在播放数据包的时候使用如下指令查看某一Topic的frame_id:
 rostopic echo  /Topic    | grep   frame_id

如果与原作的不一样的话需要修改,具体修改方法可以在ROS的官方wiki下载一个工具包bag_tools,里面包含了许多关于数据包的操作工具,官方附带了使用教程,可自行百度下载解决。这里给一条印象中的转化指令:

 rosrun  bag_tools  change_frame_id.py  -t  /需要要改的topic   -f    新的frame_id    -i      旧.bag    -o    新.bag

二、lidar_align进行激光雷达与IMU外参标定

  以上第一步只是解决了数据格式的问题,两种传感器如何配合还要做进一步的标定,这一步采坑巨多。笔者使用的是瑞士苏黎世联邦理工大学自动驾驶实验室开发的标定工具:lidar_align,不多介绍了,有兴趣的朋友自行查阅吧。

2.1下载lidar_align

mkdir  -p  lidar_align/src

 cd lidar_align/src

git clone https://github.com/ethz-asl/lidar_align.git

catkin_make

首次编译会缺库报错

2.2安装nlopt库

sudo apt-get install libnlopt-dev

将NLOPTConfig.cmake文件移动到 lidar_align/src/下进行第二次编译
二次编译会报错

2.3 处理定义冲突问题

//依次运行以下指令
sudo mv /usr/include/flann
评论 146
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值