一 配置ORB_SLAM2过程

先在官网上下载代码:https://github.com/raulmur/ORB_SLAM2
看readme 找個教程:https://blog.csdn.net/learning_tortosie/article/details/79881165

1、前面的依赖我都安装过,从安裝Pangolin开始:
a. 安装依赖项

 sudo apt-get install libglew-dev libpython2.7-dev

b. 从Github将项目下载到本地

 git clone https://github.com/stevenlovegrove/Pangolin.git

c. 编译安装

 cd Pangolinmkdir buildcd buildcmake ..make –jsudo make install

2、opencv
因为之前安裝过ros系統,里面自动安裝了opencv版本是3.3.1-dev的
可以查看:

cd /opt/ros/kinetic/include
ll

可以看到这条记录

drwxr-xr-x 4 root root 4096 3月 9 17:15 opencv-3.3.1-dev/

看到readme中说现在的工程是可以支持opencv 3 的,所以我自始至终都沒有动过opencv

3、安装Eigen3,它是一个开源线性库,可进行矩阵运算

sudo apt-get install libeigen3-dev

4、安装DBoW2和g2o

DBoW2是DBow库的改进版本,DBow库是一个开源的C++库,用于索引图像并将其转换为单词表示形式。

g2o是一个开源的C ++框架,用于优化基于图的非线性误差函数。

这两个库在ORB-SLAM2项目的第三方文件夹中,在此不单独编译,后续统一编译

5、编译ORB-SLAM2,第三方库中的DBoW2和g2o

cd ORB_SLAM2
chmod +x build.sh
./build.sh

二、运行单目的例子

有TUM、KITTI、EuRoC三种数据集,本实验使用TUM数据集,从http://vision.in.tum.de/data/datasets/rgbd-dataset/download下载序列并解压缩

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml rgbd_dataset_freiburg1_xyz

其中PATH_TO_SEQUENCE_FOLDER为数据集的存储路径,并将tumx.yaml与下载的数据集对应,比如TUM1.yaml,TUM2.yaml 和TUM3.yaml 分别对应 freiburg1, freiburg2 和 freiburg3。

运行結果:

三、运行RGB-D例子

下载associate.py放到ORB_SLAM2/Examples/RGB-D文件夹下
运行命令:

python2 associate.py /home/yuxin/ORB_SLAM2/rgbd_dataset_freiburg1_xyz/rgb.txt /home/yuxin/ORB_SLAM2/rgbd_dataset_freiburg1_xyz/depth.txt > associations.txt

这里要注意用python2,我之前安裝的anaconda环境默认用的python 是python3,用错会报错,下载和生成的文件如下图:

之后运行RGB-D的例子:

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml rgbd_dataset_freiburg1_xyz Examples/RGB-D/associations.txt

四、摄像头信息的读取和显示

1、之前已经创建了工作空间catkin_ws
具体见上篇博客

 mkdir -p ~/catkin_ws/srccd ~/catkin_ws/src

2、下载usb_cam包

git clone https://github.com/bosch-ros-pkg/usb_cam.git usb_cam

3、编译工作空间

 cd ..catkin_make

4、将摄像头的连接线插入电脑的USB接口

5、启动usb_cam节点

roslaunch usb_cam usb_cam-test.launch

参考这里

五、Ros上运行ORB_SLAM2

已经创建了工作空间catkin_ws,将ORB-SLAM2项目移动到其子文件夹src下。
(1)将包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量中。打开.bashrc文件并在最后添加以下行。

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS

其中PATH为ORB-SLAM2项目所在路径,我的路径为/home/yuxin/catkin_ws/src。此外,还要在./bashrc文件写入

source /home/yuxin/catkin_ws/devel/setup.sh

最后在终端执行命令

source ./bashrc

2、编译ROS下的ORB-SLAM2

ORB-SLAM默认订阅的话题为/camera/image_raw,而usb_cam节点发布的话题为/usb_cam/image_raw,因此需要在catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc中修改订阅的话题,这点要特别注意。因为源文件的更改必须要重新编译。
重新运行:

 chmod +x build.sh./build.sh

报错:

解決方法:安裝rospkg
参考这里,直接采用方式一解決了

pip install rospkg

再编译ros

chmod +x build_ros.sh
./build_ros.sh

报错:

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: 无法添加符号: DSO missing from
command line collect2: error: ld returned 1 exit status
CMakeFiles/Stereo.dir/build.make:182: 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

解決方法:
1、参考这里
打开Examples/ROS/ORB_SLAM2/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
-lboost_system
)

2、出错原因是libboost_system.so 与libboost_filesystem.so找不到链接目录
查找boost_system和boost_filesystem的目录,参考这里

locate boost_system
......
locate boost_filesystem
......

运行以下命令:

sudo cp -r /usr/lib/x86_64-linux-gnu/libboost_system.so /home/yuxin/catkin_ws/src/ORB_SLAM2/lib
sudo cp -r /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 /home/yuxin/catkin_ws/src/ORB_SLAM2/lib
sudo cp -r /usr/lib/x86_64-linux-gnu/libboost_filesystem.so /home/yuxin/catkin_ws/src/ORB_SLAM2/lib
sudo cp -r /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0 /home/yuxin/catkin_ws/src/ORB_SLAM2/lib

编译通过

3、运行单目节点

运行单目节点前要先将摄像头接入电脑,然后启动usb_cam节点。

roslaunch usb_cam usb_cam-test.launch

可以打开摄像头窗口

另外开个终端运行命令:

rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

这个命令我是输入的绝对路径,结果报错了。
重新编译了几遍都是报:段错误核心转移这个错误

这里一定要注意输入的绝对路径是否正确,否则就像我一样绕很多的弯路了。
当时也怀疑是路径错了,没检查仔细,就换成了相对路径

rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml

还是报错:

Input sensor was set to: Monocular Failed to open settings file at: Examples/Monocular/TUM1.yaml

当时我就迷了,然后就又转回上面核心转移的问题,并且迷之坚信自己的绝对路径是对的,开始展开大搜索
解決办法这里

删除掉ORBSLAM的cmakelists中的 -march=native 以及 g2o 的cmakelists中的-march=native
重新执行ORBSLAM目录下的./build.sh等,还是不行,继续

按照官方error修正:
换成3.2的Eigen,下载了3.2.10,然后源码编译安裝,包括Pangolin刪掉build,重新编译安裝,以及catkin_ws/src/ORB_SLAM2文件夾下的build文件夹删掉,catkin_ws/src/ORB_SLAM2/Thirdparty下DBoW2和g2o中的build删掉,catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2中的build也删掉,重新编译,

./build.sh
./build_ros.sh

重新运行这两句:

roslaunch usb_cam usb_cam-test.launch
rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

好吧,一模一样的错误,Eigen又换成了3.1版本再走重新编译的老路,嘎嘎,还是不行,./build.sh编译的時候遇到了错误:
error: ‘StorageIndex’ is not a member of ‘g2o::LinearSolverEigen…

参考这里
在ORB-SLAM2中的include文件夹里面的system.h加入#include<unistd.h>
打开Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h
将以下代码:

template <typename MatrixType>
class LinearSolverEigen: public LinearSolver<MatrixType>
{ public: typedef Eigen::SparseMatrix<double, Eigen::ColMajor> SparseMatrix;
typedef Eigen::Triplet<double> Triplet;
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, SparseMatrix::Index> PermutationMatrix;

修改为:

template <typename MatrixType>
class LinearSolverEigen: public LinearSolver<MatrixType>
{ public:
typedef Eigen::SparseMatrix<double, Eigen::ColMajor> SparseMatrix;
typedef Eigen::Triplet<double> Triplet;
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic, int> PermutationMatrix;

然后再重新./build.sh编译,继续报错:
catkin_ws/src/ORB_SLAM2/src/System.cc:134:28: error: ‘usleep’ was not declared in this scope usleep(1000);

参考这里
在报错的这些文件中添加头文件:
#include <unistd.h>
终于编译通过了,然后./build_ros.sh,报错:

还是老样子在这个报错文件中加入#include<unistd.h>编译通过,最后还是核心转移这个错,就很抓狂。

又把第三方库中的DBoW2和g2o的源码下下来便已安装,DBoW2过程很顺利,g2o编译的时候报错,明确要求Eigen的版本要是3,于是我又下了Eigen 3.3.9,源码编译安装,顺带着Pangolin,又走了一遍便以流程,还是一模一样的错误,段错误核心转移,感觉像个魔咒。也想起来readme中说了本来就支持Eigen 3,真是着魔了,不知道自己在这折腾个啥。
不得不放弃这个核心转移错误了,想起之前运行

rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml

时的报错是Input sensor was set to: Monocular Failed to open settings file at: Examples/Monocular/TUM1.yaml

换这个方向入手

觉得不对了,改了下,在catkin_ws/src/ORB_SLAM2下运行rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml,成了,高兴啊~
没过几秒钟,又是段错误核心转移:

Framebuffer with requested attributes not available. Using available
framebuffer. You may see visual artifacts.init done opengl support
available New Map created with 118 points

真是崩溃啊,找了很久,解決办法这里
Pangolin/src/display/device/display_x11.cpp中修改

我的Pangolin版本比较新,就沒有上图注释掉的那两句話,然后参考这里

把GLX_DOUBLEBUFFER , glx_doublebuffer ? True : False,
改成:
GLX_DOUBLEBUFFER , glx_doublebuffer ? False : False,
重新编译安裝Pangolin,再重新编译./build.sh,/build_ros.sh

roslaunch usb_cam usb_cam-test.launch
rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml

这回大功告成了:

真的是太曲折了,这时候我又返回试试绝对路径的核心转移报错,好嘛,还是一模一样的报错,仔细检查一看路径给错了,改了重新运行,也OK,都怪自己不细心。这其中应该还有我忘记的魔改,记不清楚了,这块磨了我好几天。不同环境可能遇到的问题不同,还有就是我这个就比较迂回,瞎倒持半天,其他人可能要容易的多。

Ubuntu16.04运行ORB_SLAM2流程及出现问题总结相关推荐

  1. Ubuntu16.04配置orb_slam2环境,orb_slam的单目数据集,单目实时运行,RGB-D数据集的运行

    Ubuntu16.04配置orb_slam2环境,orb_slam的单目数据集,单目实时运行,RGB-D数据集的运行 1.运行配置过程中参考链接如下: 1.配置orb_slam2环境 参考链接http ...

  2. Ubuntu18.04运行ORB_SLAM2

    运行环境:Ubuntu18.04 预先安装的库 需要预先安装一些库,如Eign,Sophus,OpenCV等.笔者在阅读<SLAM十四讲>的时候已经安装,在此不再赘述. ORB_SLAM2 ...

  3. Ubuntu16.04运行VoxelNetRos

    link 系统环境 Ubuntu16.04 ROS-Kinetic Python 3.5 安装 2.1 安装rviz插件 因为程序中使用了(BoundingBox, BoundingBoxArray) ...

  4. ubuntu16.04 运行SVO

    ####仅作为笔记 环境: ubuntu16.04 ROS 创建svo的工作空间 mkdir -p ~/svo_ws/src cd ~/svo_ws/src catkin_init_workspace ...

  5. ubuntu16.04 运行hdl_graph_slam

    ####仅作为笔记 环境: ubuntu16.04 OpenMP PCL 1.7 g2o suitesparse ##底下的是ros依赖 geodesy nmea_msgs pcl_ros ndt_o ...

  6. ubuntu16.04运行nite2的userviewer出错

    环境:ubuntu16.04+ros kinetic+kinect2.0 运行UserViewer出错: Failed to open device DeviceOpen using default: ...

  7. ubuntu16.04下ORB_SLAM2的配置

    配置流程 1 依赖安装 1.1 Pangolin 1.2 OpenCV 1.3 Eigen3 2 ORB_SLAM2安装 3 运行效果 4 问题 5 编译build_ros 5-1 编译问题 5-2 ...

  8. ubuntu16.04 运行dso问题梳理

    这个博客是唯一一个能够让我编译成功的博客,其他的博客,相同的问题,解决方案各不相同,非常繁杂: 前面的操作过程: cd ~/ros_ws/src/ git clone https://github.c ...

  9. Ubuntu16.04运行.run文件

    QT配置ROS环境,运行.run文件-参考链接: https://blog.csdn.net/have_fun_/article/details/88242536

最新文章

  1. foreach遍历----for(object o: list)
  2. 很蛋疼的ORA-00911:无效的字符错误
  3. 苹果手机怎么清理听筒灰尘_安卓 | 让手机自动清理听筒扬声器灰尘,你试过了吗?...
  4. SAP 电商云 Spartacus UI 产品搜索结果的设计明细
  5. Autodesk Revit DB Link 中文理解
  6. 2018湖北技能高考计算机类学校,武汉船舶职业技术学院举行2018年湖北省技能高考...
  7. Linux C基础笔记(3)
  8. exchange边缘服务器的安装条件和介绍
  9. python基础学习
  10. 做自媒体必备的神器:文章相似度检测工具
  11. 在MFC中的socket编程
  12. 五星大饭店剧情,五星大饭店在线观看
  13. Cipher的初应用
  14. u)dym)l$_@3*0y3u_pvy@34ky1co1j$lfd1wp-w*8x%30@f7t$
  15. Wireshark-----抓包分析
  16. 完美解决443端口被vmware占用的问题
  17. 清末民初张家口地区服饰习俗变迁探研
  18. mysql基本数据类型、笔试题(2018-9-10)
  19. Photosop的基础知识
  20. Office for Mac版本 提示更新已在进行中,请稍后再试,更新异常的解决方法

热门文章

  1. 【大学生期末大作业】HTML+CSS — 诗词网页
  2. 2021考研英语二学习建议
  3. Go之interface
  4. 演讲技巧_学习如何进行技术演讲的7个技巧
  5. 谷歌云mysql_面向开发者 谷歌云发布新数据库工具
  6. java基于jxl获取excel合并单元格
  7. Win7 扩容磁盘分区
  8. itoa函数 atoi函数
  9. 龙芯3A4000处理器实测:28nm工艺不变,性能可提升100%以上
  10. TemporalAdjusters.previous