SLAM学习系列——ORB-SLAM3安装(Ubuntu20-ROS/Noetic)

ORB-SLAM3学习(Ubuntu20-ROS)

  • [0 主要参考文献](#0 主要参考文献)
  • [1 ORB-SLAM3安装环境配置](#1 ORB-SLAM3安装环境配置)
    • [1.0 前言](#1.0 前言)
      • [1.0.0 关于ORB-SLAM3安装版本选择](#1.0.0 关于ORB-SLAM3安装版本选择)
      • [1.0.1 本文配置操作汇总(快速配置)](#1.0.1 本文配置操作汇总(快速配置))
        • [1.0.1.1 ORB_SLAM3环境配置:](#1.0.1.1 ORB_SLAM3环境配置:)
        • [1.0.1.2 ORB_SLAM3安装](#1.0.1.2 ORB_SLAM3安装)
        • [1.0.1.3 ORB_SLAM的ROS接口](#1.0.1.3 ORB_SLAM的ROS接口)
    • [1.1 C++(11)编译器配置](#1.1 C++(11)编译器配置)
    • [1.2 Pangolin安装](#1.2 Pangolin安装)
    • [1.3 OpenCV安装](#1.3 OpenCV安装)
    • [1.4 Eigen3安装](#1.4 Eigen3安装)
    • [1.5 DBoW2 and g2o (Included in Thirdparty folder)](#1.5 DBoW2 and g2o (Included in Thirdparty folder))
    • [1.6 python要求](#1.6 python要求)
    • [1.7 ROS (optional)](#1.7 ROS (optional))
    • [1.8 realsense2(选装 )](#1.8 realsense2(选装 ))
  • [2 ORB-SLAM3安装与测试(Building ORB-SLAM3 library and examples)](#2 ORB-SLAM3安装与测试(Building ORB-SLAM3 library and examples))
    • [2.1 下载ORB-SLAM3源文件](#2.1 下载ORB-SLAM3源文件)
    • [2.2 修改CMakeLists文件](#2.2 修改CMakeLists文件)
    • [2.3 编译安装](#2.3 编译安装)
    • [2.4 测试(EuRoC Examples)](#2.4 测试(EuRoC Examples))
  • [3 ORB-SLAM3的ROS接口](#3 ORB-SLAM3的ROS接口)
    • [3.0 各种问题参考](#3.0 各种问题参考)
    • [3.1 设置ORB-SLAM3的ROS接口路径](#3.1 设置ORB-SLAM3的ROS接口路径)
    • [3.2 修改ORB-SLAM3的ROS接口CMakeLists文件](#3.2 修改ORB-SLAM3的ROS接口CMakeLists文件)
    • [3.3 修改build_ros.sh脚本文件](#3.3 修改build_ros.sh脚本文件)
    • [3.4 安装ROS接口](#3.4 安装ROS接口)
    • [3.5 ORB-SLAM之ROS测试](#3.5 ORB-SLAM之ROS测试)
      • [3.5.1 查看数据集topic信息](#3.5.1 查看数据集topic信息)
      • [3.5.2 运行](#3.5.2 运行)

0 主要参考文献

安装及问题解决主要参考以下文献:
ubuntu 20.04+ORB_SLAM3 安装并行全记录(无坑版)(一)
ubuntu 20.04+ORB_SLAM3 安装并行全记录(无坑版)(二)
Ubuntu20.04安装orb-slam3
Ubuntu20.04 ------ 新系统从头安装ORB-SLAM3过程(2022年)
Ubuntu18.04 ------ 新系统从头安装ORB-SLAM3过程(2022年)
Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM+Gazebo仿真运行ORB-SLAM2+各种相关库的安装
Ubuntu 20.04 安装 ORB_SLAM3(包含ROS版)
ORB_SLAM3 v1.0 ROS接口编译问题汇总

1 ORB-SLAM3安装环境配置

1.0 前言

1.0.0 关于ORB-SLAM3安装版本选择

目前时间:2023年1月24日。 思考了很久安装ORB-SLAM3哪个版本,因为有博客说新版本似乎有些bug。但看了ORB-SLAM3在github上的发布时间,最近的提交时间为2022年2月10日,感觉应该修改完成了。因此,还是直接选择Master版本,(分支4452a3c):
因为感觉v1.0-release的提升还挺大的。

复制代码
-OpenCV静态矩阵更改为特征矩阵。跟踪和映射的平均代码加速分别为16%和19%。ORB-SLAM 3论文中报告的时间。
- 新校准文件格式,参见文件Calibration_Tutorial。增加了立体校正和图像大小调整选项。
- 添加了加载/保存地图功能。
- 添加了使用英特尔实感摄像头的实时SLAM示例。
- 修正了几个错误

下面根据官方文档配置依赖环境及安装。

1.0.1 本文配置操作汇总(快速配置)

PS:准备环境为Ubuntu20.04,已安装ROS-Noetic。

复制代码
# 配置前
ubuntu: 20.04
ROS:Noetic
#配置关键依赖版本:
gcc: 9.4.0
ORB_SLAM3: Master,4452 a3c , Feb 10, 2022
cmake:3.16.3 
opencv: 4.2.0 (与ROS版本中使用的一致)
eigen3: 3.3.7 (该版本高于3.2会有大量警告,但无影响)
Pangolin: v0.6  (注意:高版本的库不能工作)

可直接根据所有安装指令安装(依次执行,已安装过的会自动验证跳过),但建议通读文档获取更深的理解。

1.0.1.1 ORB_SLAM3环境配置:
bash 复制代码
cd ~/ThirdParty
sudo apt install g++
sudo apt install libgl1-mesa-dev  libglew-dev cmake
sudo apt install libpython2.7-dev pkg-config libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
git checkout dd801d2
mkdir build
cd build
cmake ..
cmake --build .
sudo apt install libopencv-dev
sudo apt install libeigen3-dev
sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen
sudo ln -s /usr/include/eigen3/unsupported /usr/include/unsupported
sudo apt install libpython2.7-dev
sudo apt-get install ros-noetic-realsense2-camera
1.0.1.2 ORB_SLAM3安装
bash 复制代码
cd ~/ThirdParty
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
bash 复制代码
cd ORB_SLAM3
git checkout 4452a3c
gedit CMakeLists.txt
bash 复制代码
# find_package(OpenCV 4.4)
find_package(OpenCV 4 REQUIRED)
bash 复制代码
chmod +x build.sh
./build.sh
1.0.1.3 ORB_SLAM的ROS接口
bash 复制代码
gedit ~/.bashrc
bash 复制代码
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/ThirdParty/ORB_SLAM3/Examples_old/ROS
bash 复制代码
cd /Examples_old/ROS/ORB_SLAM3
gedit CMakeLists.txt
bash 复制代码
#find_package(OpenCV 3.0 QUIET)
find_package(OpenCV 4 QUIET)
bash 复制代码
include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/../../../
${PROJECT_SOURCE_DIR}/../../../include
${PROJECT_SOURCE_DIR}/../../../include/CameraModels
${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus
${Pangolin_INCLUDE_DIRS}
)
bash 复制代码
#rosbuild_add_executable(MonoAR
#src/AR/ros_mono_ar.cc
#src/AR/ViewerAR.h
#src/AR/ViewerAR.cc
#)
bash 复制代码
cd ~/ThirdParty/ORB_SLAM3
gedit build_ros.sh
bash 复制代码
#cd Examples/ROS/ORB_SLAM3
cd Examples_old/ROS/ORB_SLAM3
bash 复制代码
chmod +x build_ros.sh
./build_ros.sh

1.1 C++(11)编译器配置

原文:

复制代码
We use the new thread and chrono functionalities of C++11. 
我们使用C++11的新线程和计时功能。

要求:c++11及以上 。保证环境要求:

t 复制代码
sudo apt install g++

1.2 Pangolin安装

根据ORB-SLAM3官方原文:

复制代码
We use Pangolin for visualization and user interface. Dowload and install instructions can be found at: https://github.com/stevenlovegrove/Pangolin.
我们使用Pangolin作为可视化和用户界面。下载和安装说明可在以下网址找到:https://github.com/stevenlovegrove/Pangolin.

因此,Pangolin仅作为一个可视化工具,版本没做要求。

根据参考文献,使用v0.6版本是一个比较好的选择。

但本人在安装v0.6版本必要依赖后编译时警告较多,因此,尝试了安装master版本(分支:fe57db5)后,在ORB-SLAM3编译过程中会出现错误error: 'slots_reference' was not declared in this scope cow_copy_type<list_type, Lockable>,导致编译不通过,原因是Pangolin版本太高...

因此,还是安装了v0.6版本...

安装过程说明见:SLAM学习系列------ORB-SLAM3之Pangolin安装

安装必要及建议依赖:

c 复制代码
//必要依赖
sudo apt install libgl1-mesa-dev  libglew-dev cmake
// 建议依赖
sudo apt install libpython2.7-dev pkg-config libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols

针对v0.6版本:

t 复制代码
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
git checkout dd801d2
mkdir build
cd build
cmake ..
cmake --build .

1.3 OpenCV安装

ORB-SLAM3官方原文:

复制代码
We use OpenCV to manipulate images and features. Dowload and install instructions can be found at:  http://opencv.org. Required at leat 3.0.   Tested with OpenCV 3.2.0 and 4.4.0.

即,Opencv的作用是:操作图像和特征。最低需要3.0版本。官方使用用Opencv 3.2.0和4.4.0进行测试。

opencv的:下载和安装说明见:http://opencv.org. 根据版本需要下载安装。
note :根据参考文献建议,尽量先装ROS,然后使OpenCV与ROS的版本一样,这样后面用ROS时会少走很多坑。装了ROS noetic就可以直接忽略这一步,省了许多麻烦。
安装

  1. ubuntu中提供apt安装版本(默认版本是 4.2.0(2023/1/24),与ROS版本一致)。
t 复制代码
sudo apt install libopencv-dev
  1. 如需安装其他版本,可参考上述(文章开头)参考文献。

1.4 Eigen3安装

ORB-SLAM3官方原文:

复制代码
Required by g2o (see below). Download and install instructions can be found at: http://eigen.tuxfamily.org. Required at least 3.1.0.

安装Eigen3为G2O所需(见下文)。下载安装说明见:http://eigen.tuxfamily.org. 最低需要3.1.0。

ubuntu中同样提供apt安装版本(默认版本是3.3.7),可直接安装即可,但需要注意安装位置位于/usr/include/eigen3,其存在问题

1\]而通常我们如果只使用find_package(Eigen3 REQUIRED)命令的话有可能无法找到。 \[2\]在很多程序中include时经常使用#include \而不是使用#include \。 因此,一般我们还需要设置软链接,全部命令如下: ```t sudo apt install libeigen3-dev sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen sudo ln -s /usr/include/eigen3/unsupported /usr/include/unsupported ``` 参考: [Ubuntu16.04源码安装eigen3并为其设置软链接](https://blog.csdn.net/l1216766050/article/details/82789846) [在Ubuntu中安装Eigen3库](https://blog.csdn.net/qq_57061492/article/details/126163112) ### 1.5 DBoW2 and g2o (Included in Thirdparty folder) ORB-SLAM3官方原文: We use modified versions of the DBoW2 library to perform place recognition and g2o library to perform non-linear optimizations. Both modified libraries (which are BSD) are included in the Thirdparty folder. ORB-SLAM3修改了DobW2和g2o两个依赖库,并将其放在了Thirdparty文件夹中。不需要,单独下载安装。 ### 1.6 python要求 ORB-SLAM3官方原文: Required to calculate the alignment of the trajectory with the ground truth. Required Numpy module. (win) http://www.python.org/downloads/windows (deb) sudo apt install libpython2.7-dev (mac) preinstalled with osx 即:需要计算轨迹与地面真实的对齐度。所需的Numpy模块。且使用依赖于libpython2.7-dev(Pangolin已安装,可再次运行确认)。 ```t sudo apt install libpython2.7-dev ``` ### 1.7 ROS (optional) 截止目前(2023/01/24),官方文仅在18.04(ROS Melodic)中测试过,因此,在Ubuntu20.4中还没有测试过。这部分将在第3节进行配置: We provide some examples to process input of a monocular, monocular-inertial, stereo, stereo-inertial or RGB-D camera using ROS. Building these examples is optional. These have been tested with ROS Melodic under Ubuntu 18.04. 译:我们提供了一些使用ROS处理单目、单目-惯性、立体、立体-惯性或RGB - D相机输入的例子。构建这些例子是可选的。在Ubuntu 18.04下使用ROS Melodic的进行测试。 ### 1.8 realsense2(选装 ) [官方文档](https://github.com/UZ-SLAMLab/ORB_SLAM3/tree/master)中没有说明,但在源码文件的CMakeLists文件中有: ```c find_package(realsense2) ``` 若在ROS下安装可参考:[Ubuntu20.04(ROS1 noetic)使用D435深度相机记录](https://blog.csdn.net/qq_43326927/article/details/128603087) 运行ROS下安装命令后会自动安装相关依赖包 ```c sudo apt-get install ros-noetic-realsense2-camera ``` ## 2 ORB-SLAM3安装与测试(Building ORB-SLAM3 library and examples) ### 2.1 下载ORB-SLAM3源文件 从官网下载ORB-SLAM3源文件: ```t git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 ``` ### 2.2 修改CMakeLists文件 根据配置 修改CMakeLists.txt文件。 ```python # find_package(OpenCV 4.4) find_package(OpenCV 4 REQUIRED) ``` ### 2.3 编译安装 **官方** :我们提供了一个脚本`build.sh`来构建第三方库和ORB-SLAM3。请确保您已安装所有必需的依赖项。执行: ```t cd ORB_SLAM3 chmod +x build.sh ./build.sh ``` 这将创建 libORB_SLAM3.so 在 lib 文件夹和可执行文件于Examples文件夹。 ### 2.4 测试(EuRoC Examples) **step1 下载数据集** 从 下载数据集(ASL 格式) 。 这是测试可先下载一个即可(第1个) ![\[\]](https://i-blog.csdnimg.cn/blog_migrate/32ec3d1f4afab6b95ec9b57e5268043d.png) **step2 数据集设置** 在ORB-SLAM3文件夹下新建`dataset`文件夹,并将数据集复制到`dataset`下,解压并将其命名为:MH_01_easy。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/44faed56b1bff859a4daf8540eec011f.png) **step3** :打开可视化界面 默认是没有打开可视化界面的,需要修改。 打开`/ORB_SLAM3/Examples/Monocular/mono_euroc.cc`的第83行,将"false"改为"true"。 终端运行: ```t cd Examples/Monocular/ gedit mono_euroc.cc ``` 修改文件: ```c //ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, false); ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, true); ``` 改完之后保存,重新编译ORB_SLAM3,打开终端输入: ```t cd ORB_SLAM3 chmod +x build.sh ./build.sh ``` **step4 MH_01数据集验证** 在build/Examples文件夹下,打开终端,输入如下命令。 ```c ./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./dataset/MH_01_easy ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt ``` **step5** 测试结果 ORB-SLAM3测试成功 参考文献: [【算法】跑ORB-SLAM3遇到的问题、解决方法、效果展示(环境:Ubuntu18.04+ROS melodic)](https://blog.csdn.net/BigHandsome2020/article/details/123458612) [Ubuntu 20.04 安装 ORB_SLAM3(包含ROS版)](https://blog.csdn.net/zhuxiaoyang2000/article/details/120716609) [ubuntu 20.04+ORB_SLAM3 安装并行全记录(无坑版)(二)](https://blog.csdn.net/kuvinxu/article/details/126233165) ## 3 ORB-SLAM3的ROS接口 ### 3.0 各种问题参考 打到一些值得参考的问题解决方案: [ORB_SLAM3 v1.0 ROS接口编译问题汇总](https://blog.csdn.net/weixin_44911075/article/details/123881212) [v1.0 release ros版本编译,提示找不到sophus库,及 Sophus::SE3f, cv::MAT,Eigen::Vector3f类型转换报错](https://github.com/UZ-SLAMLab/ORB_SLAM3/issues/442) ['build_ros.sh' is waiting for updating #479](https://github.com/UZ-SLAMLab/ORB_SLAM3/issues/479) [NVIDIA Jetson TX2 安装ORB-SLAM3 ROS 错误总结](https://blog.csdn.net/weixin_40378209/article/details/126793843) [**buildros.sh**](https://blog.csdn.net/m0_54539677/article/details/123480828) ### 3.1 设置ORB-SLAM3的ROS接口路径 **note** :以前版本中,ROS文件夹在Examples文件夹下,新版本(本版本中)ROS文件夹在Examples_old文件夹下。 添加路径 `Examples_old/ROS/ORB_SLAM3` 添加到`ROS_PACKAGE_PATH`环境变量。 打开.bashrc文件: ```bash gedit ~/.bashrc ``` 并在`~/.bashrc`文件末尾添加以下行。 ```bash export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples_old/ROS ``` 将PATH替换为克隆ORB_SLAM3的文件夹,如我的为: ```bash export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/ThirdParty/ORB_SLAM3/Examples_old/ROS ``` ### 3.2 修改ORB-SLAM3的ROS接口CMakeLists文件 ```c cd ~/ThirdParty/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3 gedit CMakeLists.txt ``` **step1**:修改OpenCV 版本信息 ```python #find_package(OpenCV 3.0 QUIET) find_package(OpenCV 4 QUIET) ``` **step2**:添加Souphus库(采用其自带的包(修改后的))信息 ```c #include_directories( #${PROJECT_SOURCE_DIR} #${PROJECT_SOURCE_DIR}/../../../ #${PROJECT_SOURCE_DIR}/../../../include ${PROJECT_SOURCE_DIR}/../../../include/CameraModels ${Pangolin_INCLUDE_DIRS} #) include_directories( ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/../../../ ${PROJECT_SOURCE_DIR}/../../../include ${PROJECT_SOURCE_DIR}/../../../include/CameraModels ${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus ${Pangolin_INCLUDE_DIRS} ) ``` **step3**:MonoAR部分 1. 如果不会用到的话:注释与AR相关的编译 ```c rosbuild_add_executable(MonoAR src/AR/ros_mono_ar.cc src/AR/ViewerAR.h src/AR/ViewerAR.cc ) #rosbuild_add_executable(MonoAR #src/AR/ros_mono_ar.cc #src/AR/ViewerAR.h #src/AR/ViewerAR.cc ) ``` 2. 如果会用到的话:修改代码文件,参考 [**buildros.sh**](https://blog.csdn.net/m0_54539677/article/details/123480828) ### 3.3 修改build_ros.sh脚本文件 ```c cd ORB_SLAM3 gedit build_ros.sh ``` 第3行: ```bash #cd Examples/ROS/ORB_SLAM3 cd Examples_old/ROS/ORB_SLAM3 ``` ### 3.4 安装ROS接口 执行 build_ros. sh脚本: ```bash cd ORB_SLAM3 chmod +x build_ros.sh ./build_ros.sh ``` 不出意外的话,可以编译完成了,过程中会有很多关于Eigen3的警告,原因是eigen版本太高,但没有影响(某些变量处于正准备取消阶段)。 ### 3.5 ORB-SLAM之ROS测试 参考: [Ubuntu 20.04 安装 ORB_SLAM3(包含ROS版)](https://blog.csdn.net/zhuxiaoyang2000/article/details/120716609) #### 3.5.1 查看数据集topic信息 在数据集路径下打开终端,输入命令查看数据集信息 ```t rosbag info MH_01_easy.bag ``` 根据topics信息,修改`/Examples_old/ROS/ORB_SLAM3/src/ros_mono_inertial.cc`文件中的相应代码,如下所示: ```c //ros::Subscriber sub_imu = n.subscribe("/imu", 1000, &ImuGrabber::GrabImu, &imugb); //ros::Subscriber sub_img0 = n.subscribe("/cam/image_raw", 100, &ImageGrabber::GrabImage, &igb); ros::Subscriber sub_imu = n.subscribe("/imu0", 1000, &ImuGrabber::GrabImu, &imugb); ros::Subscriber sub_img0 = n.subscribe("/cam0/image_raw", 100, &ImageGrabber::GrabImage, &igb); ``` 之后**再次编译**: ```bash cd ORB_SLAM3 chmod +x build_ros.sh ./build_ros.sh ``` #### 3.5.2 运行 打开一个终端,启动roscore,如下所示 ```bash roscore ``` 打开第二个终端,在**Examples**文件夹下执行 ```bash rosrun ORB_SLAM3 Mono_Inertial ../Vocabulary/ORBvoc.txt ./Monocular-Inertial/EuRoC.yaml ``` 打开第三个终端,在数据集文件夹下执行 ```bash rosbag play MH_01_easy.bag ``` 运行效果 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2c5377ce73019ed58825d3ea5f5c605f.png)

相关推荐
lsnm8 分钟前
【LINUX操作系统】线程操作
linux·jvm·c++·ubuntu·centos·gnu
FREEDOM_X38 分钟前
Ubuntu 20.04 安装 ROS 2 Foxy Fitzroy
linux·ubuntu·机器人
liang89992 小时前
Shiro学习(七):总结Shiro 与Redis 整合过程中的2个问题及解决方案
redis·学习·bootstrap
weixin_486281452 小时前
FFmpeg源码学习---ffmpeg
学习·ffmpeg
CodeCipher3 小时前
Java后端程序员学习前端之html
学习·html5
一眼青苔4 小时前
如何知道Ubuntu的端口是否被占用,被那个进程占用?如何终止进程
linux·运维·ubuntu
枫叶20005 小时前
OceanBase数据库-学习笔记5-用户
数据库·笔记·学习·oceanbase
Nuyoah.6 小时前
《Vue3学习手记7》
javascript·vue.js·学习
冰茶_6 小时前
WPF之Button控件详解
大数据·学习·microsoft·c#·wpf