手把手教你用LIO-SAM在Ubuntu20.04上实现SLAM:从环境配置到数据集测试

张开发
2026/4/6 15:33:47 15 分钟阅读

分享文章

手把手教你用LIO-SAM在Ubuntu20.04上实现SLAM:从环境配置到数据集测试
从零搭建LIO-SAMUbuntu 20.04环境下的SLAM实战指南在机器人导航和自动驾驶领域实时定位与地图构建SLAM技术扮演着至关重要的角色。LIO-SAM作为近年来备受关注的激光惯性里程计框架凭借其紧耦合的传感器融合设计和高效的实时性能成为众多研究者和开发者的首选方案。本文将带您从零开始在Ubuntu 20.04系统中完整搭建LIO-SAM开发环境并通过实际数据集测试验证系统运行效果。1. 环境准备与基础配置在开始LIO-SAM的安装之前我们需要确保系统具备所有必要的软件依赖和工具链。Ubuntu 20.04 LTS作为长期支持版本提供了稳定的基础环境特别适合开发需要长期维护的SLAM系统。首先更新系统软件包至最新版本sudo apt update sudo apt upgrade -y接下来安装ROS Noetic这是官方支持Ubuntu 20.04的唯一ROS版本。执行以下命令添加ROS仓库并安装完整桌面版sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full提示安装完成后记得执行source /opt/ros/noetic/setup.bash并将该命令添加到~/.bashrc文件中以实现持久化。2. 创建工作空间与获取源码合理的项目结构管理是开发过程中的重要环节。我们建议为LIO-SAM创建独立的工作空间避免与其他ROS项目产生依赖冲突。创建并初始化工作空间mkdir -p ~/lio_sam_ws/src cd ~/lio_sam_ws/src catkin_init_workspace获取LIO-SAM源码有两种推荐方式直接克隆官方仓库git clone https://github.com/TixiaoShan/LIO-SAM.git下载release版本压缩包并解压至src目录注意如果使用zip下载方式解压后请确保文件夹重命名为LIO-SAM保持与ROS包命名一致。3. 关键依赖安装与配置LIO-SAM依赖于多个核心库其中最重要的是GTSAMGeorgia Tech Smoothing and Mapping library。这个因子图优化库为LIO-SAM提供了强大的后端优化能力。安装GTSAM 4.1版本与LIO-SAM兼容性最佳sudo add-apt-repository ppa:borglab/gtsam-release-4.1 sudo apt update sudo apt install libgtsam-dev libgtsam-unstable-dev其他必要的ROS依赖包包括sudo apt install ros-noetic-navigation \ ros-noetic-robot-localization \ ros-noetic-robot-state-publisher \ ros-noetic-libg2o \ ros-noetic-velodyne-pointcloud对于点云处理相关的功能还需要安装PCL开发包sudo apt install libpcl-dev4. 源码修改与编译技巧在编译LIO-SAM之前需要对源代码进行几处关键修改以确保兼容性。这些修改主要涉及编译器标准和OpenCV头文件引用。4.1 CMakeLists.txt修改打开~/lio_sam_ws/src/LIO-SAM/CMakeLists.txt文件找到以下行并进行修改set(CMAKE_CXX_STANDARD 11) → 修改为 set(CMAKE_CXX_STANDARD 14)4.2 utility.h头文件调整在~/lio_sam_ws/src/LIO-SAM/include/utility.h中需要做两处修改替换OpenCV头文件引用// #include opencv/cv.h #include opencv2/opencv.hpp调整PCL点云类型定义的位置将第27行移动到第18行附近4.3 编译策略完成上述修改后可以开始编译过程。建议首次编译使用单线程模式以便于错误排查cd ~/lio_sam_ws catkin_make -j1如果遇到编译错误可以尝试清理后重新编译rm -rf ~/lio_sam_ws/build ~/lio_sam_ws/devel catkin_make5. 系统测试与数据集验证成功编译后就可以使用公开数据集测试LIO-SAM的运行效果了。官方提供了多个测试数据集适合不同场景的验证。5.1 环境变量配置将工作空间设置添加到bashrc中echo source ~/lio_sam_ws/devel/setup.bash ~/.bashrc source ~/.bashrc5.2 启动LIO-SAM节点在新终端中运行roslaunch lio_sam run.launch5.3 数据集播放下载并解压测试数据集如casual_walk.bag然后在新终端中播放rosbag play --clock path_to_dataset/casual_walk.bag5.4 结果可视化通过RViz可以实时观察建图效果。建议使用LIO-SAM提供的默认配置rosrun rviz rviz -d rospack find lio_sam/rviz/lio_sam.rviz6. 常见问题排查与性能优化在实际运行过程中可能会遇到各种问题。以下是几个典型问题及其解决方案点云显示异常 检查传感器配置是否正确特别是params.yaml中的pointCloudTopic参数是否与数据集中的话题名称匹配。轨迹漂移严重 尝试调整params.yaml中的mapFrame和odometryFrame参数确保坐标系设置合理。系统运行卡顿 考虑降低点云采样率或优化算法参数# params.yaml downsampleRate: 0.2 # 降低采样率内存占用过高 可以限制地图保存的点云数量# params.yaml maxSavedCloudNum: 100 # 默认500对于性能优化建议从以下几个方面入手硬件加速启用GPU加速的点云处理参数调优根据实际场景调整ICP匹配参数传感器校准确保IMU和激光雷达的时间同步和空间标定准确7. 进阶应用与二次开发掌握了LIO-SAM的基本使用后可以考虑进行更深层次的定制开发。以下是几个可能的扩展方向多传感器融合 在现有框架基础上添加视觉或毫米波雷达数据源闭环检测优化 改进默认的闭环检测算法提高大场景下的定位精度嵌入式部署 针对特定硬件平台进行性能优化和裁剪一个简单的自定义点云处理示例// 在include/cloud_info.h中添加自定义处理函数 void processCustomCloud(const sensor_msgs::PointCloud2ConstPtr cloudIn) { pcl::PointCloudpcl::PointXYZI::Ptr tempCloud(new pcl::PointCloudpcl::PointXYZI()); pcl::fromROSMsg(*cloudIn, *tempCloud); // 自定义处理逻辑 }8. 实际项目中的经验分享在工业场景部署LIO-SAM时我们发现了几点值得注意的经验时间同步确保激光雷达和IMU的硬件时间同步至关重要微小的时间偏差会导致明显的轨迹漂移环境特征在特征丰富的环境中如室内表现优异而在长廊或开阔地带可能需要额外约束参数适应不同运动速度下需要调整运动预测参数高速场景下需要更大的预测窗口一个实用的调试技巧是实时监控关键话题rostopic echo /lio_sam/mapping/odometry # 查看里程计输出 rostopic echo /lio_sam/mapping/path # 查看全局路径对于长期运行的SLAM系统建议定期保存子地图并实现地图拼接功能以避免内存无限增长。可以通过修改mapOptmization.cpp实现自动化的地图管理策略。

更多文章