Lio_sam运行测试环节遇到的问题以及实测总结

一、前言

终于,在花费了不少时间后,终于将lio-sam这个算法从最开始的编译安装测试,到代码学习、实测一系列工作全部完成了。在这中间遇到了许许多多奇怪的问题。大部分是许多人都遇到的共性问题。但也有许多搜遍网络都很难找到解决方案的疑难杂症,这些问题曾困扰了我很久,也花了许多的时间去一个一个排除可能的原因。尤其是在算法实装在设备上的时候,遇到的运行问题在网上鲜有人解答。大部分攻略都停留在安装编译环节,极少甚至根本没有解答程序运行时的一些错误(也可能是我没找对地方)。所以仅此一文记录一下我所遇到的问题。包括在前面博客提到的存疑的地图漂移问题也将在此记录。

下面我将以时间顺序来记录从0开始到最终可以完整建立自己点云地图的全过程。当然,程序编译安装过程将不再此记录,因为网上相关的错误解决方案相当多也很详细。

首先再次介绍一下我的所有操作环境以及硬件平台。

操作系统在跑通过程中一共使用过四个,分别是:

1、安装在小车工控机上的操作系统18.04,处理器应该是锐龙三2000,8G内存,无独立显卡;

2、实验室台式机双系统之一18.04,十代i5,8G,无独显。

3、笔记本虚拟机,20.04,4G内存(内存太低无法编译通过gtsam后改至8G).

4、笔记本虚拟机,18.04,8G内存。

二、初次安装测试(地图旋转、地图之字漂移)

在最开始的阶段,我是在台式机上进行的程序跑通,然后使用官方的数据集测试了一下算法,然后在rviz中看到图像很好看,效果很nice,信心大增。麻溜转到工控机上重复步骤安装了程序,连接调试好了各项硬件。

硬件平台如下:

Lio_sam运行测试环节遇到的问题以及实测总结_第1张图片

虽然平台搭的一点也不好看,这不重要,毕竟测试嘛,雷达和imu的位置已经在图上标注了,请注意整个的结构形式后期许许多多问题的出现根源就在这结构上

我第一次运行是在实验室里面,在没有进行标定情况下,毕竟安装完总是要看下能不能打开。然后实验室的环境是一圈玻璃墙围成的房间,围绕着布置许多电脑工位以及其他电器。初次运行,在rviz中的地图自打开起,产生的地图就围绕着一条水平轴进行缓慢旋转,地图在旋转过程中不断叠加,最终逐渐变成一个圆筒状结构,如下图:

 Lio_sam运行测试环节遇到的问题以及实测总结_第2张图片

 Lio_sam运行测试环节遇到的问题以及实测总结_第3张图片

在后期测试发现,这种静止情况下的地图缓慢偏移情况,是受某种干扰所致,排除了没有标定的原因。主要怀疑imu的磁力计受到实验室复杂电磁环境干扰,导致的建图错误。因为在后续测试环境中,唯有在实验室环境下启动程序,启动瞬间马上发生静止状况下的地图偏移。而在其他室外或者周围没有电脑等电器的室内环境均没有发生类似情况。

在标定后,进行了简单的测试,这次测试在室内(小车间环境)进行,跑了一圈后发现地图发生严重漂移,上一帧地图画面与下一帧地图画面的距离之远甚至不能同屏,详情图片可以参考我之前博客的末尾:使用Velodyne16线激光雷达与九轴IMU配置环境与运行LIO_SAM程序学习笔记(二)_站住前面的二哈的博客-CSDN博客_vlp-16运行lio-sam  这个问题在当时初次测试时没有解决,网上也鲜有攻略。

其实在我刚才引用的那篇博客中,给出的跑通截图,也是有问题的。在当时没有看出来,就是在文末那张灰蓝色的pcd点云图中,左下角的倾斜路段在实际中是会有一个弯折然后恢复正南正北的走向,但是点云地图中并没有恢复,而是一直倾斜下去了。

三、学习程序源码阶段的测试(各类地图漂移)

在这一阶段全部在工控机上进行。

在学习源码阶段,穿插着进行了一系列测试。在测试中又遇到了新的问题。在之前的测试中我遇到过地图之字漂移的情况,当时以为是车间室内环境导致的,并没有太注意,因为后续的室外建图还是蛮成功的。但是随着这个阶段的测试深入,我们慢慢从直线路段测试,过渡到围绕测试,再到大范围的建图测试。在有一次跑长距离测试的时候,在跑完路程的四分之三后,突然发现rviz画面又出现了之字漂移。当时相当郁闷,发生偏移后在运行lio-sam程序的终端会持续输出报错信息: 

[ WARN] [1670558001.881170028]: Large velocity, reset IMU-preintegration!
[ WARN] [1670558003.736817480]: Large velocity, reset IMU-preintegration!
[ WARN] [1670558005.657970499]: Large velocity, reset IMU-preintegration!
[ WARN] [1670558007.443136302]: Large velocity, reset IMU-preintegration!
[ WARN] [1670558009.601992147]: Large velocity, reset IMU-preintegration!
[ WARN] [1670558012.123577119]: Large velocity, reset IMU-preintegration!
[ WARN] [1670558014.360006662]: Large velocity, reset IMU-preintegration!
[ WARN] [1670558016.316609372]: Large velocity, reset IMU-preintegration!
[ WARN] [1670558018.160086489]: Large velocity, reset IMU-preintegration!

又经过了几次测试,初步怀疑这套设备经过狭小的地方不能匹配上地图导致乱窜(当时还没有学习完源码,只能根据现象来判断),这些现象共有的特点是都经过了狭小位置,虽然有点牵强。

在这里补充一下之字漂移的现象,之前博客贴的rviz中的漂移现象是在rviz中的视角,其实这类漂移现象在pcd点云图中更为直接。举一个例子,如下图:

Lio_sam运行测试环节遇到的问题以及实测总结_第4张图片

这是一张发生之字漂移的pcd点云图,从最开始的垂直方向偏移,一段时间后突然分为四个方向飘去,看见他第一反应就仨字--噬菌体,真的像。除此之外,我还见过螺旋上升、螺旋发散的、锯齿漂移的还有完全看不出规律的。总之成功的图千篇一律,失败的图各有各的特色。

除此之外,还有一些建图中地图发生抖动的情况发生,但是在最终生成pcd点云图中没有发现这种抖动产生什么不良影响所以暂时没有管。但是后来发现这种抖动不是没有影响,只是时候未到。

在搜索这个之字抖动这个情况的时候,网上有人给出报错原因:时间戳同步错误,那时我以为我的错误也是这个原因,但是这个错误可能会导致建图漂移,但是建图漂移可不一定是这个原因引起的。我的情况并不是这个原因引起的,所以顺着这条线查下去并没有什么收获。

四、最终测试阶段(漂移、地图错位、程序崩溃等)

在这个阶段最开始,在建图的时候突然发现除了之字抖动(这个发生的频率相对没有那么高)之外,又出现了新的问题,在小车旋转的时候,本来应该是小车在地图内旋转,但是我却遇到了地图跟着小车一起旋转,整个地图都发生了偏移,然后没偏移的和偏移之后的地图叠加在一起,成了一堆完全分不清楚东西,如下图:

Lio_sam运行测试环节遇到的问题以及实测总结_第5张图片

 Lio_sam运行测试环节遇到的问题以及实测总结_第6张图片

起初我有些怀疑工控机的性能原因导致的建图失败,因为建图时工控机几乎满负荷,每次运行都感觉卡死了,但没完全卡死,也就能输入一个ctrl+c了,rviz的画面想转动下视角几乎别想。

因此最开始我录制了一段rosbag打算再去台式机上跑一下看看效果,当时实在不知道什么原因了,旧错误还没解决,新的错误又不断出现,真的希望是这个原因导致的建图失败。当我在台式机上运行这个包之后,在一样的位置发生一样的现象,真的太让人失望了。

接着由于疫情原因,没法在实验平台这边了,所以在离开前一段时间里,我用rosbag录制了一系列的数据,打算带回去慢慢测。我选择远离我们实验室,去远一点的地方录一些数据包。最后选择了图书馆这个地方,首先图书馆这里有一个广场,有较为广阔的空间,没有干扰,其次图书馆比较大,绕行一圈能采集到足够长的数据。

在录制过程中刚开始就当头一棒,上面两张地图旋转漂移的图就是在图书馆录制前试跑了一下程序得到的。但是还是把数据包硬着头皮录下来了。

但这一趟也不是完全没有收获。在录制的时候我发现地图发生旋转偏移的时候往往是小车需要转弯发生旋转动作的时候,而在长距离的弧线不会发生,只有在弯道比较急的时候出现,地图时而拉得回来,时而拉不回来就重叠了。

将数据包录制好后,回来在台式机上跑了一遍,仍然是差不多的结果。机缘巧合下忘记终止运行了。所以整个rosbag跑完了。最终结束时得到了完整的pcd,打开一看好家伙:

先前地图偏移发生的地方在这张pcd点云的左上角,也就是那个广场的位置,但是在pcd点云图里的地图是完整正确的!如果不是这张图右侧这里的地图并不正确的话就完美了。但很可惜,右边这里的45度弯角实际上应该是90度的,这个最终应该是形成闭环而不是拐出去。很遗憾还是失败的。

在上面录制数据集的时候我对这个硬件平台产生了怀疑。回到实验室后。我看了好几遍用各种数据集跑出来失败地图的过程,发现本应平直的直线路段,实测路径是弯来弯去的小波浪线,经过优化后变为了蓝色的光滑路径。在转弯处,地图偏移前瞬间,实测的粉色路径出现更大幅度的抖动,幅度如果降下来了,会转化为地图旋转偏移,如果抖动越来越大趋于离散将会转化为之字漂移。联想到小车平台本身转弯的时候车身会抖,我考虑在新的情况下重新标定。

时间越来越紧已经没有时间再测试了,所以新的标定数据我只好先录下数据集,剩下全都后期离开后用笔记本搞定。

我的笔记本使用虚拟机安装了一个ubuntu20.04.在这个版本,安装lio-sam以及其他软件经常报错。而且搜解决办法很难只能说这个版本的兼容性真的远远不如18.04.所以果断放弃这个版本,重新安装18.04。如果各位想要装安装ubuntu,还是建议18.04。

 

在安装调试阶段,我遇到了编译失败、rviz进程崩溃等等问题。解决方案也是简单粗暴。

  1. 安装gtsam需要虚拟机8G内存,4G安装会失败。
  2. 运行lio-sam的时候一播放数据包rviz进程崩溃。应该是虚拟机的问题,双系统从未遇到这种问题。崩溃不要紧,多试几次,总会成功。
  3. 运行lio-sam播放数据包的时候只有轨迹没有全局点云地图,怀疑也是因为虚拟机的原因。这个只是影响实时观看的观感,可以开启局部地图观看效果,虽然没有原来画面炫酷但是其实不影响什么。

调试好后程序后。重新标定imu和两传感器间联合标定数据。

标定过程要说一下,前面我在博客中提到的联合标定方式。原博主说大概标定20分钟,多迭代几次。我最初理解为了标定20分钟即可。迭代次数就够了。最气的的是这个程序没标定完你终止它它是真的会给你标定结果啊。后来才知道标定结束其实是会在终端输出结束信息的。我标定用了一个小时。真的差的蛮多的。当然这个问题早初次测试就发现了,然后后期标定全都等他输出完成信息才采用的,在这里只是提一下。

我随便选了一组标定用的数据集标定了一遍,输入到params,结果建的图在本来不会漂移的弯角也开始漂移了。甚至一直没有问题的官方数据集用了我的标定结果也起飞了。

好消息。标定结果可以把没有问题的数据集整出我现在遇到的问题,那言外之意就是我的标定结果是错的?

多亏这次的标定数据有一段我刻意选择了一处比较平整的地方,用最小的速度来进行运动。因为小车转动机制特殊,后文会说,为了让它不抖所以用特别低的速度录制了一段标定用数据集。

我用重新标定好的数据重新跑了一下数据集,发现效果竟然意外的好:

 

 

 

再重新标定完发现跑数据集再也没有了抖动,地图都清晰了很多。很激动,重新运行了一下那个屡次报错的图书馆数据集: 

Lio_sam运行测试环节遇到的问题以及实测总结_第7张图片

天啊,问题解决了!

这时候我才明白为什么在网上搜不到解决方案。主要原因就在硬件平台上。

首先,小车的转弯原理与家用的前驱车不同,这台小车为了提高通过性,转弯时采用的是四个轮一起运动,“燃烧轮胎”的原地旋转方式。旋转时根据地面情况不同会有不一样的效果。在我们实验室光滑的橡胶地,他转弯时吱呀吱呀的响但确实没什么抖动。但是标定时要求环境开阔,我们便在柏油公路上进行的录制。在哪种路面上进行旋转时车身会发生剧烈抖动,这是因素一。

其次,我们为了抬高雷达的高度,做了一个雷达固定架,虽然不算太高,但是这段型材极大的降低了雷达的稳定性。雷达运行时的抖动和小车转弯时剧烈的抖动都会经过这个刚性不足的杆被放大,即使静止状况下也可以观察到雷达的抖动。这是因素二。

其三,imu没有与雷达安装在一起,在安装时为了避免走线太过靠上将imu安装在了小车车体上,而且使用了软胶进行了缓冲。这是因素三。

这一系列因素叠加在一起,导致本身的标定数据就是不准的,再加之有时转弯时,小车在特定的路面上发生剧烈抖动,这抖动经过杆的放大传递至雷达。但imu却并没有接收到如此大的抖动数据。两个原本标定好的坐标在这段时间内失去同步,然后一切就皆有可能了。

至此,我的lio-sam学习到这里也要画一个句号了。在这个过程中确实遇到许许多多的问题,有的网上一搜就可以解决,有些却是需要大功夫才能解决,有些在网上甚至没有相关的解答。在这个过程中,我从一开始比较钻牛角尖,凡事都要搞清楚原理。再到后来慢慢意识到有些错误它并不是那么讲道理,哪怕花非常多的时间彻底搞明白它也并没有多大意义。反倒是忽略它才更加划算。比如在虚拟机上rviz崩溃、没有全局地图浏览画面等等,可能只是单纯的虚拟机导致的问题,没有必要花时间去研究排错。目前还是应该把时间花在功能实现上。

另外希望在网上零星遇到的几位地图跑飞但始终不得其解的同志们也能早日找到问题的原因。

 

你可能感兴趣的:(学习)