ORB-SLAM2編譯安裝和USB攝像頭例程運行


準備工作及軟件版本說明

注意:如果要使用USB攝像頭運行ORB-SLAM2,不能使用虛擬機,否則會出現攝像頭打開一片綠屏或者黑屏的現象。

  • 操作系統 :Ubuntu 16.04
  • ROS版本 :kinetic
  • eigen庫版本 :3.2.10

注意: eigen庫如果用3.3.4的話 編譯ORB-SLAM2時候會出現錯誤或者警告。

  • OpenCV版本:opencv3.4.1
  • USB攝像頭:640*480,30幀

安裝ROS

  • 打開”Ubuntu Software Center“,把鼠標移到左上角的“Ubuntu Software Center”名字上,點擊出現的“Edit ”,在下拉菜單里點擊”Software Sources“。確保你的”restricted”, “universe,” 和 “multiverse.”前是打上勾的。就像這樣:


  • 設置ROS軟件源

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

  • 設置密鑰

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 0xB01FA116

  • 安裝ROS kinetic

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install ros-kinetic-desktop-full

  • 安裝完成后,可以用下面的命令來查看可使用的包:

apt-cache search ros-kinetic

  • 初始化ROS

sudo rosdep init
rosdep update

  • 然后初始化環境變量(非常重要):

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

  • 安裝ROS Python插件

sudo apt-get install python-rosinstall

  • 測試ROS(如果顯示 started core service [/rosout] 則說明ROS安裝成功)

roscore

安裝ORB-SLAM2

創建ROS工程

  • 使用ROS創建workspace

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
mkdir ORB-SLAM2

  • 添加環境變量

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

安裝必備軟件

  • 安裝git cmake

sudo apt-get install git cmake

  • 安裝一些庫

sudo apt-get install libblas-dev liblapack-dev

  • 安裝Pangolin

sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libpython2.7-dev
sudo apt-get install build-essential
cd ~/catkin_ws/ORB-SLAM2
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin

  • 編譯安裝Pangolin

mkdir build
cd build
cmake -DCPP11_NO_BOOST=1 ..
make

  • 安裝OpenCV依賴

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

  • 下載OpenCV并解壓到Ubuntu,然后進入OpenCV文件夾進行編譯安裝

mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install

  • 安裝eigen庫(注意 請下載3.2.10版本,如果用3.3.x版本可能會造成ORB-SLAM2編譯失敗,因為eigen3.3.4版本修改了文件目錄結構)
  • 下載Eigen,進入到在解壓后的Eigen文件夾(例如eigen-eigen-07105f7124f9)下

mkdir build
cd build
cmake ..
make
sudo make install

  • 下載ORB_SLAM2:

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

  • 編譯安裝

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

把build.sh的make -j改成make(這是為了防止多線程編譯出錯,對于build_ros.sh文件也是同理,下面就不說了)

  • 運行build.sh

./build.sh

  • 注意坑1:如果在編譯構建的過程中出現error:usleep()函數未定義的錯誤,要到報錯誤的代碼文件里面加上(或者在頭文件加也行):
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
  • 修改環境變量(user就是用戶的名字)

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/(user)/catkin_ws/ORB-SLAM2/Examples/ROS

這個時候 打開~/.bashrc文件 最末端的時候應該是這個樣子:


  • 編譯安裝ROS版本的ORB-SLAM2

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

  • 注意坑2:如果在編譯構建的過程中出現關于boost庫的錯誤,要到/Examples/ROS/ORB-SLAM2/CMakeLists.txt文件下修改 加上 -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
)
  • ORB-SLAM2測試數據集
    (1)下載測試數據集
    Download a sequence from http://vision.in.tum.de/data/datasets/rgbd-dataset/download and uncompress it.
    (2)執行命令:
    Execute the following command. Change TUMX.yaml to TUM1.yaml,TUM2.yaml or TUM3.yaml for freiburg1, freiburg2 and freiburg3 sequences respectively. Change PATH_TO_SEQUENCE_FOLDERto the uncompressed sequence folder.

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

在ROS中使用usb攝像頭跑ORB SLAM2

  • 由于使用USB攝像頭作為圖像輸入,需要將圖像信息作為topic發送出去,ROS官網提供了usb_cam的package代碼,從github上下usb_cam的代碼,下載鏈接:https://github.com/bosch-ros-pkg/usb_cam

  • 安裝ROS usb_cam源碼

cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
catkin_make

  • 編譯usb_cam

mkdir build
cd build
cmake ..
make

  • 測試一下usb攝像頭
    首先開個新的終端,運行roscore(如果顯示命令沒有找到就說明的你沒有source source /opt/ros/indigo/setup.bash)
    在運行該節點之前,需要先配置一下節點參數,打開src/usb_cam-develop/launch文件中的的launch文件,我這里只需要該設備號即可,筆記本電腦的video0一般是網絡攝像頭,插入usb攝像頭一般是video1,若想看usb攝像頭是哪個端口號,可cd到根目錄中的dev文件夾下查看。

ls /dev/video*
cd /home/pan/catkin_ws/src/usb_cam
cd launch
gedit usb_cam-test.launch

將其中的內容替換成(其中/dev/videoX要對應為usb攝像頭)

<launch>
  <node name="camera" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video0" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="camera" />
    <param name="io_method" value="mmap"/>
    <remap from="/usb_cam/image_raw" to="/camera/image_raw" />
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/camera/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>
  • 開三個終端,依次分別運行

roscore

roslaunch usb_cam usb_cam-test.launch

rosrun ORB_SLAM2 Mono /home/(user)/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/(user)/catkin_ws/src/ORB_SLAM2/Examples/Monocular/MyCam.yaml

  • 運行時,首先是建圖
    為了圖像清晰,設置只選前兩項。建圖時盡量獲得更多的特征點。


    初始化

    建圖

    建圖
  • 覺得生成地圖OK之后,可以開啟定位模式(把localization勾上)


    定位

    定位

大功告成。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容