在仿真環境下基於數據包和RGB-D相機運行ORB_SLAM2功能包

ORB_SLAM是基於特徵點的實時單目slam功能包,發佈於2015年。翌年,作者又發佈了支持Monocular(單目)、RGB-D(深度)、Stereo(雙目)攝像頭的ORB_SLAM2功能包。接下來演示功能包中的mono和rgbd兩個算法的運行過程和效果,其中mono算法採用基於官方數據包的方式來運行,rgbd算法採用基於機器人仿真環境的方式運行。

1、下面先介紹本文使用的仿真環境。筆者是從github下載的由中科院軟件所孵化的北京中科重德智能科技有限公司提供的機器人仿真環境,配置方法如下:

克隆包到工作空間

$ cd ~/catkin_ws/src
$ git clone https://github.com/DroidAITech/ROS-Academy-for-Beginners.git

安裝依賴

$ cd ~/catkin_ws
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y

編譯並刷新環境

$ catkin_make
$ echo "source ~/catkin_ws/devel/setup.bash" >>	~/.bashrc
$ source ~/.bashrc

2、安裝ORB_SLAM2功能包,編譯之前要爲它安裝eigen數學計算庫以及對OpenGL進行封裝的輕量級的OpenGL輸入/輸出和視頻顯示的Pangolin庫。並且功能包需要OpenCV視覺庫處理圖像以及特徵,不過OpenCV並不需要在編譯ORB_SLAM2之前安裝。(這些工具庫沒有必要放到工作空間中)

安裝鏈接庫

 $ sudo apt-get install libboost-all-dev libblas-dev liblapack-dev

下載ORB_SLAM2源碼包

$ cd ~/catkin_ws/src
$ git clone https://github.com/raulmur/ORB_SLAM2.git

eigen官網手動下載並解壓eigen3.2,然後進入目錄編譯安裝

$ mkdir build 
$ cd build
$ cmake .. 
$ make
$ sudo make install

下載並安裝Pangolin(用於可視化和用戶接口,可以用於3D視覺和3D導航的視覺圖)

$ git clone https://github.com/stevenlovegrove/Pangolin.git
$ sudo apt-get install libglew-dev #依賴庫
$ cd Pangolin
$ mkdir build 
$ cd build
$ cmake -DCPP11_NO_BOOST=1 ..
$ make
$ sudo make install

OpenCV官網手動下載並解壓安裝OpenCV3.2(沒有必要在ORB_SLAM2編譯之前安裝,ORB_SLAM2功能包的編譯過程中並不依賴OpenCV)

更新系統(在安裝前最好先更新一下系統,不然可能會安裝失敗。)

$ sudo apt-get update

安裝依賴

$ sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip 

創建編譯文件(cmake下載過程中可能會出現 ICV:DOWNLONDING ippicv_linux_20151201.tgz 一直下載不下來的情況,可以先自己下載ippicv_linux_20151201.tgz,然後把壓縮包放到opencv-3.2.0/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e下,再cmake)

$ cd opencv-3.2.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

編譯和安裝(make時間比較長)

$ make 
$ sudo make install

配置鏈接庫路徑及環境變量

$ sudo gedit /etc/ld.so.conf #末尾加一句/usr/local/lib
$ sudo ldconfig #使配置生效
$ sudo gedit /etc/bash.bashrc #修改環境變量,末尾添加以下兩行(PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
                                                          #export PKG_CONFIG_PATH)

測試OpenCV是否安裝成功

$ pkg-config --modversion opencv #如果顯示3.2.0表示安裝成功

編譯ORB_SLAM2功能包

#修改環境變量,在本窗口臨時生效
$ export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS
$ cd ORB_SLAM2
$ chmod +x build.sh
$ ./build.sh
$ chmod +x build_ros.sh
$ ./build_ros.sh

$ cd 
$ gedit .bashrc
#在末尾加上:(始終生效)
$ export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS

./build.sh編譯過程中,可能會出現以下報錯信息

這是因爲源文件中缺少庫函數usleep()頭文件的聲明,解決方法是在下列源文件中添加頭文件#include<unistd.h>

./build_ros.sh編譯過程中,會出現以下報錯

意思是“包含未定義的引用”,原因是系統編譯的時候找不到boost的鏈接庫,解決方法是修改/ORB_SLAM2/Examples/ROS/ORB_SLAM2/CmakeLists.txt,添加一句-lboost_system,如下圖

接下來再重新編譯即可編譯成功

3、功能演示

(1) 基於數據包回放的單目slam

首先下載數據包rgbd_dataset_freiburg1_desk.bag ,然後啓動rosmaster,打開新的終端進入ORB_SLAM2目錄下啓動Mono算法

$ rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Asus.yaml

我們可以看到開啓的等待數據的可視化建圖界面,然後打開新的終端進入數據包所在目錄下播放數據

$ rosbag play rgbd_dataset_freiburg1_desk.bag /camera/rgb/image_color:=/camera/image_raw

其中的/camera/image_raw表示播放的數據要發佈的話題名稱,此時可以在界面中看到建圖的效果

(2) 仿真環境下的RGB-D slam

同樣先啓動rosmaster,啓動ORB_SLAM2功能之前要修改一下ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc源文件,因爲我們仿真環境中的機器人發佈的話題名稱和算法訂閱的話題名稱是不相同的,我們要將ros_rgbd.cc源文件當中訂閱的話題名稱修改爲機器人發佈的名稱(注意RGB-D攝像頭會同時發佈彩色圖像和深度圖像兩個話題),然後重新編譯ORB_SLAM2功能包。

接下來打開新的終端,啓動ORB_SLAM功能節點

$ roslaunch orbslam2_demo ros_orbslam2.launch

之後再打開新的終端啓動gazebo仿真環境

$ roslaunch robot_sim_demo robot_spawn.launch

最後打開鍵盤控制節點,通過按鍵控制機器人四處移動,完成建圖

$ rosrun robot_sim_demo robot_keyboard_teleop.py

最終構建的是一個三維點雲形態的地圖,效果如下

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