這些天在學習高博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 但是我用了之後感覺還是有問題,路徑添加不進去.
在catkin_ws中 source ~/devel/setup.bash
用下面的解決辦法:輸入 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 openni.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吧,湊合着用吧)
直接放結果:
寫了兩個小時,先休息會。
7. kinect1+rtabmap 構建辦公室環境場景的三維稠密地圖
重裝了一次系統,把上面的過程又重新跑了一遍。然後安裝rtabmap
打開rtabmap
三維稠密地圖,輪廓比較清晰
怎麼用產生的數據做視覺避障?