本文是对关于ORB-SLAM2算法编译过程中运行./build_ros.sh命令报错问题的解决方法的描述,对解决该报错的过程进行梳理,方便今后使用。


1. ORB-SLAM2算法的工作空间搭建

参考前面文章
Ubuntu 16.04系统下安装Open-CV 3.1.0
Ubuntu 16.04系统下安装Eigen3矩阵库(简便法)
Ubuntu 16.04系统下使用数据集运行ORB-SLAM2算法


2. 运行./build_ros.sh命令报错

(1)运行./build_ros.sh出现如下报错:

Failed to invoke /opt/ros/kinetic/bin/rospack deps-manifests ORB_SLAM2
Error: package 'cv_bridge' depends on non-existent package 'opencv3' and
rosdep claims that it is not a system dependency. Check the ROS_PACKAGE_PATH or try calling 'rosdep update'

可运行如下命令解决:

sudo apt-get install ros-kinetic-cv-bridge

(2)然后继续运行./build_ros.sh出现如下报错:

`/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’
/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/RGBD.dir/build.make:218: recipe for target ‘…/RGBD’ failed
make[2]: *** [/RGBD] Error 1
CMakeFiles/Makefile2:67: recipe for target ‘CMakeFiles/RGBD.dir/all’ failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
make[1]: *** 正在等待未完成的任务…
/usr/bin/ld: CMakeFiles/Stereo.dir/src/ros_stereo.cc.o: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’
/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/Stereo.dir/build.make:218: recipe for target ‘…/Stereo’ failed
make[2]: *** [/Stereo] Error 1
CMakeFiles/Makefile2:104: recipe for target ‘CMakeFiles/Stereo.dir/all’ failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2
Makefile:127: recipe for target ‘all’ failed
make: *** [all] Error 2

出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录,此时需要把/usr/lib/x86_64-linux-gnu下的libboost_system.so与libboost_filesystem.so复制到ORB_SLAM2/lib下,并且将ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中加入库目录

${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so 
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so

具体为:

set(LIBS ${OpenCV_LIBS} 
	${EIGEN3_LIBS} 
	${Pangolin_LIBRARIES} 
	${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so 			  ${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so 
	${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
	${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so 
	${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so

然后继续运行./build_ros.sh,会发现依旧报错,此时还要把libboost_system.so.1.58.0和libboost_filesystem.so.1.58.0复制到ORB_SLAM2/lib下,并继续在ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中添加一行,-lboost_system ,即:

set(LIBS ${OpenCV_LIBS} 
    ${EIGEN3_LIBS} 
    ${Pangolin_LIBRARIES} 
    ${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so 
    ${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so 
    ${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so 
    ${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so 
	${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so
    -lboost_system 
    )

最后运行./build_ros.sh,查看编译结果,成功!
在这里插入图片描述


参考资料

ORBSLAM2_with_pointcloud_map 编译ros包
ubuntu16.04编译ORBSLAM2问题解决

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐