Ubuntu 16.04 ORB_SLAM2+ROS+kinect1+AR+數據集+稀疏地圖

這些天在學習高博ORB-SLAM2,入手一臺kinect1相機,個人建議先理論,後實踐。理論從推導公式做起,這裏寫點實踐過程,以及總結遇到的一些問題:

 安裝過程參考:https://blog.csdn.net/u010128736/article/details/52808650

搭建ORB-SLAM2

ORB-SLAM是15年一個西班牙博士做的,工程效果來看,是目前最好的了。ORB-SLAM是針對單目做的slam,最新的是ORB-SLAM2,支持單目、雙目和RGB-D接口。這裏對ORB-SLAM2的環境搭建做一個記錄,裏面遇到的坑也有解決辦法,可以參考。

系統環境:ubuntu16.04
1.設置root密碼(若爲新裝的系統):

(1)打開一個終端Ternimal,輸入

sudo passwd

然後設置root用戶的密碼
(2)在catkin_ws/src下新建 3.安裝ORB_SLAM:文件夾:

1.  mkdir ORB_SLAM2
2.  cd ORB_SLAM2

2.安裝必備軟件:

(1)更新apt庫

sudo apt-get update

(2)安裝git

sudo apt-get install git

(3)安裝cmake

sudo apt-get install cmake

(4)安裝Pangolin
安裝依賴:
a、opengl:
b、GLEW:

sudo apt-get install libglew-dev

c、Boost:

sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev

d、Python2/Python3:

sudo apt-get install libpython2.7-dev

e、編譯基礎庫

sudo apt-get install build-essential

在catkin_ws/src目錄下安裝Pangolin:

1. git clone https://github.com/stevenlovegrove/Pangolin.git
2. cd Pangolin

 直接編譯

mkdir build
cd build
cmake ..
make

(5)安裝OpenCV
安裝依賴:

sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-./build,shdev libtiff5-dev  libjasper-dev libopenexr-dev libtbb-dev

安裝OpenCV:
a、官網下載OpenCV 3.2.0 for Linux下載地址,解壓到Ubuntu中
b、進入OpenCV文件夾,配置工程

mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

進行編譯

make
sudo make install

(6)安裝Eigen  是頭文件組成的庫,沒有庫文件

sudo apt-get install libeigen3-dev

(6)可選安裝 PCL

sudo apt-get install libpcl-dev pcl-tools

(7)安裝BLAS and LAPACK庫

sudo apt-get install libblas-dev
sudo apt-get install liblapack-dev

 3.安裝ORB_SLAM:

(1)Clone the repository:

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM24.測試ORB_SLAM2

(2)編譯:

cd ORB_SLAM2
chmod +x build.sh

 (3)  執行:

  ./build.sh

  ./build_ros.sh

 當然也可以通過下面的方法編譯ORB_SLAM2

     在編譯ORB_SLAM2的過程中遇到幾個問題,想分享下:

 

這篇博客寫的是修改路徑的方法 https://www.2cto.com/kf/201707/661021.html  但是我用了之後感覺還是有問題,路徑添加不進去.

用下面的解決辦法:輸入 sudo ln -s /home/xm/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2 /opt/ros/kinetic/share/ORB_SLAM2 注意:一定寫自己的絕對地址,不知道的地址的話,查一下文件屬性.

 參考這個博客: https://blog.csdn.net/weixin_40931266/article/details/81059763

 然後又出現了下一個問題.保持耐心很關鍵.

 出錯原因爲:libboost_system.so 與libboost_filesystem.so找不到鏈接目錄.

解決方案爲:新開一個終端,輸入 $locate boost_system     查找目錄

                                                             $locate boost_filesystem 查找目錄

 將libboost_system.so與libboost_filesystem.so複製到ORB_SLAM2/lib(注意是catkin_ws/src/ORB_SLAM2/lib)下,並且將ORBSLAM2/Examples/ROS/ORBSLAM2下的Cmakelists.txt中加入庫目錄,具體爲
在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
加入${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so )

保存後,直接編譯

參考博客爲 https://blog.csdn.net/sinat_38343378/article/details/78883919.非常感謝

配置環境變量如下圖所示:

vim.bashrc

source .bashrc

最後刪除鏈接文件

sudo rm -rf  opt/ros/kinetic/share/ORB_SLAM2

 4.測試ORB_SLAM2

這裏下載了一個單目相機的測試數據集進行測試。數據集下載地址:https://vision.in.tum.de/data/datasets/rgbd-dataset/download

參考博客 https://www.cnblogs.com/bigzhao/p/6246084.html

1.按照要求下載數據集,我下載的是rgbd_dataset_freiburg2_pioneer_360,將其解壓到你的 catkin_ws/src/ORB_SLAM2.我個人放在了orbslam2工程目錄下面了.

2.下載 associate.py.放在/ORB_SLAM2/Examples/RGB-D/目錄下面.

3.打開終端,進入到associate.py所在目錄,即/ORB_SLAM2/Examples/RGB-D/,之後運行

python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt

在該目錄中將會生成一個associations.txt文件.

4.參照所給鏈接中的第3步,https://github.com/raulmur/ORB_SLAM2,即

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE

 PATH_TO_SEQUENCE_FOLDER文件夾即爲數據庫所在文件夾,我放在orbslam2工程下面,ASSOCIATIONS_FILE即爲第3步中生成的associations.txt,給出目錄位置

5.至此,可以運行,#cd ORB_SLAM2 #./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM2.yaml /home/zty/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360 /home/zty/ORB_SLAM2/rgbd_dataset_freiburg2_pioneer_360/associations.txt

 

 

 5.用kinect1相機跑ORB_SLAM2

   安裝kinect1驅動

1.安裝驅動

安裝ROS軟件包
以下2種方式,任選一種即可,當然全部安裝也沒有問題

1)使用openni_launch

sudo apt-get install ros-kinetic-openni-camera ros-kinetic-openni-launch

注意:openni2_launch已經不再支持Kinect任何產品。

2)使用freenect_launch

1. sudo apt-get install libfreenect-dev

2. sudo apt-get install ros-kinetic-freenect-camera ros-kinetic-freenect-stack ros-kinetic-freenect-launch

2.軟硬件準備

硬件準備:kinect1接12V電源,用自身的USB接到PC機

軟件準備: roslaunch openni_launch openni.launch 或者roslaunch freenect_launch freenect.launch

驗證驅動是否安裝成功

rostopic list 查看ORB_SLAM2需要兩個topic: /camera/rgb/image_raw      /camera/depth_registered/image_raw

roscore

rosrun rqt_image_view rqt_image_view

 如下圖所示:

 

 3.配置launch文件  參考https://www.cnblogs.com/zengcv/p/6021512.html

     在解壓後的ORB_SLAM2的根目錄下新建kinect_orbslam2.launch,內容如下:(根據需要,紅色字體改爲對應的路徑,其他的無需修改<launch> 

  <param name="orb_use_viewer" value="false"/> 
  <node pkg="ORB_SLAM2" type="RGBD" name="ORB_SLAM2" 
        args="/home/xm/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt 
         /home/xm/catkin_ws/src/ORB_SLAM2/Examples/RGB-D/TUM1.yaml" cwd="node" output="screen"/> 

  <include file="$(find freenect_launch)/launch/freenect.launch"> 
    <!-- use device registration --> 
    <arg name="depth_registration" value="true" /> 
    <arg name="rgb_processing" value="true" /> 
    <arg name="ir_processing" value="false" /> 
    <arg name="depth_processing" value="false" /> 
    <arg name="depth_registered_processing" value="true" /> 
    <arg name="disparity_processing" value="false" /> 
    <arg name="disparity_registered_processing" value="false" /> 
    <arg name="sw_registered_processing" value="false" /> 
    <arg name="hw_registered_processing" value="true" /> 
  </include> 
</launch>

在ORB_SLAM2目錄下

roslaunch kinect_orbslam2.launch

 

 

 6. 跑ORB_SLAM AR

     主要參考 https://blog.csdn.net/u79501/article/details/68942174

     運行 ROS 中的demo

 

直接跑MonoAR吧~

開始之前還有個地方需要改:

 

把ros_mono_ar.cc中的

ros::Subscriber sub = nodeHandler.subscribe("/camera/image_raw", 1, &ImageGrabber::GrabImage,&igb);

改爲:

ros::Subscriber sub = nodeHandler.subscribe("/camera/rgb/image_color", 1, &ImageGrabber::GrabImage,&igb);

在下圖目錄下重新編譯:

 

 

1.roscore

2.roslaunch openni_launch openi.launch

3.rosrun ORB_SLAM2 MonoAR /home/xm/catkin_ws//src/ORB_SLAM2/Vocabulary/ORBvoc.txt  /home/xm/catkin_ws/src/ORB_SLAM2/Examples/Monocular/TUM1.yaml

(TUM1.yaml是參數設置文件,主要是相機的內參,這個得自己標定。如果懶得標定,直接用TUM1.yaml吧,湊合着用吧)

直接放結果:

 寫了兩個小時,先休息會。

 

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