SLAM学习系列——ORB-SLAM3安装(Ubuntu20-ROS/Noetic)
ORB-SLAM3学习(Ubuntu20-ROS)
- 0 主要参考文献
- 1 ORB-SLAM3安装环境配置
- 1.0 前言
- 1.0.0 关于ORB-SLAM3安装版本选择
- 1.0.1 本文配置操作汇总(快速配置)
- 1.0.1.1 ORB_SLAM3环境配置:
- 1.0.1.2 ORB_SLAM3安装
- 1.0.1.3 ORB_SLAM的ROS接口
- 1.1 C++(11)编译器配置
- 1.2 Pangolin安装
- 1.3 OpenCV安装
- 1.4 Eigen3安装
- 1.5 DBoW2 and g2o (Included in Thirdparty folder)
- 1.6 python要求
- 1.7 ROS (optional)
- 1.8 realsense2(选装 )
- 2 ORB-SLAM3安装与测试(Building ORB-SLAM3 library and examples)
- 2.1 下载ORB-SLAM3源文件
- 2.2 修改CMakeLists文件
- 2.3 编译安装
- 2.4 测试(EuRoC Examples)
- 3 ORB-SLAM3的ROS接口
- 3.0 各种问题参考
- 3.1 设置ORB-SLAM3的ROS接口路径
- 3.2 修改ORB-SLAM3的ROS接口CMakeLists文件
- 3.3 修改build_ros.sh脚本文件
- 3.4 安装ROS接口
- 3.5 ORB-SLAM之ROS测试
- 3.5.1 查看数据集topic信息
- 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环境配置:
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安装
cd ~/ThirdParty
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
cd ORB_SLAM3
git checkout 4452a3c
gedit CMakeLists.txt
# find_package(OpenCV 4.4)
find_package(OpenCV 4 REQUIRED)
chmod +x build.sh
./build.sh
1.0.1.3 ORB_SLAM的ROS接口
gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/ThirdParty/ORB_SLAM3/Examples_old/ROS
cd /Examples_old/ROS/ORB_SLAM3
gedit CMakeLists.txt
#find_package(OpenCV 3.0 QUIET)
find_package(OpenCV 4 QUIET)
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}
)
#rosbuild_add_executable(MonoAR
#src/AR/ros_mono_ar.cc
#src/AR/ViewerAR.h
#src/AR/ViewerAR.cc
#)
cd ~/ThirdParty/ORB_SLAM3
gedit build_ros.sh
#cd Examples/ROS/ORB_SLAM3
cd Examples_old/ROS/ORB_SLAM3
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及以上 。保证环境要求:
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安装
安装必要及建议依赖:
//必要依赖
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版本:
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就可以直接忽略这一步,省了许多麻烦。
安装:
- ubuntu中提供apt安装版本(默认版本是 4.2.0(2023/1/24),与ROS版本一致)。
sudo apt install libopencv-dev
- 如需安装其他版本,可参考上述(文章开头)参考文献。
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 <Eigen/Dense>而不是使用#include <eigen3/Eigen/Dense>。
因此,一般我们还需要设置软链接,全部命令如下:
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并为其设置软链接
在Ubuntu中安装Eigen3库
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已安装,可再次运行确认)。
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(选装 )
官方文档中没有说明,但在源码文件的CMakeLists文件中有:
find_package(realsense2)
若在ROS下安装可参考:Ubuntu20.04(ROS1 noetic)使用D435深度相机记录
运行ROS下安装命令后会自动安装相关依赖包
sudo apt-get install ros-noetic-realsense2-camera
2 ORB-SLAM3安装与测试(Building ORB-SLAM3 library and examples)
2.1 下载ORB-SLAM3源文件
从官网下载ORB-SLAM3源文件:
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
2.2 修改CMakeLists文件
根据配置 修改CMakeLists.txt文件。
# find_package(OpenCV 4.4)
find_package(OpenCV 4 REQUIRED)
2.3 编译安装
官方:我们提供了一个脚本build.sh
来构建第三方库和ORB-SLAM3。请确保您已安装所有必需的依赖项。执行:
cd ORB_SLAM3
chmod +x build.sh
./build.sh
这将创建 libORB_SLAM3.so 在 lib 文件夹和可执行文件于Examples文件夹。
2.4 测试(EuRoC Examples)
step1 下载数据集
从 http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets下载数据集(ASL 格式) 。
这是测试可先下载一个即可(第1个)
step2 数据集设置
在ORB-SLAM3文件夹下新建dataset
文件夹,并将数据集复制到dataset
下,解压并将其命名为:MH_01_easy。
step3:打开可视化界面
默认是没有打开可视化界面的,需要修改。
打开/ORB_SLAM3/Examples/Monocular/mono_euroc.cc
的第83行,将“false”改为“true”。
终端运行:
cd Examples/Monocular/
gedit mono_euroc.cc
修改文件:
//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,打开终端输入:
cd ORB_SLAM3
chmod +x build.sh
./build.sh
step4 MH_01数据集验证
在build/Examples文件夹下,打开终端,输入如下命令。
./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)
Ubuntu 20.04 安装 ORB_SLAM3(包含ROS版)
ubuntu 20.04+ORB_SLAM3 安装并行全记录(无坑版)(二)
3 ORB-SLAM3的ROS接口
3.0 各种问题参考
打到一些值得参考的问题解决方案:
ORB_SLAM3 v1.0 ROS接口编译问题汇总
v1.0 release ros版本编译,提示找不到sophus库,及 Sophus::SE3f, cv::MAT,Eigen::Vector3f类型转换报错
‘build_ros.sh’ is waiting for updating #479
NVIDIA Jetson TX2 安装ORB-SLAM3 ROS 错误总结
buildros.sh
3.1 设置ORB-SLAM3的ROS接口路径
note:以前版本中,ROS文件夹在Examples文件夹下,新版本(本版本中)ROS文件夹在Examples_old文件夹下。
添加路径 Examples_old/ROS/ORB_SLAM3
添加到ROS_PACKAGE_PATH
环境变量。
打开.bashrc文件:
gedit ~/.bashrc
并在~/.bashrc
文件末尾添加以下行。
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM3/Examples_old/ROS
将PATH替换为克隆ORB_SLAM3的文件夹,如我的为:
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/ThirdParty/ORB_SLAM3/Examples_old/ROS
3.2 修改ORB-SLAM3的ROS接口CMakeLists文件
cd ~/ThirdParty/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3
gedit CMakeLists.txt
step1:修改OpenCV 版本信息
#find_package(OpenCV 3.0 QUIET)
find_package(OpenCV 4 QUIET)
step2:添加Souphus库(采用其自带的包(修改后的))信息
#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部分
- 如果不会用到的话:注释与AR相关的编译
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
)
- 如果会用到的话:修改代码文件,参考 buildros.sh
3.3 修改build_ros.sh脚本文件
cd ORB_SLAM3
gedit build_ros.sh
第3行:
#cd Examples/ROS/ORB_SLAM3
cd Examples_old/ROS/ORB_SLAM3
3.4 安装ROS接口
执行 build_ros. sh脚本:
cd ORB_SLAM3
chmod +x build_ros.sh
./build_ros.sh
不出意外的话,可以编译完成了,过程中会有很多关于Eigen3的警告,原因是eigen版本太高,但没有影响(某些变量处于正准备取消阶段)。
3.5 ORB-SLAM之ROS测试
参考: Ubuntu 20.04 安装 ORB_SLAM3(包含ROS版)
3.5.1 查看数据集topic信息
在数据集路径下打开终端,输入命令查看数据集信息
rosbag info MH_01_easy.bag
根据topics信息,修改/Examples_old/ROS/ORB_SLAM3/src/ros_mono_inertial.cc
文件中的相应代码,如下所示:
//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);
之后再次编译:
cd ORB_SLAM3
chmod +x build_ros.sh
./build_ros.sh
3.5.2 运行
打开一个终端,启动roscore,如下所示
roscore
打开第二个终端,在Examples文件夹下执行
rosrun ORB_SLAM3 Mono_Inertial ../Vocabulary/ORBvoc.txt ./Monocular-Inertial/EuRoC.yaml
打开第三个终端,在数据集文件夹下执行
rosbag play MH_01_easy.bag
运行效果