ORB_SLAM下載編譯(以筆記本攝像頭爲例)

首先克隆並編譯:
參考:https://blog.csdn.net/qq_17232031/article/details/79519695

首先要安裝一些依賴庫,比如eigen opencv DBoW3 Pangolin…等等,在我之前的博客裏面有寫
或者安裝依賴庫這一部分百度其他博客,我就不展示了
當然,如果你是看完一整本slam十四講過來的,那麼沒問題,這些庫你都有

ORB_SLAM下載編譯正文

1.新建workspace

$ mkdir common_space
$ cd ./common_space
$ mkdir src

2.cd到src下,然後

$ catkin_init_workspace

3.cd回到common_space(cd …),然後

catkin_make

4.安裝依賴項

sudo apt install autotools-dev ccache doxygen dh-autoreconf git liblapack-dev libblas-dev libgtest-dev libreadline-dev libssh2-1-dev pylint clang-format-3.8 python-autopep8 python-catkin-tools python-pip python-git python-setuptools python-termcolor python-wstool --yes

5.克隆一下源碼(隨便一個地方)

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

6.將克隆下來的ORB_SLAM2文件移入common_space/src下

7.安裝ORB_SLAM2

cd ORB_SLAM2
chmod +x build.sh
./build.sh

8.編譯ros版本的ORB_SLAM2, 同樣是在ORB_SLAM2下

chmod +x build_ros.sh
./build_ros.sh

補充:chmod +x .sh的作用爲sh文件增加可執行權限

這時候會有一系列錯誤:我遇到的有這麼幾類

在解決問題之前,讓我們先進行:

在/.bashrc中加入:

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/mjy/dev/common_space/src/ORB_SLAM2/Examples/ROS
source /home/mjy/dev/common_space/devel/setup.sh
source /home/mjy/dev/common_space/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/build/devel/setup.bash

路徑更爲自己對應的路徑即可.

然後在終端

$ source ~/.bashrc

下面列一些常見報錯

(1) error: ‘usleep’ was not declared in this scope usleep(3000);

解決辦法: 在報錯的.cc文件中加入頭文件:

#include <unistd.h>

(2)下面一大串…具體錯誤顯示在/stereo_euroc.cc.o’ failed
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
CMakeFiles/stereo_euroc.dir/build.make:62: recipe for target ‘CMakeFiles/stereo_euroc.dir/Examples/Stereo/stereo_euroc.cc.o’ failed
make[2]: *** [CMakeFiles/stereo_euroc.dir/Examples/Stereo/stereo_euroc.cc.o] Error 4
CMakeFiles/Makefile2:289: recipe for target ‘CMakeFiles/stereo_euroc.dir/all’ failed
make[1]: *** [CMakeFiles/stereo_euroc.dir/all] Error 2
make[1]: *** 正在等待未完成的任務…
c++: internal compiler error: 已殺死 (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
CMakeFiles/rgbd_tum.dir/build.make:62: recipe for target ‘CMakeFiles/rgbd_tum.dir/Examples/RGB-D/rgbd_tum.cc.o’ failed
make[2]: *** [CMakeFiles/rgbd_tum.dir/Examples/RGB-D/rgbd_tum.cc.o] Error 4
CMakeFiles/Makefile2:215: recipe for target ‘CMakeFiles/rgbd_tum.dir/all’ failed
make[1]: *** [CMakeFiles/rgbd_tum.dir/all] Error 2

解決辦法: 在ORB_SLAM2文件下的CMakeLists.txt文件中(即:/home/mjy/dev/common_space/src/ORB_SLAM2/CMakeLists.txt)文件中,將eigen和opencv庫的版本號改成自己電腦上的版本號.我的是:

# find_package(OpenCV 3.0 QUIET)  這是原先的
find_package(OpenCV 3.2.0 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
   endif()
endif()

# find_package(Eigen3 3.1.0 REQUIRED)  這是原先的
find_package(Eigen3 3.3.7 REQUIRED)
find_package(Pangolin REQUIRED)

(3) 未定義的標識----一串奇怪的東西
Undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’

解決辦法:
修改ORB_SLAM2/Examples/ROS/ORB_SLAM2中CMakelists.txt,在set那裏添加-lboost_system:即

set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)

(4)雖然之前改變過opencv和eigen的版本,但是example中的版本沒有改變,因此在這裏:
打開/home/mjy/dev/common_space/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/CMakeLists.txt

注意,是兩層ORB_SLAM2的第二層,ROS裏面的.

依然是按照之前的方法,更改版本

ok,大致是這些錯誤.如果沒有包含,一般都百度得到.

然後就安裝好了

接下來安裝usb_cam

git clone https://github.com/bosch-ros-pkg/usb_cam.git
# 然後將clone的文件夾移動到src之下(也不一定非要吧)
cd usb_cam
mkdir build
cd build
cmake ..
make

啓動一下試試

$ roscore
$ roslaunch usb_cam usb_cam-test.launch

測試1:單目案例+電腦自帶攝像頭試一下

參考:https://www.jianshu.com/p/f39bf76cfc61
先編譯一下

cd /home/mjy/dev/common_space/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j4

由於需要訂閱電腦攝像頭usb_cam/image_raw的話題, 所以需要找到文件

/home/mjy/dev/common_space/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_mono.cc

再其64行的樣子改爲:

# 原先爲ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);
# 更改訂閱話題
ros::Subscriber sub = nodeHandler.subscribe("/usb_cam/image_raw", 1, &ImageGrabber::GrabImage,&igb);

由於更改了文件,需要重新編譯,首先回到最大的ORB_SLAM2之下:

cd /home/mjy/dev/common_space/src/ORB_SLAM2
./build.sh
./build_ros.sh

其實只用ros那一個build即可
讓我們看看./build_ros.sh到底是什麼內容:

echo "Building ROS nodes"

cd Examples/ROS/ORB_SLAM2
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j

奧!原來如此,這個.sh文件就是把需要在命令號一句一句編譯的東西寫成文件,然後一句話搞定

ok,這下編譯成功(如果還報錯的話見我上面寫的報錯類型)

接下來啓動roscore和usb_cam:

roscore
roslaunch usb_cam usb_cam-test.launch

然後,由於需要用到字典文件和相機標定文件,因此:ORBvoc.txt 和Asus.yaml 要作爲參數傳入,並啓動orbslam節點

rosrun ORB_SLAM2 Mono /home/mjy/dev/common_space/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/mjy/dev/common_space/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

然後就跑起來了

但是

可能會存在一直初始化的問題:
在這裏插入圖片描述
這是由於標定參數不準導致的. 因爲用的是Asus.yaml, 這是源碼自帶的標定文件,因此需要自己標定一下電腦上的攝像頭

測試2:開源視頻案例跑一下原生算法

參考:https://blog.csdn.net/xyt723916/article/details/89374201

先看這個吧:https://www.jianshu.com/p/ad040b374b2f

在下載TUM數據集:TUM數據集 下載並解壓一個序列,如:rgbd_dataset_freiburg1_desk1.tgz

下載官網鏈接:https://link.jianshu.com/?t=http%3A%2F%2Fvision.in.tum.de%2Fdata%2Fdatasets%2Frgbd-dataset%2Fdownload

找那個f1_desk啥的就可以

然後在ORB-SLAM2目錄下(注意不是Example下的ORB-SLAM2哈)創建一個文件夾 Data 將數據集放置在該文件夾下,並進行解壓。

cd ORB-SLAM2

mkdir  Data

tar  -zxvf   rgbd_dataset_freiburg1_desk.tgz

接下來 在終端輸入

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml Data/rgbd_dataset_freiburg1_desk

測試成功

測試3:開源視頻案例跑一下ROS功能包

TUM官網下載 rgbd_dataset_freiburg1_desk.bag

測試之前記得把usb_cam/image_raw改回camera/image_raw

然後重新回到最大的ORB_SLAM那裏編譯一下:

./build_ros.sh

然後開始測試:

roscore

rosrun ORB_SLAM2 Mono /home/mjy/dev/common_space/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/mjy/dev/common_space/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml

rosbag play /home/mjy/文檔/數據集/TUM/bag/rgbd_dataset_freiburg1_desk.bag /camera/rgb/image_color:=/camera/image_raw

注意有個重映射(remap),需要將bag中的單目圖像image_color話題重映射爲slam代碼中訂閱的/camera/image_raw,也就是讓你改回去的地方

然後就成功了
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章