通过以上的定义和特点,详细大家对ORB_SLAM2有一定的了解啦,现在,就开始ORB_SLAM2的安装吧
Pangolin是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug
sudo apt-get install cmake
sudo apt-get install git
sudo apt-get install g++
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
1)、从gitHub上面下载Pangolin包到本地
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
3)、配置编译
cmake -DCPP11_NO_BOOSR=1 ..
sudo make -j8
1)、opencv的安装,林君学长另外写了一个博客,小伙伴们可以参考opencv的安装博客哦,链接如下:
https://blog.csdn.net/qq_42451251/article/details/105565305
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的源码,具体步骤如下所示:
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文件夹下面去
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文件也可以这样操作哦!
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_system和boost_filesystem的具体位置
locate boost_system
locate boost_filesystem
2、复制上面的文件名,然后再对应路径 /usr/lib/x86_64-linux-gnu下去寻找对应的上述文件,并将libboost_system.so和libboost_system.so.1.58.0与libboost_filesystem.so和libboost_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就基本安装完成,接下来,我们将进行数据集的下载及处理,然后进行运行
1)、进入ros空间,下载usb_cam
cd lenovo/ros/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ~/lenovo/ros
catkin_make
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
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啦,接下来开始我们的实验吧!
1)、通过以下链接,下载TMU数据集,
http://vision.in.tum.de/data/datasets/rgbd-dataset/download
2)、通过以下链接,下载Kitti数据集,
https://test.functionweb.tk/data/kitti/
1)、创建Data文件夹
mkdir Data
2)、将下载好的数据集通过传输软件上传至该文件夹下面并提取文件到此处
3)、将Kitti数据集中的内容如下:
注意:一定要将由图片序列的那个文件夹的名字改为image_0,因为在程序中写的是这个文件夹下面的图片哦!另外两个txt文件和image_0文件同级
到这里,我们数据集就已经准备完成,接下来,我们将进行ORB_SLAM2数据集的运行操作啦!
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
下载的数据集中有很多组数据,都可以进行测试!这里,就给出上面两个测试结果啦!
为了能够在线实时地运行ORB-SLAM2,需要借助ROS和笔记本电脑的摄像头,因此,确保自己笔记本摄像头已经接入电脑哦!
1)、在上面新建的终端中再次运行摄像头节点,
roslaunch usb_cam usb_cam-test.launch
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上的运行哦!
遇到问题的小伙伴评论区留言,林君学长看到会为大家解答的,这个学长不太冷!
陈一月的又一天编程随岁月^ _ ^