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
運行效果