说明:本文将自己编译、运行ORB_SLAM3的经过记录如下,以及一些注意事项,默认大家的电脑已经配置好ROS 环境,本人的电脑系统为Ubuntu18.04。
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
更改后如下图所示:
3、修改OpenCV的版本
首先查看自己电脑安装的OpenCV版本,使用如下命令查看:
pkg-config --modversion opencv
然后根据自己查到的版本进行修改,修改方式为打开ORB_SLAM3_Master文件夹下面的CMakeLists.txt文件,将里面的OpenCV版本版本号改为自己的:
4、编译运行
chmod +x build.sh
./build.sh
1、下载测试数据集,本文采用Euroc数据集,地址为:kmavvisualinertialdatasets – ASL Datasetshttps://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets点击Downloads,跳转到数据集的位置:
我们发现数据集有两种格式,第一种为ROS bag,第二种为ASL Dataset Format,由于后面我们还要测试ROS环境的效果,因此我们下载两种格式的数据集,这里选择的是Machine Hall 02,新建Datasets文件夹。将两个数据集放入其中,解压后改名为MH02
2、修改/home/zhupengfei/catkin_ws/src/ORB_SLAM3_Master/euroc_examples.sh文件
将文件内容第二行的 pathDatasetEuroc路径改称自己的数据集路径,我这里修改的结果如上图所示,想要运行数据集时,按照下方的案例修改路径即可
3、运行数据集
在/home/zhupengfei/catkin_ws/src/ORB_SLAM3_Master下启动终端,复制euroc_examples.sh的第二个案例,将“pathDatasetEuroc”替换为数据集的位置
运行结果如下:
运行不同数据集,单双目时只需要按照 euroc_examples.sh中的案例进行路径更改即可。
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数据包。
rosbag数据包的作用:在 ROS 模式下,需要从 rosbag 里面发布数据;
2、ros topic的匹配
在运行时,一个关键的设置是将 slam node 接收的 ros topic 和 rosbag 发布的 ros topic 匹配起来,也就是收、发双方的 ros topic 名字必须相同。
首先查看rosbag包里包含的topic:(注意用自己的数据包的名字)
rosbag info XXX.bag
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文件
例如,我运行的单目测试,则打开ros_mono.cc文件 ,根据rosbag里面的话题进行修改,这里修改为“/cam0/image_raw”,修改为“/cam1/image_raw”也行,这里cam0代表左目,cam1代表右目
4、重新编译
chmod +x build_ros.sh
./build_ros.sh
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后面的参数为
结果如下: