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)

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
欧云服务器5 天前
怎么让脚本命令可以同时在centos、debian、ubuntu执行?
ubuntu·centos·debian
智渊AI5 天前
Ubuntu 20.04/22.04 下通过 NVM 安装 Node.js 22(LTS 稳定版)
ubuntu·node.js·vim
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习