保姆级避坑指南:在Ubuntu 16.04上从零搭建LIO-SAM环境(含PCL 1.9.0与GTSAM 4.0.2编译)

张开发
2026/4/13 7:48:20 15 分钟阅读

分享文章

保姆级避坑指南:在Ubuntu 16.04上从零搭建LIO-SAM环境(含PCL 1.9.0与GTSAM 4.0.2编译)
从零构建LIO-SAMUbuntu 16.04环境配置全攻略与深度避坑指南当第一次接触激光SLAM领域时LIO-SAM无疑是一个令人兴奋的起点。这个结合了激光雷达和IMU数据的紧耦合SLAM算法在机器人导航、自动驾驶等领域展现出强大的性能。然而对于刚入门的新手来说从零开始搭建LIO-SAM的运行环境往往是一段充满挑战的旅程。本文将带你一步步走过这个旅程不仅提供详细的配置指南更重要的是分享那些官方文档中很少提及的坑点和解决方案。1. 环境准备为什么选择这些特定版本在开始安装之前理解每个组件版本选择的背后原因至关重要。LIO-SAM的作者明确要求使用PCL 1.9.0和GTSAM 4.0.2这不是随意指定的。PCL 1.9.0的特殊性这个版本引入了对特定点云处理算法的优化特别是与特征提取和匹配相关的部分后续版本中的API变更可能导致LIO-SAM中的某些函数调用失效1.9.0在Ubuntu 16.04上的稳定性经过充分验证GTSAM 4.0.2的关键作用提供了LIO-SAM后端优化所需的特定因子图实现包含了对IMU预积分处理的性能改进与ROS Kinetic的时间同步机制完美兼容提示虽然可以使用更高版本的组件但根据社区反馈偏离推荐版本会导致各种难以诊断的问题特别是对于新手而言。安装前的系统准备sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential cmake git2. PCL 1.9.0编译安装避坑全记录PCL点云库是LIO-SAM的核心依赖之一编译过程可能会遇到各种问题。以下是经过验证的安装流程。2.1 依赖安装首先安装所有必要的依赖项sudo apt-get install -y libusb-1.0-0-dev libusb-dev libudev-dev \ mpi-default-dev openmpi-bin openmpi-common \ libflann1.8 libflann-dev \ libeigen3-dev \ libboost-all-dev \ libvtk5.10-qt4 libvtk5.10 libvtk5-dev \ libqhull* libgtest-dev \ freeglut3-dev pkg-config \ libxmu-dev libxi-dev \ mono-complete \ qt-sdk openjdk-8-jdk openjdk-8-jre常见问题1libvtk5.10无法安装 解决方案先执行sudo apt-get update --fix-missing然后重试2.2 源码编译下载并解压PCL 1.9.0源码wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.9.0.tar.gz tar -zxvf pcl-1.9.0.tar.gz cd pcl-pcl-1.9.0 mkdir build cd build关键配置参数cmake -DCMAKE_BUILD_TYPERelease \ -DBUILD_GPUOFF \ -DBUILD_appsON \ -DBUILD_examplesON \ -DBUILD_toolsON ..编译和安装make -j$(nproc) # 使用所有可用核心加速编译 sudo make install注意如果编译过程中出现内存不足的问题减少并行编译任务数如使用make -j22.3 验证安装安装完成后验证PCL是否正确安装pcl_viewer如果出现点云查看器窗口说明安装成功。如果没有检查/usr/local/lib是否在库路径中echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/pcl.conf sudo ldconfig3. GTSAM 4.0.2编译关键修改与调试GTSAM是LIO-SAM后端优化的核心其编译过程有几个必须注意的关键点。3.1 获取源码wget -O gtsam.zip https://github.com/borglab/gtsam/archive/4.0.2.zip unzip gtsam.zip -d ~/ cd ~/gtsam-4.0.2 mkdir build cd build3.2 关键修改在编译前必须修改CMakeLists.txt文件找到if(GTSAM_USE_SYSTEM_EIGEN)这一行在其前面添加set(GTSAM_USE_SYSTEM_EIGEN on)这个修改确保GTSAM使用系统已安装的Eigen库避免版本冲突。3.3 编译配置cmake -DGTSAM_BUILD_WITH_MARCH_NATIVEOFF \ -DGTSAM_BUILD_TESTSOFF \ -DGTSAM_BUILD_EXAMPLES_ALWAYSOFF ..重要参数说明参数作用推荐值DGTSAM_BUILD_WITH_MARCH_NATIVE禁用特定CPU优化提高兼容性OFFDGTSAM_BUILD_TESTS跳过测试编译加快速度OFFDGTSAM_BUILD_EXAMPLES_ALWAYS不编译示例OFF3.4 编译与安装make -j$(nproc) sudo make install3.5 常见问题解决问题1undefined reference to boost::serialization等链接错误解决方案确保安装了完整版的Boost库sudo apt-get install libboost-serialization-dev libboost-filesystem-dev问题2Eigen版本冲突解决方案检查系统Eigen版本pkg-config --modversion eigen3如果版本高于3.2.10考虑降级或创建符号链接。4. ROS Kinetic环境配置与LIO-SAM编译4.1 ROS依赖安装sudo apt-get install -y ros-kinetic-navigation \ ros-kinetic-robot-localization \ ros-kinetic-robot-state-publisher \ ros-kinetic-tf2-sensor-msgs4.2 创建工作空间mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace4.3 获取LIO-SAM源码git clone https://github.com/TixiaoShan/LIO-SAM.git cd ~/catkin_ws4.4 解决可能的依赖问题在编译前可能需要手动安装一些缺失的依赖rosdep install --from-paths src --ignore-src -y4.5 编译LIO-SAMcatkin_make -DCMAKE_BUILD_TYPERelease编译过程中的常见错误及解决方案PCL相关错误确保环境变量正确设置source /usr/local/share/pcl-1.9/pcl_config.sh检查find_package(PCL 1.9 REQUIRED)是否在CMakeLists.txt中GTSAM相关错误确认GTSAM安装路径在/usr/local/lib添加库路径echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/gtsam.conf sudo ldconfigEigen相关错误确保系统只有一个Eigen版本删除可能冲突的版本sudo apt-get remove libeigen3-dev4.6 验证安装source devel/setup.bash roslaunch lio_sam run.launch如果没有报错说明环境配置成功。5. 传感器配置与参数调优5.1 雷达数据转换对于非Velodyne雷达如RoboSense需要进行点云格式转换。创建一个转换节点#!/usr/bin/env python import rospy from sensor_msgs.msg import PointCloud2 def convert_callback(msg): # 转换逻辑在这里实现 pass rospy.init_node(pointcloud_converter) sub rospy.Subscriber(/rslidar_points, PointCloud2, convert_callback) pub rospy.Publisher(/velodyne_points, PointCloud2, queue_size10) rospy.spin()5.2 IMU参数配置在params.yaml中正确设置IMU参数imuTopic: imu/data imuAccNoise: 1.5e-2 imuGyrNoise: 1.5e-3 imuAccBiasN: 2.0e-3 imuGyrBiasN: 3.0e-4 imuGravity: 9.8055.3 关键参数调优建议地图分辨率室外大场景0.5-1.0米室内环境0.1-0.2米关键帧选择surroundingKeyframeSize: 50 # 关键帧数量 surroundingkeyframeDist: 1.0 # 关键帧距离阈值回环检测loopClosureEnableFlag: true loopClosureFrequency: 1.06. 实战测试与性能评估6.1 使用示例数据集测试下载并运行作者提供的数据集roslaunch lio_sam run.launch rosbag play park.bag --clock6.2 实时数据采集测试对于实时数据采集建议按以下顺序启动节点IMU驱动节点雷达驱动节点点云转换节点如需要LIO-SAM主节点6.3 性能评估指标CPU占用率使用htop监控内存使用free -m定位精度与地面真值比较地图一致性检查重叠区域的对齐情况7. 高级调试技巧7.1 RViz可视化配置创建自定义的RViz配置包含以下显示项点云地图机器人轨迹当前扫描坐标系变换7.2 ROS日志分析使用rqt_console查看详细日志过滤关键信息/lio_sam/mapping/performance/lio_sam/mapping/optimization7.3 GDB调试对于复杂问题可以使用GDB调试gdb --args rosrun lio_sam lio_sam_node设置断点在关键函数如updateInitialGuess()和performLoopClosure()。8. 长期运行优化建议内存管理定期保存并清空点云地图使用lio_sam/save_map服务保存当前状态性能调优调整关键帧选择策略优化回环检测频率系统监控rostopic hz /lio_sam/cloud_registered rostopic bw /lio_sam/cloud_registered在实际项目中我们发现最耗时的部分通常是回环检测和优化。通过适当调整loopClosureFrequency参数可以在精度和性能之间取得平衡。另一个常见问题是IMU和雷达时间同步确保硬件时间同步或使用软件时间对齐功能。

更多文章