
简介在机器人自主导航中同步定位与建图SLAM是核心技术之一。激光雷达与惯性测量单元IMU的融合能够有效弥补单一传感器的不足激光雷达提供高精度几何观测而IMU以高频估计短时位姿两者结合显著提升系统在复杂环境下的鲁棒性。LOAMLidar Odometry and Mapping作为经典的三维激光SLAM算法通过特征点提取与帧间配准在有限算力下实现实时定位与建图。基于ROS2环境的实现不仅具备分布式通信与QoS保障还便于工程化部署。从无人驾驶到移动机器人该技术广泛应用于室内外定位、地图构建与路径规划等场景。本文围绕ROS2下的LOAM源码包解析其核心原理、环境搭建与调参实践帮助开发者快速掌握并落地这套激光惯性融合方案。1. 项目整体认知这套ROS2与LOAM源码包到底解决什么问题1.1 标题里每个关键词的硬核含义先把这个项目标题逐词拆开看因为它几乎浓缩了整个激光SLAM领域的核心要素。“基于ROS2”说明它的运行环境是机器人操作系统第二版而不是老牌的ROS1。这个区别很关键ROS2采用了DDS作为底层通信中间件节点之间的通信不再依赖roscore主节点天然支持分布式部署、服务质量策略QoS配置和实时性更好的传输。对于在真实机器人上跑定位建图这意味着激光雷达驱动、IMU驱动、算法节点和三方可视化工具可以分散在不同的计算单元上而不需要像ROS1那样必须有一个中心节点撑着。“激光雷达与惯性测量单元IMU”定义了这套系统的传感器配置。激光雷达提供厘米级精度的环境几何测量但在运动过程中会因为扫描周期内自身位姿变化而产生点云畸变IMU以高频通常200Hz到1000Hz输出角速度和加速度短时间内的相对位姿估计非常准但会随时间漂移。两者正好互补用IMU去补偿激光点云的畸变、辅助帧间位姿预测用激光点云去约束IMU的长期漂移这是目前主流激光SLAM方案的基本盘。“实时定位与建图LOAM”是算法主体。LOAM是Lidar Odometry and Mapping的缩写2014年发表在RSSRobotics: Science and Systems会议上作者是张辑和S Singh。它把SLAM问题拆成了两个并行模块一个高频低精度的里程计模块lidar odometry一个低频高精度的建图模块lidar mapping。这种架构设计使得LOAM能在当年计算资源很弱的嵌入式平台上实现实时运行后来几乎所有优秀的激光SLAM算法比如A-LOAM、LEGO-LOAM、LIO-SAM都继承了这个思路。这套源码包的名字带“.zip”意味着是一个可下载的工程压缩包大概率包含完整的ROS2功能包、算法源码、配置文件、启动脚本和使用文档。拿到手之后你需要自己编译、配置、跑通然后迁移到自己的机器人平台上。1.2 LOAM在SLAM家族中的定位与选型逻辑如果刚接触SLAM很容易被各种术语淹没Gmapping、Hector、Cartographer、LOAM、LIO-SAM、FAST-LIO……它们之间的区别到底是什么其实可以从传感器配置和数学框架两个维度来分类。从传感器配置看纯2D激光SLAM方案Gmapping、Hector、Cartographer的2D模式适合室内平面移动机器人计算量小、落地简单但无法应对复杂的三维环境变化。LOAM属于3D激光SLAM处理的是三维点云输出的是六自由度位姿x、y、z、roll、pitch、yaw适合轮式机器人在复杂地形、无人机、自动驾驶、室外环境等场景。而LIO-SAM、FAST-LIO这些更“年轻”的方案则在LOAM的基础上加入了因子图优化、紧耦合的IMU融合精度和鲁棒性更强但同时也需要更精细的传感器标定和更严格的硬件时序同步。从数学框架看LOAM采用的是基于特征点配准的优化方法不构建栅格地图来匹配而是从每帧点云中提取角点和平面点然后用点到线、点到面的距离最小化来求解位姿变换。这个思路好处是计算高效对计算资源要求低坏处是特征提取的质量直接决定算法效果在特征稀疏的场景长走廊、空旷场地、雪地容易退化。选型时我的实际经验是如果你的传感器是16线或32线的机械式激光雷达计算平台是Jetson Nano、树莓派或者老款工控机IMU的同步精度一般那么LOAM及其ROS2移植版本是一个稳妥的起点。它代码结构清晰把点云配准、特征提取、位姿优化分得很开即使你想在上面做二次开发也比一头扎进LIO-SAM这种“全家桶”要容易得多。如果手里已经有高精度IMU并且传感器时间同步做得好预算也允许直接上LIO-SAM会是更好的选择——这个后面在选型小节里我会再展开对比。2. 核心细节解析从算法原理到实操要点2.1 激光点云畸变为什么必须处理IMU又是怎么救场的机械式激光雷达如Velodyne VLP-16、RS-LiDAR-16的工作原理是内部电机带动激光发射器旋转通过飞行时间计算每个点的距离。一帧完整的点云360度扫描通常需要100毫秒左右也就是说雷达在采集一帧数据的过程中机器人自身也在运动。如果直接把这一帧所有点当作同一时刻的数据去配准相当于让传感器在运动状态下拍了一张“会糊的照片”点云中的地面、墙面、障碍物都会发生不同程度的拉伸或压缩距离越近越明显。具体定量地看假设机器人的线速度为1m/s在100ms的扫描周期内机器人移动了10cm。对于10米外的障碍物这10cm造成的角度误差约为0.57度体现在点云配准上就是厘米级的位移误差。对于建图来说单帧误差不大但里程计误差是累积的帧帧累积下来几百米之后就是几米的漂移。LOAM对这个问题的处理思路很有代表性。它在提取特征点后会对每个特征点根据其扫描时间戳进行畸变矫正把点云从“传感器坐标系运动畸变”变换到“起始扫描时刻的传感器坐标系下”。关键问题是扫描周期内任意时刻的位姿怎么估计这时候IMU就登场了。IMU以几百赫兹的频率输出角速度和加速度可以通过积分在短时间内获得相对准确的位姿变化。常见做法是先用IMU的角速度积分得到旋转增量再结合激光里程计上一帧的线速度估计把点云逐点投影到帧头坐标系。如果你的IMU频率高、零偏小这部分的补偿效果会非常好。这就是为什么LOAM以及后来几乎所有激光惯性方案都强烈推荐安装IMU并做好时间同步。实操中我踩过一个坑IMU和激光雷达外壳固定得不够牢连接件有轻微弹性形变导致剧烈加减速时外参发生了变化。传感器标定一次之后实际运行时外参会漂移点云配准的残差会变大建图质量肉眼可见地下降。所以机械结构必须刚性连接最好用金属件而不是3D打印件。2.2 特征提取的细节角点和平面点怎么算LOAM的特征提取是这套算法最精华的设计。它首先对一帧点云按扫描线scan line进行分组然后计算每个点在其所在扫描线上的局部曲率。曲率公式看起来很简单取当前点前后各5个点共10个点计算当前点到这10个点的平均位置的距离作为曲率。曲率大说明这个点周围几何变化剧烈可能是边缘、角点曲率小说明这个点周围比较平坦属于平面区域。然后设定两个阈值把每根扫描线按曲率排序曲率最大的若干点作为角点edge point曲率最小的若干点作为平面点planar point。但这里有几个细节新手很容易忽略。第一为了避免特征点扎堆LOAM会对每根扫描线分成若干子区域每个子区域最多选择一定数量的特征点保证特征在空间上分布均匀。第二被遮挡区域的点要排除因为激光在被遮挡物的边缘会从前景突然跳到背景产生一个很大的距离跳变这类点配准时极不稳定。第三与激光束方向近似平行的点也要排除因为这类点距离噪声很大配准容易产生大的残差。ROS2实现里这些逻辑都在featureAssociation.cppA-LOAM中或scanRegistration.cpp原版LOAM中。改代码时要注意两个文件的功能并不完全一样有的移植版本把特征提取和帧间配准分得很清有的则合并处理调试前先捋清代码结构别急着改参数。2.3 IMU初始化、外参标定以及和ESKF的关联关于IMU最近很多人在搜“imu静止初始化得到的测量方差和eskf中的过程噪声中q之间关系”“imu预积分”这些话题这里集中讲一下实操层面的理解。IMU原始数据包含陀螺仪的角速度rad/s和加速度计的比力m/s²。在算法使用之前需要做两件事内参标定和零偏估计。内参标定包括陀螺仪和加速度计的尺度因子、交轴耦合、零偏。很多消费级IMU出厂时已经做了标定直接可用但工业级或自己焊接的IMU板子就需要用imu_utils结合Allen方差分析法标定噪声密度和零偏不稳定性。静止初始化指的是在算法启动时让机器人保持静止一段时间采集一定数量比如200帧的IMU数据计算平均角速度和平均加速度把这个平均值作为角速度零偏和加速度计零偏的初始估计。其中加速度计的测量值还能用来估计重力方向从而得到roll和pitch的初始值。这里引出一个很常见的概念混淆静止初始化估计出的“测量方差”和ESKF误差状态卡尔曼滤波器里的过程噪声Q到底什么关系简单说测量方差描述的是IMU自身噪声的统计特性主要是白噪声和随机游走。而ESKF中的过程噪声Q描述的是你建立的系统状态模型所引入的不确定性它不止包含IMU噪声还包含模型线性化误差、激励的未建模动态。实际操作中很多人把两者混为一谈直接把IMU静止测量方差塞进Q里结果估计出来的状态方差极小状态估计过于自信滤波反而容易发散。正确的做法是先用Allen方差得到IMU噪声参数将其作为Q的初始值然后通过真机跑数据、对比位姿真值微调Q的对角元素。调Q时有个经验角速度噪声对应的Q项通常调到静止方差值的5到10倍加速度噪声对应的Q项调到静止方差值的10到20倍。外参标定激光雷达和IMU之间的旋转矩阵和平移向量是另一个大坑。如果外参不准IMU的数据投影到激光坐标系就会产生系统性偏差整个系统别说高精度连收敛都可能成问题。目前比较常用的标定方式是lidar_imu_calib或者用direct_visual_lidar_calibration一次性联合标定相机-激光雷达-IMU。如果不想用现成工具也可以把车开到一个有明显角点和平面特征的室内场景先跑纯激光的LOAM得到位姿轨迹再跑融合IMU的版本对比两者结果反推外参但这个过程很痛苦。我的建议是除非你确实在传感器安装位置频繁改变否则一定要做标定一次投入半天时间能避免后面无数个晚上。3. 实操过程环境搭建、编译运行与参数调优3.1 环境准备ROS2版本、系统依赖与工具链ROS2目前常见的发行版有FoxyUbuntu 20.04、HumbleUbuntu 22.04、IronUbuntu 22.04、JazzyUbuntu 24.04等。对于LOAM相关项目我的建议是选择Ubuntu 22.04 ROS2 Humble这是目前社区最稳定、教程最多、兼容性最好的组合。如果你用的是鱼香ROS一键安装可以直接选Humble脚本会自动配置源和依赖省去很多手工麻烦。安装完ROS2后还需要安装一些基础工具链和依赖库colconROS2的构建工具通常和ros-dev-tools一起安装。PCLPoint Cloud Library点云处理库LOAM的特征提取和配准都依赖它。Eigen3线性代数库所有位姿变换、优化计算都用它。Ceres Solver非线性优化库建图模块的扫描匹配优化会用到。yaml-cpp配置文件解析库。Ubuntu上安装命令大致如下sudo apt install libpcl-dev libeigen3-dev libyaml-cpp-dev sudo apt install ros-humble-pcl-ros ros-humble-pcl-conversions sudo apt install libceres-dev注意libceres-dev在Ubuntu 22.04的默认源里可能版本较老如果编译报错可以尝试自己编译安装新版本Ceres。另外务必确认Eigen3的版本在3.3以上太老的版本在编译一些头文件时会报莫名其妙的错误。如果是在Jetson等ARM平台上编译PCL和Ceres的编译时间会非常长建议提前预留好磁盘空间和编译时间。遇到编译内存不足的问题可以临时增加swap空间。3.2 编译流程从源码到colcon build的完整步骤拿到项目的.zip压缩包后假设解压到~/ros2_ws/src目录下整个编译流程大致如下cd ~/ros2_ws colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPERelease source install/setup.bash--symlink-install会让Python脚本和配置文件以符号链接方式安装改代码时不用重新build-DCMAKE_BUILD_TYPERelease会开启编译器优化对实时算法来说Debug和Release的性能差距巨大必须用Release。编译过程中最常见的错误是依赖找不到。比如Could not find a package configuration file provided by pcl_conversions这种问题通常是因为没有把pcl_conversions这个ROS2包装进去。解决方法是手动安装sudo apt install ros-humble-pcl-conversions另一个常见错误是Eigen3的宏定义冲突。A-LOAM这类老代码经常用Eigen 3.2的API但系统装的是Eigen 3.3或3.4编译时报一堆“找不到成员函数”的错误。解决办法是在CMakeLists.txt里加上add_definitions(-DEIGEN_DONT_VECTORIZE)这个宏可以关闭Eigen的向量化优化避免一些因版本升级导致的编译冲突。编译通过后先用ros2 pkg list | grep loam确认功能包是否被正确识别然后用rqt_graph看一下节点是否都拉起来了。首次运行时所有节点都启动后观察终端有没有红字报错尤其是“Transform from xxx to yyy failed”这类TF错误这是后续一切调试的基础。3.3 实机运行流程话题输入、启动文件与坐标变换配置以A-LOAM的ROS2移植版为例典型运行流程是启动激光雷达驱动节点比如velodyne_driver或rslidar_sdk把点云话题发布为/velodyne_points或/rslidar_points。启动IMU驱动节点发布/imu/data话题输出sensor_msgs/msg/Imu格式的数据。运行LOAM的主节点订阅上述两个话题输出里程计和地图话题。启动文件launch文件里需要重点检查几个地方话题名是否和驱动一致不一致就用remap参数重映射。坐标系名称是否匹配通常设置base_link为机器人本体坐标系lidar_link为激光雷达安装坐标系imu_link为IMU安装坐标系map为全局地图坐标系。外参的旋转和平移是否和实际安装一致。在实际机器人上正确配置TF树是跑通系统的前提。激光雷达和IMU的安装位置不同从map到base_link、再到lidar_link和imu_link的TF变换必须准确无误。如果用的是ROS2的robot_state_publisher则要在URDF里正确描述所有传感器在机器人本体上的安装位置和姿态。跑起来之后用rviz2订阅点云、里程计轨迹和地图话题进行可视化。按我的习惯会同时打开三个显示项原始点云带强度值、经过畸变矫正后的特征点云角点和平面点分别用不同颜色、累计地图点云。特征点的可视化能快速判断特征提取的质量如果角点和平面点分布均匀、数量适中说明点云配准的基础是好的如果特征点一片红或一片绿要么是曲率阈值设置不对要么是点云本身有问题。3.4 关键参数调优分辨率、阈值与坐标系的取舍LOAM参数调优有几个维度分别是曲率阈值。角点提取阈值和平面点提取阈值直接影响特征数量。阈值太小会提取出大量无用点增加计算量并降低配准精度阈值太大会导致特征不足难以稳定配准。初始值可以设为角点曲率0.5、平面点曲率0.1然后根据可视化的效果微调。scan period。默认是0.1秒10Hz如果你的激光雷达是20Hz必须改成0.05。这个参数在ROS2移植版本里通常在launch参数中传入不改的话时间戳计算全是错的里程计会严重跳变。体素下采样分辨率。建图模块通常会对点云做体素滤波减少点数。分辨率设得越小地图越精细但计算量越大。16线雷达我习惯设为0.2米到0.5米32线或64线可以设0.1米到0.2米。IMU噪声参数。在ESKF或滤波融合中Q阵和R阵的取值前面已经说过必须结合静止初始化结果微调。另一个容易被忽视的点是激光雷达的扫描方向。Velodyne是顺时针旋转从上往下看而RoboSense某些型号是逆时针。如果代码里默认的是顺时针装逆时针雷达时特征提取和畸变矫正都会出错。很多ROS2移植版在驱动层已经处理了这个问题但如果自己手写驱动务必确认。最简单的验证方法把雷达放桌上记录点云手动旋转雷达看rviz里点云旋转的方向是否与实际一致。4. 常见问题与排查技巧实录4.1 编译阶段从CMake到内存枯竭编译问题占了整个项目消耗时间的很大一部分尤其是第一次在陌生环境下编译。这里列几个经典的坑。Ceres版本过旧。Ubuntu 22.04自带的Ceres版本是1.14而某些新移植的LOAM版本要求1.16以上。编译时会报fatal error: ceres/rotation.h: No such file or directory虽然这个头文件在1.14里也存在但有些函数接口对不上。解决方法是去Ceres官方GitHub下载最新版本自己编译安装注意需要先安装Google的glog和gflags依赖。内存不足。在低的嵌入式板子上编译PCL和Ceres是件痛苦的事colcon build常因内存不足被系统杀掉。我的做法是先用make -j1甚至make -j2限制并行度或者增加swapsudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile8G swap对大多数场景够用了。当然如果是在服务器上交叉编译就无所谓这一点。Eigen版本冲突。系统装了多个Eigen版本时CMakeLists.txt中find_package(Eigen3)可能找到旧版本。在编译前先确认pkg-config --modversion eigen3如果版本太老建议直接卸载旧版本或者在CMake中指定EIGEN3_INCLUDE_DIR。4.2 运行阶段话题对接不上与TF崩溃运行阶段遇到最多的问题是话题通信和TF坐标变换。话题名对不上。ros2 topic list查一下驱动发布的话题名、类型和频率。常见问题包括激光雷达发布的是PointCloud2算法订阅的是PointCloud类型不匹配导致消息丢包或完全不接收IMU发布的消息缺少协方差填充某些算法会崩溃。遇到这种情况可以用ros2 topic echo逐个验证消息内容以及用ros2 topic hz检查消息频率是否正常。TF变换崩溃。报错信息通常是No transform between [lidar_link] and [map]。原因可能是URDF没有写全传感器坐标系的父子关系或者static_transform_publisher没有在launch文件中启动或者TF树中有环导致坐标变换无解。排查方法是打开tf2_tools的view_frames工具把当前TF树导出成PDF直观地看到各个坐标系之间的连接关系。圈出缺失或者冗余的坐标系通常很快就能定位问题。点云时间戳异常。如果算法报TF_OLD_DATA的警告说明点云的时间戳和TF树的时间差太大。排查思路是先看雷达驱动是否在模拟器里模拟器的时间可能和实际时钟不同步需要开启use_sim_time参数。再看IMU的时间戳是否和雷达对齐如果两者相差了几十毫秒以上融合算法会明显劣化。没有硬件同步能力的情况下软件上至少要做时间戳偏移补偿很多驱动允许设置时间偏移量。4.3 效果调优地图发飘、里程计跳变、长时间漂移地图发飘大概率是外参标定不准或者运动畸变没补偿好。先检查激光雷达与IMU的外参特别是旋转矩阵。很多人在yaml配置文件里把外参的RPYroll、pitch、yaw写反导致点云和IMU数据各说各话。如果外参确认没问题再检查畸变补偿逻辑是否生效——看特征点云在运动过程中是否平滑如果相邻两帧的特征点云有明显的“撕裂”感说明畸变校正强度不够。里程计跳变特别是累计位置突然跳动几厘米甚至几十厘米通常是因为帧间配准退化。在特征稀疏环境长走廊、空场地或快速旋转时点到线和点到面的约束不够优化问题陷入病态。LOAM本身没有太好的办法应对这种退化场景操作上可以做的一是提高平面点数量阈值在配置里增加平面点的比例二是降低对远距离点的信任把超出一定范围的点权重调低三是评估自己的传感器如果16线雷达角分辨率本身就低快速旋转时特征提取不稳定那就要降低运行速度或者换更高线数的雷达。长时间漂移则需要看是否有回环检测机制。原始LOAM不做回环优化属于纯里程计建图漂移无法消除。如果建图精度要求高建议在LOAM输出的里程计基础上再用GTSAM或g2o做一次后端的位姿图优化或者直接考虑迁移到LIO-SAM这类带回环检测的方案。不少ROS2移植版本已经把回环检测加了进去如果源码包里有loop_closure相关目录说明它已经内置了后期优化能力优先用起来。5. 扩展与进阶从跑通到真正落地5.1 把LOAM迁移到自己机器人上的关键步骤跑通示例数据只是第一步真正把LOAM部署到自己的机器人上还有几个关键步骤。首先是传感器选型确认。LOAM对雷达的线数并不敏感16线也能跑但点云密度越低特征提取的稳定性越差。如果你用的是2D激光雷达那LOAM是用不了的建议改用Gmapping或Cartographer。IMU的选型建议用内置温控的高精度MEMS产品比如InvenSense ICM-20602或Bosch BMI088消费级无人机飞控上的IMU也够用。然后是坐标系统一。自己搭机器人时一定要在URDF里明确所有传感器的安装位置和姿态并且在launch文件中保证TF树按时发布。建议先用ros2 run tf2_ros static_transform_publisher发布静态坐标变换验证TF树正确后再尝试调试算法。很多新手把时间浪费在算法上最后发现是TF没配好。最后是数据记录与离线调试。在真机上跑的时候建议用ros2 bag record -a录制一份完整的bag包。回放时用ros2 bag play把话题发出去这样可以在无实车的情况下反复调试算法参数快速迭代。5.2 和Cartographer、LIO-SAM等方案的对比与选择很多人在搜“ros2 cartographer构建的实时map”“2d激光雷达slam算法graphy”的时候其实就是在纠结选哪个方案。我根据自己的实际使用经验做一个对比。LOAM适合的场景室外大场景、16线以上雷达、强实时性要求、计算资源有限。它代码相对简洁可读性好非常适合作为学习激光SLAM的入门算法也适合做一些原型验证。Cartographer适合的场景室内结构化环境、2D或3D激光雷达、需要构建高质量栅格地图用于导航。Cartographer的核心优势是Submap和回环检测构建的地图一致性更好但计算资源消耗较大配置比LOAM复杂不少。如果目标是让机器人在室内跑导航比如ROS2 Nav2Cartographer会是更顺手的搭配。LIO-SAM适合的场景需要高精度位姿估计、有较好的IMU、希望有回环检测和全局优化的场合。它在LOAM的基础上用了因子图、紧耦合IMU、回环检测鲁棒性更强但对传感器的标定、时间同步要求更高调参难度也更大。我的建议是如果你是第一次接触激光惯性SLAM先把LOAM吃透理解特征提取和帧间配准的核心逻辑再选择是否升级到LIO-SAM。很多人一上来就冲LIO-SAM结果被一大堆参数和因子图理论淹没反而迷失了方向。打好基础理解每个模块为什么存在再上复杂系统会顺很多。5.3 继续深挖的方向和资料推荐这包做透之后想继续深挖可以从这几个方向入手一是替换特征提取策略。原始LOAM基于曲率的特征点分类在低纹理环境中表现不佳。你可以尝试引入基于深度学习的特征点提取比如Lo-Net、LOAM-Net或者把点云语义信息融入特征提取。二是做前端和后端的解耦。把LOAM的帧间里程计输出作为因子接入GTSAM或Ceres的位姿图优化框架加上回环检测整体系统精度会有一个质的飞跃。LIO-SAM的核心思路就是这样前面已经推荐过。三是改成紧耦合的惯性融合。原始LOAM对IMU的使用比较“浅”主要用来辅助畸变矫正和帧间预测。如果你有兴趣可以尝试把IMU状态变量姿态、速度、零偏放进滤波器中用ESKF或误差状态迭代卡尔曼滤波ESIKF实现紧耦合这就是FAST-LIO的思路。关于资料我推荐几个方向首先是论文本身《LOAM: Lidar Odometry and Mapping in Real-time》是必读的其次是开源代码A-LOAM和LIO-SAM的代码读懂对理解整个生态非常有帮助最后是多传感器标定相关的资料尤其是lidar_imu_calib的文档和Kalibr工具把标定吃透后面所有方案的实机效果都会上一个台阶。6. 最后再分享一个实战经验这个源码包跑通之后有个细节我印象特别深。在真实场景第一次跑时我用的是一台16线雷达加一个消费级IMU室内走廊大概50米长。第一遍跑完地图末端的漂移大概在30厘米左右对于二十多秒的建图过程来说这个精度其实已经不错了。但我没有急着去调算法参数而是先把雷达和IMU的安装支架重新检查了一遍发现IMU固定螺丝有一颗有点松动锁紧之后重新标定外参再去跑同一组数据末端的漂移降到了15厘米以内。很多时候算法效果不好问题并不在算法本身而是在机械结构、固定方式、时间同步这些“不起眼”的环节。拿到这套代码以后先不要急着改参数、换算法模块花半天时间把传感器安装、固定、标定、时间校准捋一遍再开始调算法会少走很多弯路。后续你想继续扩展可以从两个方向入手一是把算法输出接入导航系统在ROS2环境下配合Nav2做一些简单的自主导航实验二是尝试把LOAM替换成LIO-SAM或FAST-LIO对比一下紧耦合和松耦合在真实场景下的差异。无论选哪个方向这套源码包作为起点都会让你对激光惯性SLAM的理解上一个台阶。本文还有配套的精品资源点击获取