Ubuntu18.04编译、运行ORB_SLAM3

说明:本文将自己编译、运行ORB_SLAM3的经过记录如下,以及一些注意事项,默认大家的电脑已经配置好ROS 环境,本人的电脑系统为Ubuntu18.04。

 一、编译ORB_SLAM3

1、克隆到本地:

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3

并将包放在自己想放的目录下,本人放在ROS工作空间下,具体路径为: 

/home/zhupengfei/catkin_ws/src/ORB_SLAM3_Master

 本人在测试的过程中发现,原作者的程序包里缺少文件,会导致后面编译时找不到euroc_examples.sh这个文件,因此建议大家还源,可以使用下面这一个:

https://github.com/yuantao15/ORB_SLAM3.githttps://github.com/yuantao15/ORB_SLAM3.git2. 修改build.sh文件

将所有的make -j改为make -j4(避免make -j调用所有的核心,导致电脑直接卡死)

~/catkin_ws/src/ORB_SLAM3_Master
gedit build.sh

 更改后如下图所示:

Ubuntu18.04编译、运行ORB_SLAM3_第1张图片

3、修改OpenCV的版本

首先查看自己电脑安装的OpenCV版本,使用如下命令查看:

pkg-config --modversion opencv

 Ubuntu18.04编译、运行ORB_SLAM3_第2张图片

 然后根据自己查到的版本进行修改,修改方式为打开ORB_SLAM3_Master文件夹下面的CMakeLists.txt文件,将里面的OpenCV版本版本号改为自己的:

Ubuntu18.04编译、运行ORB_SLAM3_第3张图片

4、编译运行

chmod +x build.sh
./build.sh

二、非ROS环境下测试ORB_SLAM3

1、下载测试数据集,本文采用Euroc数据集,地址为:kmavvisualinertialdatasets – ASL Datasetshttps://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets点击Downloads,跳转到数据集的位置:

Ubuntu18.04编译、运行ORB_SLAM3_第4张图片

 我们发现数据集有两种格式,第一种为ROS bag,第二种为ASL Dataset Format,由于后面我们还要测试ROS环境的效果,因此我们下载两种格式的数据集,这里选择的是Machine Hall 02,新建Datasets文件夹。将两个数据集放入其中,解压后改名为MH02

Ubuntu18.04编译、运行ORB_SLAM3_第5张图片

 2、修改/home/zhupengfei/catkin_ws/src/ORB_SLAM3_Master/euroc_examples.sh文件 Ubuntu18.04编译、运行ORB_SLAM3_第6张图片

将文件内容第二行的 pathDatasetEuroc路径改称自己的数据集路径,我这里修改的结果如上图所示,想要运行数据集时,按照下方的案例修改路径即可

3、运行数据集

在/home/zhupengfei/catkin_ws/src/ORB_SLAM3_Master下启动终端,复制euroc_examples.sh的第二个案例,将“pathDatasetEuroc”替换为数据集的位置

Ubuntu18.04编译、运行ORB_SLAM3_第7张图片

运行结果如下:

运行不同数据集,单双目时只需要按照 euroc_examples.sh中的案例进行路径更改即可。

三、ROS环境下运行

ROS工作空间的创建和初始化不再介绍,注意一点,为了不用每次启动一个新的终端都更新一下环境变量,可以执行下面的命令

sudo gedit ~/.bashrc

然后将 source ~/catkin_ws/devel/setup.bash这句话添加在最后一行即可。

1、打开终端,使用如下命令打开终端配置文件 .bashrc 。

sudo gedit ~/.bashrc

2、将源码中的 Examples/ROS/ORB_SLAM3 路径添加到ROS_PACKAGE_PATH环境变量中,即在“~/.bashrc”的最后一行加入以下代码(注意修改自己的路径名),注意关闭文件前保存更改。

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/yourname/catkin_ws/src/ORB_SLAM3/Examples/ROS

3、将重新编辑的终端配置文件.bashrc保存一下(更新bashrc)。

source ~/.bashrc

4、查看环境变量是否配置成功:

echo ${ROS_PACKAGE_PATH}

输出结果应该为:

/opt/ros/melodic/share:/home/yourname/catkin_ws/src/ORB_SLAM3/Examples/ROS

5、编译运行build_ros.sh

chmod +x build_ros.sh
./build_ros.sh

四、数据集的下载与测试

1、数据集下载

选用Euroc数据集,网址如下:

kmavvisualinertialdatasets – ASL Datasetshttps://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#downloads由于要在ROS环境下运行,选择ROS bag的link链接进行下载,并将.bag文件放到自己的数据集目录下,这里我下载的是Machine Hall 02数据包。

Ubuntu18.04编译、运行ORB_SLAM3_第8张图片

rosbag数据包的作用:在 ROS 模式下,需要从 rosbag 里面发布数据;

2、ros topic的匹配

在运行时,一个关键的设置是将 slam node 接收的 ros topic 和 rosbag 发布的 ros topic 匹配起来,也就是收、发双方的 ros topic 名字必须相同。

首先查看rosbag包里包含的topic:(注意用自己的数据包的名字)

rosbag info XXX.bag

Ubuntu18.04编译、运行ORB_SLAM3_第9张图片

3、设置topic的方法:

(1)在运行 slam node 时设置,格式为:

rosrun      original_topic:=new_topic

(2)在 play rosbag 的时候设置,格式为:

rosbag play  original_topic:=new_topic

(3)我采用的是直接更改源文件的方式(推荐),以下步骤也是基于本步骤进行的 ,首先根据运行单双目数据集,到/home/zhupengfei/catkin_ws/src/ORB_SLAM3_Master/Examples/ROS/ORB_SLAM3/src路径下找到对应的.cc文件

Ubuntu18.04编译、运行ORB_SLAM3_第10张图片

例如,我运行的单目测试,则打开ros_mono.cc文件 ,根据rosbag里面的话题进行修改,这里修改为“/cam0/image_raw”,修改为“/cam1/image_raw”也行,这里cam0代表左目,cam1代表右目

Ubuntu18.04编译、运行ORB_SLAM3_第11张图片

4、重新编译

chmod +x build_ros.sh
./build_ros.sh

Ubuntu18.04编译、运行ORB_SLAM3_第12张图片

5、编译运行

(1)启动一个终端,启动roscore

roscore

(2)新启动一个终端,运行ORB-SLAM3 package中的Mono节点,路径改成自己的:

rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/EuRoC.yaml 

Mono后需要跟两个参数,第一个是ORB vocabulary,第二个xxx.yaml需要填数据集的相机参数文件,下载的源码里Examples/Monocular/路径下有。

建议修改为:(具体到自己的路径)

rosrun ORB_SLAM3 Mono /home/zhupengfei/catkin_ws/src/ORB_SLAM3_Master/Vocabulary/ORBvoc.txt /home/zhupengfei/catkin_ws/src/ORB_SLAM3_Master/Examples/Monocular/EuRoC.yaml 

(3)新启动一个终端,运行bag

rosbag play /home/zhupengfei/catkin_ws/src/Datasets/Euroc/MH02.bag

rosbag play后面的参数为,即下载的数据包的路径,我这里为:/home/zhupengfei/catkin_ws/src/Datasets/Euroc/MH02.bag。

结果如下:

Ubuntu18.04编译、运行ORB_SLAM3_第13张图片

你可能感兴趣的:(视觉SLAM学习,ubuntu,linux,c++)