ORBSLAM2 运行记录

运行记录

参考:ORBSLAM2编译
总的来说就
1、安装依赖,以及一些库。
2、下载ORBSLAM2源码。
3、./build.sh 编译第三方库以及ORBSLAM2。
注意 ,在ORB SLAM2里面并没有加入usleep()函数的头文件,所以,要在include/System.h 中添加
#include <unistd.h>

常见问题:
1、使用ROS: 直接执行 ./build_ros.sh
进行编译 ,但是发现问题-
错误信息
后面查询资料发现,出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录。
解决方案:
参考 解决方案 ,但我按照该方法没有直接成功。。记录如下:
根据该博客的方法:
将libboost_filesystem.so, libboost_system.so 拷贝到ORBSLAM2主目录的lib文件夹中,如下
在这里插入图片描述
接着 进入 Examples/ROS/ORB_SLAM2/CMakeLists.txt:
添加如下:

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却出现新的错误:

make[2]: *** No rule to make target '../../../../lib/libboost_filesystem.so', needed by '../Mono'。 停止。
make[2]: *** No rule to make target '../../../../lib/libboost_filesystem.so', needed by '../RGBD'。 停止。
CMakeFiles/Makefile2:718: recipe for target 'CMakeFiles/Mono.dir/all' failed
make[1]: *** [CMakeFiles/Mono.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
make[2]: *** No rule to make target '../../../../lib/libboost_filesystem.so', needed by '../Stereo'。 停止。
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/Stereo.dir/all' failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2
make[2]: *** No rule to make target '../../../../lib/libboost_filesystem.so', needed by '../MonoAR'。 停止。
CMakeFiles/Makefile2:820: recipe for target 'CMakeFiles/MonoAR.dir/all' failed
make[1]: *** [CMakeFiles/MonoAR.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

接着继续查资料,又找到下面解决方法:
1、将Examples/ROS/ORB_SLAM2/CMakeLists.txt 改为:

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
-lboost_system
)

./bulid_ros.sh 成功
在这里插入图片描述
而且可以将 将libboost_filesystem.so, libboost_system.so 从ORBSLAM2主目录的lib文件夹中去除,如下
在这里插入图片描述

但是,随后正常运行可执行文件的时候却发现下面的错误:
1、在启动程序时,经常找不到参数文件 ,但是地址明明是正确的呀?!
Failed to open settings file at: Examples/ROS/Raw_ORB_SLAM2/Asus.yaml
2、最主要是下面这个问题,程序启动后出现错误-
OpenCV Error: Bad argument (Invalid pointer to file storage) in cvGetFileNodeByName, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/src/persistence.cpp, line 861
terminate called after throwing an instance of ‘cv::Exception’
what(): /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/src/persistence.cpp:861: error: (-5) Invalid pointer to file storage in function cvGetFileNodeByName

然后 检查执行文件的库链接情况发现,执行文件同时连接了opencv2.4 与 opencv3.3
执行命令:ldd Mono | grep opencv
窗口输出:

libopencv_calib3d3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_calib3d3.so.3.3 (0x00007fcd2f961000)
libopencv_highgui3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_highgui3.so.3.3 (0x00007fcd2f720000)
libopencv_objdetect3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_objdetect3.so.3.3 (0x00007fcd2f1ac000)
libopencv_core3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_core3.so.3.3 (0x00007fcd2e272000)
libopencv_imgcodecs3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgcodecs3.so.3.3 (0x00007fcd2bf1d000)
libopencv_imgproc3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_imgproc3.so.3.3 (0x00007fcd2931f000)
libopencv_calib3d.so.2.4 => /usr/local/lib/libopencv_calib3d.so.2.4 (0x00007fcd27bb9000)
libopencv_features2d.so.2.4 => /usr/local/lib/libopencv_features2d.so.2.4 (0x00007fcd27912000)
libopencv_highgui.so.2.4 => /usr/local/lib/libopencv_highgui.so.2.4 (0x00007fcd275c1000)
libopencv_imgproc.so.2.4 => /usr/local/lib/libopencv_imgproc.so.2.4 (0x00007fcd270bc000)
libopencv_core.so.2.4 => /usr/local/lib/libopencv_core.so.2.4 (0x00007fcd26c1e000)
libopencv_features2d3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_features2d3.so.3.3 (0x00007fcd2693c000)
libopencv_flann3.so.3.3 => /opt/ros/kinetic/lib/x86_64-linux-gnu/libopencv_flann3.so.3.3 (0x00007fcd266e2000)
libopencv_flann.so.2.4 => /usr/local/lib/libopencv_flann.so.2.4 (0x00007fcd214c9000)

感觉恍然大悟,这肯定是因为程序同时链接了多个多个版本的OPENCV,然后不兼容导致的。经过网上查找解决方案才知道,这是因为,ROS中是通过的cv_bridge与OPENCV库连接的,而
cv_bridge是与ROS自带的OPENCV3.3连接,而本人电脑中安装的OPENCV版本是2.4的,编译ORBSLAM2生成libORB_SLAM2.so时连接 的是opencv2.4,于是导致了冲突。本人的解决方案是,
在保留之前安装的OPENCV 2.4的情况下在电脑上再安装一个OPENCV 3,然后编译ORBSLAM2的时候使用OPENCV3 ,这样最后在ROS下编译时产生的执行文件连接的就都是OPENCV3了,也就避免了冲突。

修改方案如下:
在安装好OPENCV3后,修改ORB-SLAM2/CMakeLists.txt,将自己安装opencv3库的路径设置到OpenCV_DIR中,我的如下
set(OpenCV_DIR /usr/local/opencv3/share/OpenCV)
在这里插入图片描述
这样后面使用的就是OPENCV 3了。
清理完build文件与删除libORB_SLAM2.so后重新编译,再执行./build_ros.sh,就能顺利运行了。

使用RGBD xtion相机在ROS下运行ORBSLAM2

1、下载驱动
sudo apt-get install ros-kinetic-rgbd-launch ros-kinetic-openni2-camera ros-kinetic-openni2-launch

2、启动相机
roslaunch openni2_launch openni2.launch

3、启动ORBSLAM2
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Asus.yaml

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值