ROS学习【17】-----基于ubuntu16.04的ORB_SLAM2包的安装及配置


在进行ROS学习的时候,必不可少的学习阶段就是对于ORB_SLAM2的学习,同时,也是通过自己进行文件的编译而执行的可视化视觉系统,本次博客,林君学长主要带大家了解ORB_SLAM2的安装及配置

  • ubuntu系统:ubuntuKylin-16.04
  • opencv版本:opencv-3.4.1
  • ROS版本:Kinetic

一、了解ORB_SLAM2

1、什么是ORB_SLAM2

  • ORB-SLAM是西班牙Zaragoza大学的Raul Mur-Artal编写的视觉SLAM系统。
  • 他的论文“ORB-SLAM: a versatile andaccurate monocular SLAM
    system"发表在2015年的IEEE Trans. on Robotics上。
  • 开源代码包括前期的ORB-SLAM和后期的ORB-SLAM2。第一个版本主要用于单目SLAM,而第二个版本支持单目、双目和RGBD三种接口。

2、ORB_SLAM2的特点

  • 提取和跟踪的特征点使用ORB。ORB特征的提取过程非常快,适合用于实时性强的系统。
  • 回环检测使用词袋模型,其字典是一个大型的ORB字典。
  • 接口丰富,支持单目、双目、RGBD多种传感器输入,编译时ROS可选,使得其应用十分轻便。代价是为了支持各种接 口,代码逻辑稍为复杂。
  • 在PC机以30ms/帧的速度进行实时计算,但在嵌入式平台上表现不佳。

通过以上的定义和特点,详细大家对ORB_SLAM2有一定的了解啦,现在,就开始ORB_SLAM2的安装吧

二、安装Pangolin

Pangolin是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug

1、安装下载及编译工具

 sudo apt-get install cmake
 sudo apt-get install git
 sudo apt-get install g++  

2、安装依赖

 sudo apt-get install libglew-dev
 sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
 sudo apt-get install libpython2.7-dev

3、安装Pangolin

1)、从gitHub上面下载Pangolin包到本地

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

在这里插入图片描述
2)、进入Pangolin文件夹,创建编译文件夹

cd Pangolin
mkdir build
cd build

3)、配置编译

cmake -DCPP11_NO_BOOSR=1 ..

在这里插入图片描述
4)、编译Pangolin资源文件

sudo make -j8

编译成功如上所示:
在这里插入图片描述

三、安装opencv

1)、opencv的安装,林君学长另外写了一个博客,小伙伴们可以参考opencv的安装博客哦,链接如下:
https://blog.csdn.net/qq_42451251/article/details/105565305

四、安装Eigen库

Eigen的神奇之处在于,它是一个纯用头文件搭起建起来的库。这意味着你只能找到它的头文件,而没有.so或.a那样的二进制文件。在使用时只需引入Eigen的头文件即可,不需要链接库文件!

1)、安装命令如下所示:

sudo apt-get install libeigen3-dev

2)、查看Eigen库的具体位置

sudo updatedb
locate eigen3

在这里插入图片描述
可以看出,eigen3库的位置在usr/include/eigen3这个目录下,记住该目录,后面需要用到!

五、ORB_SLAM2的安装

在进行ORB_SLAM2安装是,我们需要准备一些工具,用于编译或者是下载ORB_SLAM2的源码,具体步骤如下所示:

1、将ORB_SLAM2包克隆到ubuntu本地

1)、下载ORB_SLAM2资源包

cd
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

下载过程较慢,请耐心等待!
在这里插入图片描述
2)、林君学长已经将下载完成后的ORB_SLAM2资源包上传至CSDN的后台我的资源模块,小伙伴可以通过如下链接进行下载,下载链接如下:
https://download.csdn.net/download/qq_42451251/12332604
3)、将ORB_SLAM2源代码资源包剪切到ROS工作空间的src文件夹下面去
在这里插入图片描述

2、ROS空间下的ORB_SLAM2包的编译

1)、进入ORB_SLAM2包

cd ~/lenovo/ros/src/ORB_SLAM2

2)、修改build.sh文件权限

chmod +x build.sh

3)、编译build.sh文件

./build.sh

在这里插入图片描述
该过程,一般来说,会在百分之59处等待许久,但请不要关闭,大约5分钟之后,就会继续编译,因为有些进程需要编译的等待时间
4)、如果想快进程编译,可以修改build.sh文件中的make -j为make -j8,当然,若果自己的电脑配置低,建议修改为make,单线程编译;下面的build_ros.sh文件也可以这样操作哦!
在这里插入图片描述

3、在ROS环境下运行ORB_SLAM的准备

1)、如果需要在ROS环境下运行ORB_SLAM,我们需要通过对build_ros.sh文件进行编译,具体步骤如下所示:
1.继续在当前中终端进行权限修改

chmod +x build_ros.sh

2)、添加环境变量,添加到 .bashrc文件尾部

gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/lenovo/ros/src/ORB_SLAM2/Examples/ROS

其中,~/lenovo/ros/ 对应林君学长自己的ROS工作空间的路径和名称,具体根据自己的ROS工作空间进行修改!
3)、编译 build_ros.sh文件

./build_ros.sh

该编译过程也需等待时间,静静等待着就是了哈,当然,在最后可能会包错,如下所示:
在这里插入图片描述
出错原因为:libboost_system.so 与libboost_filesystem.so找不到链接目录
4)、解决方案
1.查看boost_systemboost_filesystem的具体位置

locate  boost_system
locate boost_filesystem

在这里插入图片描述
2、复制上面的文件名,然后再对应路径 /usr/lib/x86_64-linux-gnu下去寻找对应的上述文件,并将libboost_system.solibboost_system.so.1.58.0libboost_filesystem.solibboost_filesystem.so.1.58.0一起复制到ORB_SLAM2/lib路径下,如下所示:
在这里插入图片描述
在这里插入图片描述3.将上面的四个文件,复制到ORB_SLAM2/lib的路径下面
在这里插入图片描述
4.将ORB_SLAM2/Examples/ROS/ORB_SLAM2下的Cmakelists.txt中加入库目录
在这里插入图片描述
找到set()函数,并在该函数末尾添加如下代码:

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

如下所示:
在这里插入图片描述
保存后关闭
5)、在刚刚的终端再次进行编译,成功如下所示:

./build_ros.sh

在这里插入图片描述
到这里,我们的ORB_SLAM2就基本安装完成,接下来,我们将进行数据集的下载及处理,然后进行运行

六、安装usb_cam

1、下在安装usb_cam

1)、进入ros空间,下载usb_cam

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

在这里插入图片描述
2)、编译ROS工作空间

cd ~/lenovo/ros
catkin_make

在这里插入图片描述
3)、程序注册,使得该功能包生效

source ./devel/setup.bash

4)、创建usb_cam编译文件夹

cd src/usb_cam
mkdir build
cd build

5)、编译

cmake ..
make -j8

在这里插入图片描述
在这里插入图片描述
6)、修改usb_cam launch文件权限
去usb_cam下的launch文件夹中找到该launch文件,配置他的权限,使之成为可执行程序:
在这里插入图片描述
7)、接入笔记本电脑摄像头
在这里插入图片描述
8)、新建终端,运行相机节点:

roslaunch usb_cam usb_cam-test.launch

在这里插入图片描述
至此,我们的usb_cam摄像头就下载测试完成,关闭运行的节点,终端暂时不忙关闭,后面还需要用到此终端!接下来,我们需要将ORB_SLAM2下的c语言文件的相机节点修改为usb_cam/image_raw

2、修改配置文件的相机节点

1)、在路径为:ros/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src下的ros_mono.cc文件,如下所示:
在这里插入图片描述
2)、修改上面三个文件的内容,将相机节点修改为usb_cam/image_raw,当然,后面的实现我们只会用到ros_mono.cc文件,因此,暂时,你可以只修改这个,建议都修改吧:

usb_cam/image_raw

在这里插入图片描述
3)、再次编译ORB_SLAM2下的build_ros.sh文件

chmod +x build_ros.sh
./build_ros.sh

在这里插入图片描述
可以看到,我们修改的文件的节点更新啦!
到这里,我们需要配置就ok啦,接下来开始我们的实验吧!

七、ORB_SLAM2的单目运行

1、TUM数据集下载

1)、通过以下链接,下载TMU数据集,
http://vision.in.tum.de/data/datasets/rgbd-dataset/download
在这里插入图片描述
2)、通过以下链接,下载Kitti数据集,
https://test.functionweb.tk/data/kitti/
在这里插入图片描述

2、在ROS空间下的ORB_SLAM2包中创建Data文件夹,用于存放TMU和KITTI数据集

1)、创建Data文件夹

mkdir Data

2)、将下载好的数据集通过传输软件上传至该文件夹下面并提取文件到此处
在这里插入图片描述
3)、将Kitti数据集中的内容如下:
在这里插入图片描述
注意:一定要将由图片序列的那个文件夹的名字改为image_0,因为在程序中写的是这个文件夹下面的图片哦!另外两个txt文件和image_0文件同级
到这里,我们数据集就已经准备完成,接下来,我们将进行ORB_SLAM2数据集的运行操作啦!

3、基于ORB_SLAM2中TMU数据集和KITTI数据集的单目运行

1)、输入以下命令,进行TMU数据集的单目运行

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml Data/rgbd_dataset_freiburg1_xyz/

其中,Data/rgbd_dataset_freiburg1_xyz/ 就是我们刚刚TMU数据集的路径哦
2)、单目运行结果如下所示:
在这里插入图片描述
图中右侧窗口中的蓝色小方块为提取的图像ORB特征,左侧窗口显示了环境的稀疏地图和相机的运动轨迹。
3)、除此之外,我们的数据集中还有很多组数据,我们也可以通过其他组的数据进行测试,测试代码如下:

 ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM2.yaml Data/rgbd_dataset_freiburg1_xyz/
 ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM3.yaml Data/rgbd_dataset_freiburg1_xyz/

下载的数据集中有很多组数据,都可以进行测试!这里,就给出上面两个测试结果啦!
4)、输入以下命令,进行KITTI数据集的单目运行

./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml ./Data/kitti_Image

其中,Data/kitti_Image 就是我们刚刚kitti数据集的路径哦
5)、单目运行结果如下所示:
在这里插入图片描述
6)、除此之外,我们的数据集中还有很多组数据,我们也可以通过其他组的数据进行测试,测试代码如下:

./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI03.yaml ./Data/kitti_Image
./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI04-12.yaml ./Data/kitti_Image

下载的数据集中有很多组数据,都可以进行测试!这里,就给出上面两个测试结果啦!

4、基于ROS下ORB-SLAM2包中摄像头的单目运行

为了能够在线实时地运行ORB-SLAM2,需要借助ROS和笔记本电脑的摄像头,因此,确保自己笔记本摄像头已经接入电脑哦!
1)、在上面新建的终端中再次运行摄像头节点,

roslaunch usb_cam usb_cam-test.launch

在这里插入图片描述
2)、调用笔记本电脑的摄像头进行实时运行ORB-SLAM2

 rosrun ORB_SLAM2 Mono /home/xxx/lenovo/ros/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/xxx/lenovo/ros/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

以上代码中xxx代表自己ubuntu的用户名、lenovo/ros代表林君学长自己的ROS空间,
在这里插入图片描述
抱着自己的笔记本电脑慢慢的走一圈,我们就可以看到左边窗口在进行路径规划,右边窗口在捕捉RGB!一定要缓慢移动哦!
3)、除了通过Mono ,我们还可以通过其他可执行文件运行,比如以下标记的都可以,林君学长暂时只测试了这两个哦,其他的还没有测试:
在这里插入图片描述

 rosrun ORB_SLAM2 RGBD /home/xxx/lenovo/ros/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/xxx/lenovo/ros/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

以上就是本次博客的全部内容啦,希望小伙伴通过对本次博客的阅读,可以帮助你们了解ORB_SLAM2在ros上的运行哦!
遇到问题的小伙伴评论区留言,林君学长看到会为大家解答的,这个学长不太冷!

陈一月的又一天编程随岁月^ _ ^

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈一月的编程岁月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值