在Ubuntu 20.04上玩转LIO-SAM的第一步,就是确保你的系统环境配置正确。我刚开始接触这个领域时,花了两天时间才搞明白各种依赖关系,现在把这些经验都分享给你,让你少走弯路。
首先确认你的ROS版本是Noetic。这个很重要,因为不同版本的ROS对应的库和工具链都不一样。你可以用rosversion -d命令检查当前安装的ROS版本。如果是其他版本,建议重新安装Noetic版本,否则后续会遇到各种兼容性问题。
创建工作空间是ROS开发的标配操作。这里有个小技巧:我习惯在用户目录下创建专门的工作空间文件夹,这样管理起来更方便。执行以下命令:
bash复制mkdir -p ~/lio_sam_ws/src
cd ~/lio_sam_ws/src
catkin_init_workspace
下载LIO-SAM源码时,国内用户经常会遇到网络问题。除了官方提供的git clone方式,我更推荐使用镜像源。比如你可以尝试从Gitee克隆:
bash复制git clone https://gitee.com/mirrors/LIO-SAM.git
如果还是下载失败,可以手动下载zip包。这里有个细节要注意:解压后的文件夹默认是LIO-SAM-master,一定要重命名为LIO-SAM,否则后续编译会出问题。我当初就是没注意这个细节,白白浪费了一个小时排查问题。
依赖安装是LIO-SAM部署过程中最容易出问题的环节。根据我的经验,90%的编译错误都是由于依赖没装对导致的。
首先是ROS基础依赖。这三个包必须安装,缺一不可:
bash复制sudo apt-get install -y ros-noetic-navigation
sudo apt-get install -y ros-noetic-robot-localization
sudo apt-get install -y ros-noetic-robot-state-publisher
GTSAM的安装是个大坑。官方要求版本是4.1,但Ubuntu 20.04默认源里的版本不对。这里有个小技巧:先添加PPA源再安装:
bash复制sudo add-apt-repository ppa:borglab/gtsam-release-4.1
sudo apt-get update
sudo apt install libgtsam-dev libgtsam-unstable-dev
安装过程中会提示你按回车确认和输入y,这些交互操作要特别注意。我建议在脚本服务器上部署时,可以用-y参数来自动确认。
OpenCV的问题也很常见。Ubuntu 20.04默认安装的是OpenCV4,而LIO-SAM最初是为OpenCV3设计的。不过别担心,我们不需要降级OpenCV,只需要修改几处代码兼容即可。这个我们留到编译环节详细说。
编译LIO-SAM时,我遇到了至少五种不同的错误。下面把这些错误和解决方法都列出来,希望你能一次性编译通过。
第一个错误是关于C++标准的。现代ROS项目大多需要C++14或更高标准。修改方法很简单:
打开CMakeLists.txt文件,找到set(CMAKE_CXX_STANDARD 11)这一行,把11改成14。这个改动直接影响编译器如何处理你的代码,非常重要。
第二个错误是OpenCV头文件引用问题。在utility.h文件中,需要做如下修改:
cpp复制// 注释掉原来的
// #include <opencv/cv.h>
// 添加新的
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/types_c.h>
这个修改是因为OpenCV4重新组织了头文件结构。如果不改,会报一堆莫名其妙的未定义错误。
第三个常见错误是flann库的顺序问题。有时候需要调整头文件包含顺序。在utility.h中找到flann相关的include语句,把它移到OpenCV头文件之前。这个错误提示不太明显,但修改后效果立竿见影。
编译命令很简单:
bash复制cd ~/lio_sam_ws
catkin_make
如果一切顺利,你应该能看到100%的进度提示。如果还有错误,建议仔细阅读错误信息,大部分情况下错误信息都会给出很明确的提示。
编译通过后,就可以开始激动人心的建图环节了。但先别急,有几个关键步骤需要注意。
首先是环境变量配置。很多新手会忽略这一步,导致明明编译成功了却无法运行:
bash复制echo "source ~/lio_sam_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
这里有个小技巧:每次修改.bashrc后,一定要执行source命令使其生效,或者直接新开一个终端窗口。
运行LIO-SAM的命令是:
bash复制roslaunch lio_sam run.launch
这时候你会看到Rviz启动,但地图是空的。别担心,这是正常的,因为我们还没喂数据给它。
数据包可以从官方GitHub页面下载。我建议先使用"walk.bag"这个小数据包测试,下载后放在用户目录下,然后运行:
bash复制rosbag play walk.bag
在建图过程中,有几个实用技巧:
当你成功运行基础版LIO-SAM后,可能还想进一步提升性能。这里分享几个我实践过的优化技巧。
首先是参数调整。打开config/params.yaml文件,有几个关键参数可以调优:
pointCloudPerFrame: 控制每帧处理的点数,数值越大精度越高但计算量也越大mapResolution: 地图分辨率,根据你的应用场景调整loopClosureFrequency: 回环检测频率,太频繁会影响实时性内存管理也很重要。LIO-SAM默认会保存所有历史数据,长时间运行可能导致内存不足。可以在launch文件中添加参数限制历史数据量。
对于需要更高精度的场景,可以考虑启用IMU预积分功能。这需要在配置文件中开启相应选项,并且确保你的IMU数据质量足够好。
多传感器融合是另一个可以探索的方向。LIO-SAM支持接入GPS等额外传感器,只需要在配置文件中正确设置传感器参数即可。
即使按照教程一步步操作,还是可能遇到各种问题。这里整理了一份常见问题排查清单,基本覆盖了我遇到过的所有坑。
问题1:运行时提示找不到节点
解决方案:检查环境变量是否设置正确,确认编译是否真的成功,尝试重新编译并source环境。
问题2:Rviz中看不到点云
解决方案:检查Rviz的显示配置,确保点云话题设置正确,确认数据包是否正常播放。
问题3:建图漂移严重
解决方案:检查IMU数据质量,调整回环检测参数,考虑使用更高精度的传感器。
问题4:程序运行一段时间后崩溃
解决方案:可能是内存不足,尝试限制历史数据量,或者优化参数减少计算量。
问题5:建图效果模糊不清
解决方案:调整点云滤波参数,检查传感器标定是否准确,考虑使用更高质量的数据包测试。
经过多次项目实践,我总结出一些LIO-SAM在实际应用中的经验。这些内容你在官方文档里是找不到的。
首先是硬件选型建议。虽然LIO-SAM理论上支持各种激光雷达,但经过测试,Velodyne和Ouster的雷达兼容性最好。如果是室内应用,可以考虑使用Livox雷达,但需要修改部分代码。
对于嵌入式平台部署,记得先做性能测试。我在Jetson Xavier上部署时,发现默认参数会导致计算资源不足。后来通过降低点云密度和减少回环检测频率解决了问题。
长期运行的稳定性也很关键。建议添加监控脚本,定期检查节点状态,遇到异常自动重启。我在一个仓储机器人项目中就实现了这样的机制,大大提高了系统可靠性。
最后提醒一点:建图只是第一步,真正的挑战是如何在实际应用中用好这些地图数据。建议结合导航算法一起测试,确保整个系统协同工作正常。