保姆级教程:在Ubuntu 18.04上为ORB-SLAM2添加彩色点云地图(含PCL库避坑指南)
在Ubuntu 18.04上实现ORB-SLAM2彩色点云地图的全流程指南当第一次看到ORB-SLAM2生成的稀疏特征点时我意识到视觉SLAM的潜力远不止于此。直到成功运行彩色点云建图版本那种从二维图像到三维稠密重建的震撼感才真正让我理解了SLAM技术的魅力所在。本文将带你完整走过从环境配置到彩色地图保存的每一步特别针对Ubuntu 18.04和ROS Melodic环境中的典型问题提供解决方案。1. 环境准备与源码配置在开始编译前确保系统环境满足以下基础要求Ubuntu 18.04.6 LTS建议使用官方镜像ROS Melodic完整版包含rviz、tf等组件至少16GB空闲磁盘空间用于存储数据集和编译中间文件关键依赖安装sudo apt-get install -y libeigen3-dev libboost-all-dev libopencv-dev python-catkin-tools对于PCL库的版本管理Ubuntu 18.04默认仓库提供的是1.8版本但ORB-SLAM2_with_pointcloud_map对1.7版本兼容性更好。可通过以下命令安装指定版本sudo apt-get install -y libpcl-dev1.8.1dfsg1-7ubuntu1源码获取建议使用以下仓库cd ~/catkin_ws/src git clone https://github.com/gaoxiang12/ORB_SLAM2_with_pointcloud_map.git2. 基础编译与常见错误修复2.1 预处理步骤进入项目主目录后需要执行几个关键操作清理旧编译文件rm -rf Thirdparty/DBoW2/build Thirdparty/g2o/build Examples/ROS/ORB_SLAM2/build复制词汇表文件cp -r ORB_SLAM2/Vocabulary/ ORB_SLAM2_with_pointcloud_map/2.2 CMake配置调整修改CMakeLists.txt中的编译器选项删除所有-marchnative标记。这个优化选项在某些CPU架构上可能导致兼容性问题。具体需要修改两处位置主目录下的CMakeLists.txtset(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -Wall -O3) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -Wall -O3)Thirdparty/g2o/CMakeLists.txtSET(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} -O3) SET(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} -O3)2.3 编译执行与验证赋予执行权限并开始编译chmod x build.sh ./build.sh常见编译错误及解决方案错误类型表现特征解决方法PCL库缺失Could not find PCL确认libpcl-dev已安装修改CMake为find_package(PCL REQUIRED)Eigen3版本冲突Eigen3 not found手动指定路径set(EIGEN3_INCLUDE_DIR /usr/include/eigen3)Boost链接错误undefined reference to boost::system在链接选项中添加-lboost_system3. 彩色点云功能实现3.1 代码修改要点要实现彩色点云显示需要在以下文件进行关键修改include/Tracking.h中添加RGB图像成员cv::Mat mImRGB; // 新增行 cv::Mat mImGray; cv::Mat mImDepth;src/Tracking.cc中两处修改// 第一处修改 mImRGB imRGB; // 新增行 mImGray imRGB; // 第二处修改 mpPointCloudMapping-insertKeyFrame(pKF, this-mImRGB, this-mImDepth);3.2 点云保存功能在src/pointcloudmapping.cc中添加保存功能添加头文件#include pcl/io/pcd_io.h在viewer()函数中添加保存命令pcl::io::savePCDFileBinary(slam_result.pcd, *globalMap);编译完成后可使用以下工具验证结果sudo apt-get install pcl-tools pcl_viewer slam_result.pcd4. ROS集成与实战测试4.1 环境变量配置在~/.bashrc末尾添加export ROS_PACKAGE_PATH${ROS_PACKAGE_PATH}:$HOME/catkin_ws/src/ORB_SLAM2_with_pointcloud_map/Examples/ROS刷新配置并验证source ~/.bashrc echo $ROS_PACKAGE_PATH4.2 ROS节点编译执行ROS部分的编译脚本chmod x build_ros.sh ./build_ros.sh典型ROS编译问题处理路径冲突问题rm -rf ~/catkin_ws/src/ORB_SLAM2PCL头文件缺失sudo cp -r /usr/include/pcl-1.8/pcl /usr/local/include/Boost系统库链接 在Examples/ROS/ORB_SLAM2/CMakeLists.txt中添加target_link_libraries(${PROJECT_NAME} boost_system)4.3 数据集测试使用TUM数据集测试时建议从官方下载fr1_desk序列。关联文件格式示例1305031102.175304 rgb/1305031102.175304.png 1305031102.211214 depth/1305031102.211214.png运行命令结构./rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml [数据集路径] [关联文件]5. 高级调试与性能优化5.1 点云参数调整在pointcloudmapping.cc中可以修改以下关键参数参数默认值推荐范围作用voxelSize0.010.005-0.05点云降采样体素大小maxPointDistance4.03.0-6.0最大有效点距离minPointDistance0.10.05-0.3最小有效点距离5.2 实时可视化技巧使用pcl_viewer时添加以下参数可获得更好效果pcl_viewer result.pcd -bc 255,255,255 -ps 2常用快捷键R重置视角J截图保存鼠标滚轮调整点大小5.3 内存管理建议长时间运行时可能出现内存不足问题可通过以下方式缓解定期保存子地图if(globalMap-size() 1000000){ pcl::io::savePCDFileBinary(submap_std::to_string(frameCount).pcd, *globalMap); globalMap-clear(); }启用内存监控watch -n 1 free -m