ip做網站域名什么是網絡營銷戰(zhàn)略
提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 前言
- 一、ORB_SLAM3源碼編譯
- 二、ORB_SLAM3實時單目相機測試
- 1. 查看攝像頭的話題
- 2. 運行測試
- 三. 運行測試可能的報錯
- 1. 報錯一
- (1) 問題描述
- (2) 原因分析
- (3) 解決
- 2. 報錯二
- (1) 問題描述
- (2) 解決
前言
本次教程運行ORB_SLAM3,所需的環(huán)境如下:
Ubuntu18.04、ros版本:melodic
Opencv4.5.2、Pangolin0.6、
Boost庫1.77.0版本、Eigen3.3.4
注意:以下的教程和所遇到的問題解決,使用的是v0.4-beta版本的ORB_SLAM源碼,不同的版本遇到的問題和解決的方法不太一樣!!!!!
一、ORB_SLAM3源碼編譯
所有的環(huán)境配置,安裝的具體教程和踩坑記錄,具體可以參考這篇博客:
這里就不贅述了
二、ORB_SLAM3實時單目相機測試
以usb單目攝像頭為例,有安裝過相應的驅動的,可直接進入下一步,若是沒有,具體的驅動的安裝,和相應的配置,具體參考這篇博客:VMware虛擬機中ubuntu使用記錄(5)—— 如何在ubuntu中安裝USB相機ros驅動并獲取usb攝像頭數據
1. 查看攝像頭的話題
打開終端1:
roscore
在相機驅動的工作空間目錄下,打開終端2:
source devel/setup.bash //生效過環(huán)境,可跳過此步roslaunch usb_cam usb_cam-test.launch //usb_cam為自己的驅動文件的名字
運行2終端的同時,Ctrl+Alt+T打開終端3:
rostopic list
列出所有的ROS話題,其中/usb cam/image_raw為我單目攝像頭的話題數據,如下圖所示:
2. 運行測試
(1) 修改ros_mono.cc文件
由于本次測試的時單目,故只需在/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src目錄下找到:ros_mono.cc文件,打開找到并修改成我們自己攝像頭的訂閱話題(usb_cam/imahe_raw),后面的參數“1”不用修改,如下圖所示:
(2) 編譯源碼
回到src/ORB_SLAM3主目錄再次運行:
chmod +x build_ros.sh
./build_ros.sh
(3) ORB_SLAM3運行相機
1)啟動ROS,打開終端1:
roscore
2)開啟相機
在自己創(chuàng)建工作空間(我的是catkin_ws/)目錄下,打開終端2:
source devel/setup.bash //生效過環(huán)境,可跳過此步roslaunch usb_cam usb_cam-test.launch //改成自己的相機啟動文件
3)運行ORB_SLAM3
在src/ORB_SLAM3目錄下的終端輸入:
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/My_camera.yam
指令的參數說明:
rosrun ORB_SLAM3 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
1.Mono
代表的是運行單目的意思,本次測試使用的是單目攝像頭
2. PATH_TO_VOCABULARY
ORBvoc.txt特征詞典文件路徑,我的路徑是:
/home/chen/catkin_ws/src/ORB_SLAM3/Vocabulary/ORBvoc.txt
3. PATH_TO_SETTINGS_FILE
即相機設置文件,官方提供的是Asus.yaml,可以另復制命名一個文件My_camera.yaml,將里面的相機參數修改成自己標定過的參數。
(4)最后運行成功的截圖:
三. 運行測試可能的報錯
1. 報錯一
(1) 問題描述
rosrunORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM3/Asus.yaml
時出現如下:段錯誤(核心已轉儲),報錯的頁面如下圖所示:
(2) 原因分析
在ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt和ORB_SLAM3/CMakeLists.txt中,使用的是opencv4版本,而在ORB_SLAM3/Examples/ROS/ORB_SLAM3/CMakeLists.txt中,要求使用的是OpenCV3的版本,所以最后導致segmentation fault(段錯誤)。
(3) 解決
以下是在v0.4-beta版本的ORB_SLAM源碼上進行的修改解決:修改opencv版本的最低要求,改成統(tǒng)一的opencv3版本
1)修改CMakeLists.txt文件的代碼
在ORB_SLAM3/CMakeLists.txt修改為:
在ORB_SLAM3/Thirdparty/DBoW2/CMakeLists.txt中修改為:
在ROS/ORB_SLAM3/CMakeLists.txt中不變
修改完成后再次編譯源碼:
./build.sh
2. 報錯二
(1) 問題描述
經過上述報錯一中的修改之后,再次運行./build.sh編譯代碼時出現報錯:no match for ‘operator’,具體的報錯的信息如下所示:
(2) 解決
1)修改LocalMapping.cc文件
在src/ORB_SLAM3/src目錄下的LocalMapping.cc文件,大概在628行,修改為:
x3D = cv::Matx31f(x3D_h.get_minor<3,1>(0,0)(0) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(1) / x3D_h(3), x3D_h.get_minor<3,1>(0,0)(2) / x3D_h(3));
修改位置如下圖所示:
2)再次運行./build.sh
報錯頁面信息如下:
解決:
修改src/ORB_SLAM3/src/CameraModels目錄下的KannalaBrandt8.cpp文件,大概在534行,修改為:
namespace cv
{
template<typename _Tp, int m, int n> static inline
Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n> &a, float alpha)
{
return Matx<_Tp, m, n>(a, 1.f / alpha, Matx_ScaleOp());
}
}
修改的位置如下:
再次執(zhí)行./build.sh,./build_ros.sh,不出意外就能編譯成功!!!!!!
編譯成功后,就可以使用自己相機配置文件實時運行ORB_SLAM3