YOLOv8-ORB-SLAM3 编译运行完整指南

张开发
2026/4/17 20:38:05 15 分钟阅读

分享文章

YOLOv8-ORB-SLAM3 编译运行完整指南
前言最近在配置 YOLOv8-ORB-SLAM3 这个结合了语义分割的动态SLAM系统时遇到了一系列从编译到运行的棘手问题。从 OpenCV 版本冲突、链接错误到符号不匹配几乎把能踩的坑都踩了一遍。最终在社区帮助下成功解决特此记录整个排错过程希望对后来者有所帮助。项目简介YOLOv8-ORB-SLAM3 是在 ORB-SLAM3 基础上集成 YOLOv8 进行语义分割动态剔除行人等移动物体上的特征点从而提高 SLAM 在动态环境中的定位精度。环境配置操作系统: Ubuntu 20.04/22.04编译器: GCC 9 支持 C14关键依赖: OpenCV 4.7.0, Eigen3, Pangolin, PyTorch, Ultralytics基础配置环境和ORB-SLAM3相同在此不再赘述但要求OpenCV 4.7.0踩坑实录第一阶段编译错误 - OpenCV DNN 模块未链接错误信息:undefined reference to cv::dnn::dnn4_v20211004::Net::~Net()原因分析:项目需要 OpenCV 的 DNN 模块来运行 YOLOv8系统安装的 OpenCV 缺少 DNN 模块或版本不匹配解决方案:# 安装完整版 OpenCV 4.7.0gitclone--branch4.7.0--depth1https://github.com/opencv/opencv.gitcdopencvmkdirbuildcdbuild cmake-DCMAKE_BUILD_TYPERELEASE\-DCMAKE_INSTALL_PREFIX/usr/local\-DWITH_CUDAOFF\-DBUILD_TESTSOFF\-DOPENCV_GENERATE_PKGCONFIGON..make-j$(nproc)sudomakeinstallsudoldconfig第二阶段运行时错误 - OpenCV 版本冲突错误信息:Yolov8-seg Need OpenCV Version 4.7.0 error while loading shared libraries: libopencv_dnn.so.4.5: cannot open shared object file原因分析:系统中同时存在 OpenCV 4.5 和 4.7.0程序运行时链接到了旧版本解决方案:# 删除旧版本库sudorm-f/usr/local/lib/libopencv*4.5*sudorm-f/usr/lib/x86_64-linux-gnu/libopencv*4.5*# 创建符号链接指向新版本sudoln-sf/usr/local/lib/libopencv_core.so.4.7 /usr/local/lib/libopencv_core.so.4.5sudoln-sf/usr/local/lib/libopencv_dnn.so.4.7 /usr/local/lib/libopencv_dnn.so.4.5# ... 其他库类似# 设置库路径exportLD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH第三阶段符号未定义错误错误信息:undefined symbol: _ZN9ORB_SLAM36System9TrackRGBDERKN2cv3MatES4_RKdRSt6vectorI12OutputParamsSaIS8_EERKS7_INS_3IMU5PointESaISD_EENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE原因分析:rgbd_tum.cc中的函数调用与System.h声明不匹配YOLOv8 版本修改了TrackRGBD接口增加了 OutputParams 参数解决方案:修改Examples/RGB-D/rgbd_tum.cc:// 添加 YOLO 头文件#includeyolov8/yolov8_seg.hintmain(intargc,char**argv){// ... 初始化代码 ...// 定义 YOLO 结果向量vectorOutputParamsresult;for(intni0;ninImages;ni){// ... 读取图像 ...// 使用6参数版本的 TrackRGBDSLAM.TrackRGBD(imRGB,imD,tframe,result,vectorORB_SLAM3::IMU::Point(),);}}修改include/System.h中的声明:// 确保签名匹配Sophus::SE3fTrackRGBD(constcv::Matim,constcv::Matdepthmap,constdoubletimestamp,vectorOutputParamsresult,constvectorIMU::PointvImuMeasvectorIMU::Point(),string filename);第四阶段段错误 (Segmentation Fault)错误信息:段错误 (核心已转储)原因分析:YOLOv8 模型文件不存在或路径错误配置文件缺少 YOLO 相关参数解决方案:# 下载 YOLOv8 模型mkdir-pyolov8/modelswgethttps://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-seg.onnx\-Oyolov8/models/yolov8n-seg.onnx# 在 TUM2.yaml 中添加配置echoyolo_model_path:\$(pwd)/yolov8/models/yolov8n-seg.onnx\Examples/RGB-D/TUM2.yaml最终运行命令# 设置环境变量exportLD_LIBRARY_PATH./lib:/usr/local/lib:$LD_LIBRARY_PATH# 运行 RGB-D 模式./Examples/RGB-D/rgbd_tum\Vocabulary/ORBvoc.txt\Examples/RGB-D/TUM2.yaml\/path/to/dataset/rgbd_dataset_freiburg2_desk\/path/to/dataset/associations.txt经验总结OpenCV 版本至关重要: YOLOv8 的 C 部署要求 OpenCV ≥ 4.7.0务必从源码编译安装库链接冲突是隐形杀手: 系统中多个 OpenCV 版本共存时使用LD_LIBRARY_PATH和符号链接控制链接顺序符号调试技巧:nm -D libxxx.so | grep SymbolName查看库中的符号nm -u executable | grep SymbolName查看可执行文件需要的符号cfilt可以反编译 C 符号名配置文件完整性: 确保 YAML 配置文件中包含所有必需的参数特别是新增的 YOLO 相关配置循序渐进调试:先确保基础 ORB-SLAM3 能正常运行再逐步集成 YOLOv8 功能使用 gdb 定位段错误位置资源链接YOLOv8-ORB-SLAM3 GitHubORB-SLAM3 官方仓库TUM RGB-D 数据集结语开源项目的魅力在于社区的协作与分享。希望这篇记录能帮助遇到类似问题的同学少走弯路。如果文章对你有帮助欢迎点赞分享

更多文章