最近在做SLAM相關的工作,用思嵐的A2激光雷達在turtlebot3上測試SLAM建圖效果,感覺還是不錯的。由於項目在方案上還沒有確定選擇哪種作爲SLAM的最終方案,在我測試奧比中光ASTRA mini 3D攝像頭,看看在構建地圖上有什麼優勢。所以在查詢資料中我看到了DSO,感覺DSO還是比較簡單的,使用的稀疏直接法,雖然遇到過很多坑,但最終還是一一的解決了。DSO(Direct Sparse Odometry)是慕尼黑工業大學Engel於2016年發佈在arXiv上的一種基於直接法,構建稀疏點雲地圖的視覺里程計。在VSLAM中還是獨樹一幟的吧,雖然相關資料比較少,但是進行一些簡單測還是沒問題的啦,廢話不多說,開始進入正題。(本人使用的是zshell)
安裝dso:
1.首先安裝相關依賴包(如果你沒有安裝的話):
➜ ~ sudo apt-get install libsuitesparse-dev libeigen3-dev libboost-dev
➜ ~ sudo apt-get install libopencv-dev
2. 下載dso包:
➜ ~ mkdir ~/dso_pkg
➜ dso_pkg git clone https://github.com/JakobEngel/dso.git
3 .根據DSO官方的要求是要配置Pangolin(用於3D可視化和GUI)和ziplib(用於讀取圖像爲.zip的數據集):
安裝zlibzp並編譯dso
➜ ~ sudo apt-get install zlib1g-dev
➜ ~ cd ~/dso_pkg/dso/thirdparty
➜ thirdparty git:(master) tar -zxvf libzip-1.1.1.tar.gz
➜ thirdparty git:(master) cd libzip-1.1.1/
➜ libzip-1.1.1 git:(master) ./configure
➜ libzip-1.1.1 git:(master) make
➜ libzip-1.1.1 git:(master) sudo make install
➜ libzip-1.1.1 git:(master) sudo cp lib/zipconf.h /usr/local/include/zipconf.h
安裝Pangolin
➜ ~ cd dso_pkg
➜ dso_pkg git clone https://github.com/stevenlovegrove/Pangolin.git
➜ ~ cd Pangolin
➜ Pangolin git:(master) mkdir build
➜ build git:(master) cd build
➜ build git:(master) cmake -DCPP11_NO_BOOST=1 ..
➜ build git:(master) make -j
4.在TUM單目數據集上運行DSO
下載TUM單目數據集請到https://vision.in.tum.de/data/datasets/mono-dataset?redirect=1下載你所需要的zip包,我下載的是sequence_14,根據需要自行下載。下載好把zip包放到dso的bin目錄下並解壓,我的是
➜ bin git:(master) pwd
/home/zpq/dso_pkg/dso/build/bin
➜ bin git:(master) unzip sequence_14.zip
在bin目錄下運行啓動數據集:
./dso_dataset files=./sequence_14/images.zip calib=./sequence_14/camera.txt gamma=./sequence_14/pcalib.txt vignette=./sequence_14/vignette.png preset=0 mode=0
運行成功啦....那我們接下來運行dso_ros把,這個有點坑,好吧,身爲程序猿的我們不怕坑踩不過,就拍沒有坑!來吧。
利用外接攝像頭實時運行DSO
Engel同時發佈了dso_ros,用ROS來實時獲取圖片,程序代碼很簡短,實際上它是作者提供的一個如何把DSO當做一個黑盒子來使用的樣例。這裏需要用到ros啦,沒有裝好ros系統的同學,可以先裝好ros並搭建好一個工作空間,傳送門https://blog.csdn.net/bflong/article/details/80936914,
第一個坑:原作者提供的源代碼有兩個分支,master分支對應rosbuild版,catkin分支對應catkin版。對於現代ROS版本,推薦使用catkin版本,安裝使用更方便。但是作者的catkin分支存在代碼缺陷,rosmake 找不到包,實際無法安裝使用,這讓是人百思不得其解,之後我就查了好多的資料,絕大數的都不適用,也許是我的版本配置的問題吧,最後我找到藍鯨智能修改之後的dso_ros版本,終於是看到希望啦,真是謝謝大佬:https://blog.csdn.net/smilinglamb/article/details/80656872?utm_source=blogxgwz2
下載並編譯
➜ ~ cd catkin_ws/src
➜ src git clone https://github.com/BlueWhaleRobot/dso_ros.git
➜ ~ cd ..
➜ catkin_ws export DSO_PATH=/home/zpq/dso_pkg/dso
➜ catkin_ws catkin_make
安裝編譯usb_cam
➜ ~ cd ~/catkin_ws/src
➜ src git clone https://github.com/bosch-ros-pkg/usb_cam.git
➜ catkin_ws cd ..
➜ catkin_ws catkin_make
➜ catkin_ws source ~/catkin_ws/devel/setup.bas
修改相機參數文件
➜ ~ gedit ~/catkin_ws/src/dso_ros/camera.txt
我的是(根據需求你們自行修改):
446.867338 446.958766 298.082779 234.334299 -0.324849 0.1205156 -0.000186 -0.000821
640 480
crop
640 480
運行dso_ros:
新開終端運行:roscore
再開一終端運行usb_cam:roslaunch usb_cam usb_cam-test.launch
再開一終端運行dso_live:rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/zpq/catkin_ws/src/dso_ros/camera.txt mode=1
第二個坑運行usb_cam時提示我的相機沒有進行光度校準的,一般這個是不會影響我的dso_ros的運行,但是在後遇見的問題中我也不確定是否與這個問題有關,因此我查找了大量有關資料,終於找到一位大佬的博客解決的 傳送門:https://blog.csdn.net/qq_25241325/article/details/82705003
第三個坑是我根據別人的運行啓動dso_live的時候,我可以看我的rostopic ,導致我的imge view 設置錯誤,我的usb_cam的topic是/usb_cam 因此我的啓動dso_live 的image參數是:rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/zpq/catkin_ws/src/dso_ros/camera.txt mode=1
好啦,整個DSO 的運行測試流程以及我所遇到的坑都在這裏啦,希望可以幫助各位學習DSO !