提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本次教程是介绍如何运行ROS版本的ORB_SLAM3,所需的环境如下:
Ubuntu18.04、ros版本:melodic
Opencv4.5.2、Pangolin0.6、
Boost库1.77.0版本、Eigen3.3.4
注意:以下的教程和所遇到的问题解决,都是在v0.4-beta版本的ORB_SLAM源码,不同的版本解决的方法不太一样!!!!!
一、创建ROS工作空间(已创建可忽略)
最好先创建个文件夹,把待会要下载的东西都放到这个文件夹下,
1)创建工作空间,终端输入:
roscore
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
2)编译工作空间
cd ~/catkin_ws/
catkin_make
3)使得工作空间的环境变量生效
source devel/setup.bash
4)使得环境变量在所有的终端中都有效(将路径添加进.bashrc文件中):
按个人的喜好,此步骤不是必选项,执行这段代码之后,意味着电脑开机就自动生效该工作空间的ROS环境
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
5)保存.bashrc文件,查看添加的环境变量是否生效:
source ~/.bashrc
6)查看添加的环境变量是否生效,创建一个新终端,输入:
echo $ROS_PACKAGE_PATH
回车之后会显示如下语句,如果打印的路径中包含当前工作空间的路径,则环境变量设置成功,整个操作页面如下图所示:
二、安装所需的库依赖
若从未安装编译过ORB_SLAM3,且没安装过Pangolin、Opencv、Eengen3等相应的库,参考《在Ubuntu18.04下安装运行非ROS版的ORB_SLAM3》中的库安装过程:
VMware虚拟机中ubuntu使用记录(8)—— 如何在Ubuntu18.04中安装运行非ROS版本的ORB_SLAM3跑官方数据集(全程手把手教学安装)
若有安装过则可跳过相应的步骤即可。
三、ROS版本的ORB_SLAM3的编译和安装
1.下载源码
ORB_SLAM的github下载的源码中,也包含了ros版本的代码,本次使用的时v0.4-beta的版本,
将文件夹重命名为ORB_SLAM3(方便起见)移动到刚创建好的工作空间中,也就是/home/chen/catkin_ws/src目录中(其中chen是我自己Ubuntu的用户名)
2. 编译非ROS版本源码
(1) 使用build.sh进行编译
编译build_ros.sh前要先编译build.sh,确保所需要的环境已经配置好
进入catkin_ws/src/ORB_SLAM3目录下,打开中终端输入:
chmod +x build.sh
./build.sh
注意:若在src/ROB_SLAM3目录外编译过,则需要删除里面的build文件夹再执行上述步骤,出现编译错误则参考《非ROS环境下运行ORB_SLAM3》中的记录过程:
3. 编译ROS版本源码
ros版本的源码存放在Example或Example_old文件夹中
(1) 编译前的准备
1)去掉警告提醒
编译前建议修改build_ros.sh(改成j2)和/Example/ROS/ORB_SLAM3目录下的CMakeList(加上-w)文件
2)对相关路径进行配置
将源码中的 Examples/ROS/ORB_SLAM3 路径添加到ROS_PACKAGE_PATH环境变量中,重新打开一个终端:
sudo gedit ~/.bashrc
在**~/.bashrc的最后一行加入以下代码(chen换成自己的用户名)
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/chen/catkin_ws/src/ORB_SLAM3/Examples/ROS
生效环境,终端输入:
source ~/.bashrc
打印刚刚添加的地址:
echo ${ROS_PACKAGE_PATH}
如果能正确显示刚刚加入的地址则正常。
(2) 使用build_ros.sh进行编译
配置完成后,在catkin_ws/src/ORB_SLAM3目录下打开终端:
chmod +x build_ros.sh
./build_ros.sh
出现如下页面,则编译成功:
四、运行ORB_SLAM3的官方数据集
1.数据集的下载
本次教程使用选用Euroc数据集,网址如下:
https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#downloads
要下载ROS bag中的数据集,也就是.bag文件,如下图所示:
2. 数据集测试运行
编译成功以后会生成一个Stereo的node在ORB_SLAM3的结点里,然后我们把ORB-SLAM3的ros文件夹中的ros_stereo.cc文件里的topic左图右图替换成自己想要运行的数据集的topic(可以是自己录制的bag包或者其他)启动roscore进入ORB-SLAM3中,EuRoc为相机内参,需要时把它替换为自己的相机内参.
(1)查看ROS包的话题
以Machine Hall 01数据集为例,下载页面如下图:
下载完成后,可以得到一个.bag后缀的ROS包MH_01_easy.bag
在存放.bag文件的目录下
打开终端输入:
启动ros:
roscore
播放ros包:
rosbag play MH_01_easy.bag
在运行rosbag的同时,再打开终端输入
rostopic list
查看rosbag话题,如下图所示:
(2) 修改ros_stereo.cc文件
/cam0/image raw和/cam1/image raw为双目相机左右目对应的数据话题,
然后,修改Examples/ROS/ORB_SLAM3/src下的ros_stereo.cc里面的message_filters::Subscriber里的订阅的话题,改成和rosbag的一致,修改的位置如下图所示:
然后重新编译源码:
./build_ros.sh
(3) 播放rosbag测试ORB
启动ros,打开终端1输入:
roscore
在/catkin_ws/src/ORB_SLAM3目录下,打开终端2:
rosrun ORB_SLAM3 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true
上一步调出窗口的同时,在数据集的目录,打开终端3:
rosbag play MH_01_easy.bag
(4) 可能的报错
rosrun运行官方数据时出现报错:段错误(核心已转移),具体的报错信息如下:
解决:
修改ROS/ORB_SLAM3目录下CMakeList.txt文件里的opencv版本,改成和src/ORB_SLAM3目录下CMakeList.txt文件里opencv的版本一致,均为opencv4. 如下图所示:
最后,ORB-SLAM3就运行起来了,运行的界面如下:
总结
以上就是运行ROS版本的ORB_SLAM的全部详细教程,主要是介绍了关于在ubuntu18.04中运行ORB_SLAM3的所有依赖的库的安装过程,和所遇到的一些报错的解决方法,最后也详细介绍如何下载,播放rosbag的形式,运行ORB_SLAM进行建图,下期分享如何在ubuntu18.04系统中使用自己的单目摄像头运行ORB_SLAM3。有什么问题,可以评论区里面交流讨论。