DSO 初探

Posted 白巧克力亦唯心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DSO 初探相关的知识,希望对你有一定的参考价值。

首先给大家推荐微信公众号–泡泡机器人,内容包括各类SLAM技术的视频讲解和原理解析文章。该博客内容发表在泡泡机器人公众号上,请尊重泡泡机器人公众号的版权声明。
泡泡机器人文章链接

这两天视觉SLAM界的大新闻就是Direct Sparse Odometry(DSO)开源了,小伙伴们都迫不及待的赶紧上手撩了一下,论文下载地址请戳。为了紧跟学术前沿,我们此篇文章将作为学习DSO的一个开端,和大家一起来前排感受下Prof. Cremers 门派大弟子Engel博士的新绝学。文章将分为四部分,DSO的安装,DSO在公共数据集上的运行,DSO在自己数据集上的运行,DSO在实时摄像头下的运行。

DSO的安装

DSO依赖项很少,只有Eigen3,pangolin,opencv等少数几个大家都已经很熟悉的库,作者的github页面上对安装DSO做了很详细说明,DSO下载以及安装链接。因此,安装DSO极为容易:
1.下载DSO源代码到相应文件路径,比如我的/home/hyj/DSO

2.安装suitesparse and eigen3 (必需)

sudo apt-get install libsuitesparse-dev libeigen3-dev

3.安装opencv. DSO对opencv依赖很少,仅仅读或者写图像等一些简单操作。

sudo apt-get install libopencv-dev

4.安装pangolin. 强烈推荐安装,考虑到ORB_SLAM中也选择pangolin作为显示工具,而使用也非常方便,因此建议大家学习。
安装教程请移步pangolin的github主页

5.安装ziplib. 建议安装,DSO用这个库来解压读取数据集压缩包中的图片,这样就不要每次都把下再的图片数据集进行解压了。

sudo apt-get install zlib1g-dev
cd thirdparty #找到DSO所在文件路径,切换到thirdparty文件夹下
tar -zxvf libzip-1.1.1.tar.gz
cd libzip-1.1.1/
./configure
make
sudo make install
sudo cp lib/zipconf.h /usr/local/include/zipconf.h

6.编译DSO.

cd /home/hyj/DSO/dso
mkdir build
cd build
cmake ..
make -j

至此,不出意外的话,DSO将安装完成。

在TUM单目数据集上运行DSO

请下载TUM数据集,地址。然后切换到DSO的bin目录下,使用下列命令执行程序。

cd /home/hyj/DSO/dso/build/bin
./dso_dataset \\
files=XXXXX/sequence_XX/images.zip \\
calib=XXXXX/sequence_XX/camera.txt \\
gamma=XXXXX/sequence_XX/pcalib.txt \\
vignette=XXXXX/sequence_XX/vignette.png \\
preset=0 \\
mode=0

其中files为数据集图片压缩包,calib为相机内参数文件,gamma和vignette为相机的一些特性参数,光度标定文件。mode为DSO模式切换,如0为包含光度表达文件,1为只包含内参数,2为没有畸变参数. preset为设定DSO运行时的参数,如选取的像素点个数等等。preset=3是preset=0的5倍速运行DSO。
数据集运行结果如下:

在自己单目数据集上运行DSO

可能你平常实验中用自己的摄像头采集了一些数据,你手头只有图片,以及摄像头内参数,照样可以测试下DSO会表现如何。

1.将自己内参数写入自己的camera.txt下,比如使用opencv或者matlab标定的针孔相机模型。我的样例如下:

446.867338 446.958766 298.082779 234.334299 -0.324849 0.1205156 -0.000186 -0.000821
640 480
crop
640 480

第一行为fx fy cx cy d0 d1 d2 d3.

2.准备自己数据集的图片,注意图片名为6位,不足6位的补零,如下图所示。c++可以通过setw(6)等指令来实现。

3.运行

./dso_dataset files=/home/hyj/bagfiles/img/ calib=/home/hyj/DSO/camera.txt mode=1

在一个手持相机步行前进,相机朝向地毯的数据集上运行结果示意图如下

用自己摄像头实时运行DSO

Engel同时发布了dso_ros,用ROS来实时获取图片,程序代码很简短,实际上它是作者提供的一个如何把DSO当做一个黑盒子来使用的样例。根据dso_ros的代码,你完全可以抛开ros,用opencv获取图片,然后去调用dso。dso_ros的下载地址,下载时要注意现在已经有了rosbuild和catkin两个版本。Engel他们可能使用ROS比较早,所以熟悉rosbuild那一套,lsdslam, dvoslam等等他们的很多代码都是rosbuild去编译而不是catkin。好在, ros indigo两个版本都支持,如果你只有catkin_ws工作空间,请使用dso_ros的catkin版本。我这里使用rosbuild版本进行安装,也希望大家学会indigo下的rosbuild编译:
1.假设你已经创建了rosbuild_ws工作空间(如果你不知道如何让rosbuild和catkin的工作空间共存,请参考这里),将dso_ros下载到rosbuild_ws/package/文件夹下.

2.在我的使用过程中需要对下载下来的dso_ros进行两步修改:

1.修改cmake.list中bin文件路径
set(EXECUTABLE_OUTPUT_PATH $PROJECT_SOURCE_DIR/bin)
如果不修改,编译生成的bin将会存在build目录下,rosrun会找不到
2.修改manifest.xml
添加语句 depend package=”roscpp”

3.编译

export DSO_PATH=/home/hyj/DSO/dso
rosmake dso_ros

4.运行

1.启动roscore
2.使用ROS工具包usb_cam获取图像,关于usb_cam的安装请自行搜索
 roslaunch usb_cam webcam.launch
3.运行dso
 rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/hyj/DSO/camera.txt mode=1

运行结果如下:

DSO的安装演示已经讲完了,个人感觉效果很棒,直接法的又一力作,非常值得入坑,在后续的文章中将对DSO进行一一剖析,敬请期待。

【版权声明】泡泡机器人SLAM的所有文章全部由泡泡机器人的成员花费大量心血制作而成的原创内容,希望大家珍惜我们的劳动成果,转载请务必注明出自【泡泡机器人SLAM】微信公众号,否则侵权必究!同时,我们也欢迎各位转载到自己的朋友圈,让更多的人能否进入到SLAM这个领域中,让我们共同为推进中国的SLAM事业而努力!
【注】商业转载请联系刘富强(liufuqiang_robot@hotmail.com)进行授权。普通个人转载,请保留版权声明,并且在文章下方放上“泡泡机器人SLAM”微信公众账号的二维码即可。

以上是关于DSO 初探的主要内容,如果未能解决你的问题,请参考以下文章

DSO 中的Windowed Optimization

直接法光度误差导数推导

hello world

Cocos2d-x_初探_第一次配置与HelloWorld

conan入门(二十一):解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c

Halcon光度立体技术