Ubuntu20.04 ORB-SLAM2(含ROS)配置并在Gazebo下测试-Part1

前言

Ubuntu20.04系统安装ROS noetic(含Gazebo11)、安装ORB-SLAM2,并在此基础上实现基于ROS与Gazebo的ORB-SLAM2测试。

Part1:ROS、ORB-SLAM2安装

如果只是使用ORB-SLAM2进行数据集或摄像头实时采集的数据测试,那么安装ORB-SLAM2非常简单,这里重点介绍支持ROS的ORB-SLAM2安装。

1.ROS Noetic安装

ROS集成了很多SLAM所需的库,在Ubuntu20.04系统上,ROS noetic集成了较高版本的库,如OpenCV4.2.0,PCL-1.10.0,以及高版本的Boost、Egien3等,所以只要安装该版本操作系统下的ROS就不需要过于麻烦的安装各种库。下面介绍如何安装ROS:
(1)设置sources.list
设置电脑以安装来自packages.ros.org的软件。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

若下载速度缓慢,推荐就近选择一个镜像源替换上面的命令。例如,Tsinghua University为:

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

(2)设置密钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

若无法连接到密钥服务器,可以尝试替换上面命令中的 hkp://keyserver.ubuntu.com:80hkp://pgp.mit.edu:80
(3)进行安装
首先,确保你的Debian软件包索引是最新的:

sudo apt update

然后选择你想安装的ROS:

完整桌面版安装(Desktop-Full):除了桌面版的全部组件外,还包括2D/3D模拟器(simulator)和2D/3D 感知包(perception package),以及Gazebo11(强力推荐)。

sudo apt install ros-noetic-desktop-full

桌面版(Desktop):包括了ROS-Base的全部组件,还有一些工具,比如rqt和rviz。

sudo apt install ros-noetic-desktop

ROS-Base(仅含骨架):ROS packaging,build,和communication库。没有图形界面(GUI)工具。

sudo apt install ros-noetic-ros-base

在ROS中还有更多可用的软件包。你可以直接安装一个特定的软件包。

sudo apt install ros-noetic-PACKAGE

例如,sudo apt install ros-noetic-slam-gmapping,要查看或搜索所有可用的软件包,请参见ROS Index或使用:

apt search ros-noetic

(4)设置环境
在使用ROS的每个bash终端中source这个脚本。

source /opt/ros/noetic/setup.bash

每次source工作空间比较麻烦,为了每次启动新的终端窗口时自动source工作空间,可以打开终端执行命令:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc

并再次输入命令:

source ~/.bashrc

如果同时安装了好几个ROS发行版,~/.bashrc只会生效你当前使用的这个版本的setup.bash。
(5)构建包的依赖关系
到此已经安装了运行核心ROS包所需的程序。创建和管理ROS工作区,有不同的工具和需求是独立分布的。例如,rosinstall是一个经常使用的命令行工具,能够使用一个命令轻松地下载ROS包的许多源树。
为安装此工具和构建ROS包的其他依赖项,可运行命令:

 sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

在使用许多ROS工具之前,需要初始化rosdep。rosdep能够轻松地安装要编译的源代码的系统依赖项,并且是ROS运行核心组件所必需的。可执行以下步骤安装。

 sudo apt install python3-rosdep

初始化rosdep:

sudo rosdep init
rosdep update

(6)ROS教程
参考:ROS教程

2.安装ORB-SLAM2需要的工具

配置前需要下载cmake、gcc、g++和Git工具。
(1)下载cmake

sudo apt-get install cmake

(2)下载git

sudo apt-get install git

(3)下载gcc和g++

sudo apt-get install gcc g++  

(4)安装Pangolin
推荐Pangolin V0.6版本,参考

(5)安装OpenCV
由于使用Ubuntu20.04,推荐OpenCV 4.2版本(ROS noetic full版本中已安装)

(6)安装Eigen
ROS noetic full版本中已安装

3.安装ORB_SLAM2

由于需要在ROS环境下运行ORB-SLAM2,所以必须将ORB-SLAM2和机器人的pack文件放置在同一个ROS工作区的src目录下,具体步骤为:
(1)在home/cx/cxapp下创建工作区:

mkdir -p ~/cxapp/catkin_ws/src

(2)进入ROS工作区的src文件夹:

cd ./cxapp/catkin_ws/src/

(3)下载安装ORB_SLAM2
将其下载到/cxapp/catkin_ws/src目录下:

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

(友情提示:如果git clone下载不下来,可以考虑首先将git clone的内容转到Gitee,然后再下载,具体方法自行百度)

(4)进入ORB_SLAM2文件夹:

cd ORB_SLAM2

(5)给build.sh文件权限:

chmod +x ./build.sh

(6)编译build.sh文件:

./build.sh

(7)因为需要在ROS环境下运行ORB_SLAM2,所以需要继续执行下面三条命令:
首先在/home/cx/cxapp/catkin_ws/src/ORB_SLAM2目录下打开终端,执行命令:

chmod +x build_ros.sh

然后将包含Examples/ROS/ORB_SLAM2的path添加到ROS_PACKAGE_PATH环境变量。打开第二个终端,执行gedit ~/.bashrc打开.bashrc文件并在底部添加:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/cx/cxapp/catkin_ws/src/ORB_SLAM2/Examples/ROS

最后在/home/cx/cxapp/catkin_ws/src/ORB_SLAM2目录下打开第三个终端,执行命令:

./build_ros.sh

(8)进入cxapp/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2文件目录,执行下列指令:

make

编译过程可能会有点慢,耐心等待哦。这里也可以使用make -j、make -j4、make -j8等命令速度会稍快一些,-j 后的的数字代表线程。但如果电脑性能不佳,可以把build.sh文件和build_ros.sh文件中的最后一句命令make -j 改为make。

4.安装ORB-SLAM2中出现的问题解决方法

1.ORB_SLAM2/src/System.cc: error: ‘usleep’ was not declared in this scope usleep(5000);
解决方案:
找到对应的System.cc文件的首部加入头文件

#include<unistd.h>

需要根据实际情况,提示哪个文件usleep有问题,就去加这个头文件。
需要增加unistd.h的文件还有:
Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc
Examples/Monocular/mono_tum.cc
Examples/RGB-D/rgbd_tum.cc
Examples/Stereo/stereo_euroc.cc
Examples/Stereo/stereo_kitti.cc
src/LocalMapping.cc
src/LoopClosing.cc
src/System.cc
src/Tracking.cc
src/Viewer.cc
参考教程:https://blog.csdn.net/qq_15698613/article/details/98453592

2.CMakeFiles/RGBD.dir/build.make:197: recipe for target ‘…/RGBD’ failed
解决方案:
修改catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/文件夹下的CMakeLists.txt文件,将下面代码:

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
)

修改为:

set(LIBS 
${OpenCV_LIBS} 
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)

仅在后面增加了一句:-lboost_system。再次运行:

chmod +x build_ros.sh
./build_ros.sh

3.ORB-SLAM工程出了很长时间,但一直没有更新,这导致一些代码并不适合一些高版本的依赖比如opencv4.2等。

(1)首先介绍如何将OpenCV的版本替换成4.0以上版本,解决方法为将catkin_ws/src/ORB_SLAM2目录下的CMakeList.txt文件修改为:

 find_package(OpenCV 4.0 QUIET)
 if(NOT OpenCV_FOUND)
    find_package(OpenCV 2.4.3 QUIET)
    if(NOT OpenCV_FOUND)
       message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
    endif()
 endif()

(2)出现error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope报错,这是因为OpenCV高版本弃用了CV_LOAD_IMAGE_UNCHANGED,所以需要将其修改,解决方法为:
首先在报错.cc文件的代码头文件下面添加命名空间:

using namespace cv;

然后,将CV_LOAD_IMAGE_UNCHANGED全部换成IMREAD_UNCHANGED

4.其他报错
参考:
报错参考1
报错参考2
报错参考3

你可能感兴趣的:(SLAM,人工智能,自动驾驶)