初探DSO-SLAM并运行dso_ros
最近在做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.****.net/bflong/article/details/80936914,
第一个坑:原作者提供的源代码有两个分支,master分支对应rosbuild版,catkin分支对应catkin版。对于现代ROS版本,推荐使用catkin版本,安装使用更方便。但是作者的catkin分支存在代码缺陷,rosmake 找不到包,实际无法安装使用,这让是人百思不得其解,之后我就查了好多的资料,绝大数的都不适用,也许是我的版本配置的问题吧,最后我找到蓝鲸智能修改之后的dso_ros版本,终于是看到希望啦,真是谢谢大佬:https://blog.****.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.****.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 !