实践(一)LeGO-LOAM从零部署到实战建图

张开发
2026/4/13 23:58:28 15 分钟阅读

分享文章

实践(一)LeGO-LOAM从零部署到实战建图
1. LeGO-LOAM环境准备与依赖安装第一次接触LeGO-LOAM的朋友可能会被各种依赖和环境配置搞得头大。我在TX2和Ubuntu 18.04/20.04上都折腾过这个系统踩过不少坑。这里分享一个经过验证的稳定安装方案。GTSAM的安装是第一个关键步骤。这个因子图优化库对LOAM系列算法至关重要。建议先用以下命令清理可能存在的旧版本sudo apt-get purge libgtsam-dev # 清除旧版本 cd ~ git clone https://bitbucket.org/gtborg/gtsam.git cd gtsam mkdir build cd build编译选项直接影响后续使用稳定性。实测发现TX2等ARM架构设备需要特别处理cmake -DGTSAM_BUILD_WITH_MARCH_NATIVEOFF .. # 禁用CPU特定优化 make -j$(nproc) # 根据CPU核心数并行编译 sudo make install # 必须sudo权限ROS环境配置经常被忽视。不同Ubuntu版本对应不同ROS发行版Ubuntu 18.04 → MelodicUbuntu 20.04 → Noetic用这个命令检查ROS版本是否正确rosversion -d # 显示当前ROS发行版名称2. 源码编译与常见错误解决LeGO-LOAM的编译过程有几个隐藏陷阱。第一次编译务必使用-j1参数cd ~/catkin_ws catkin_make -j1 # 强制单线程编译这个限制是因为ROS消息类型生成需要顺序执行。我曾在Jetson设备上忽略这点导致消息头文件丢失浪费两小时排查。典型编译错误处理方案CMake找不到GTSAMexport GTSAM_DIR/usr/local/lib/cmake/GTSAM # 添加环境变量C14标准问题 在CMakeLists.txt中添加set(CMAKE_CXX_STANDARD 14)OpenCV头文件错误Ubuntu 20.04特有 修改utility.h中的包含路径// 原内容 #include opencv/cv.h // 修改为 #include opencv2/opencv.hpp3. 雷达参数配置实战技巧不同雷达型号需要调整utility.h中的关键参数。以常见的VLP-16和Pandar40为例// VLP-16配置 const int N_SCAN 16; const float ang_res_y 2.0; // 垂直角分辨率 const int groundScanInd 7; // 地面线束索引 // Pandar40配置 const int N_SCAN 40; const float ang_res_y 0.33; // 更密集的垂直分辨率 const int groundScanInd 10; // 更多线束需要调整地面检测特征提取参数直接影响建图质量const int edgeFeatureNum 6; // 边缘特征点数 const float edgeThreshold 0.1; // 边缘阈值 const int surfFeatureNum 10; // 平面特征点数实测发现室内场景可以适当增加surfFeatureNum到15而室外大场景需要降低edgeThreshold到0.05以获得更多特征点。4. 运行与建图全流程启动顺序有严格依赖关系roslaunch lego_loam run.launch # 先启动算法 rosbag play --clock dataset.bag # 再播放数据关键细节--clock参数确保时间同步没有它会导致地图错位播放速度建议用-r 0.5降速处理高动态场景内存不足时可添加--pause参数分段处理地图保存技巧rosbag record -O out /laser_cloud_surround # 录制关键话题 rosrun pcl_ros bag_to_pcd input.bag /laser_cloud_surround pcd # 转换格式 pcl_viewer xxx.pcd -bc 255,255,255 -ps 2 # 白色背景大点云5. Ubuntu 20.04特有问题解决新版ROS2的topic命名规则更严格会导致地图不显示。需要修改mapOptmization.cpp// 原代码会出问题 cloudMsgTemp.header.frame_id /camera_init; // 修改为去掉斜杠 cloudMsgTemp.header.frame_id camera_init;性能优化方案在TX2上建议关闭可视化param namepubMap valuefalse/ !-- 在launch文件中 --降低特征点数量const int edgeFeatureNum 4; // 原值6 const int surfFeatureNum 8; // 原值106. 实机测试经验分享在Clearpath Husky机器人上实测时发现这些参数组合效果最佳低速移动0.5m/s时edgeThreshold0.08, surfThreshold0.15室外场景nearestFeatureSearchSqDist50默认25太小多雷达系统需要额外修改点云类型定义struct PointXYZIRT { // 增加时间戳字段 PCL_ADD_POINT4D; float intensity; uint16_t ring; // 激光雷达环号 double timestamp; // 精确时间戳 };最后提醒建图完成后务必检查点云重叠率。理想情况下相邻帧重叠区域应达到70%以上否则需要调整特征提取参数或降低移动速度。

更多文章