本文主要是介绍DSO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
论文下载地址请戳。为了紧跟学术前沿,我们此篇文章将作为学习DSO的一个开端,和大家一起来前排感受下Prof. Cremers 门派大弟子Engel博士的新绝学。文章将分为四部分,DSO的安装,DSO在公共数据集上的运行,DSO在自己数据集上的运行,DSO在实时摄像头下的运行。
DSO的安装
DSO依赖项很少,只有Eigen3,pangolin,opencv等少数几个大家都已经很熟悉的库,作者的github页面上对安装DSO做了很详细说明,DSO下载以及安装链接。因此,安装DSO极为容易:
1.下载DSO源代码到相应文件路径,比如我的/home/lhu/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/lhu/DSO/dso
mkdir build
cd build
cmake ..
make -j4
至此,不出意外的话,DSO将安装完成。
在TUM单目数据集上运行DSO
请下载TUM数据集,地址。然后切换到DSO的bin目录下,使用下列命令执行程序。
cd /home/lhu/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/lhu/bagfiles/img/ calib=/home/lhu/DSO/camera.txt mode=1
在一个手持相机步行前进,相机朝向地毯的数据集上运行结果示意图如下
用自己摄像头实时运行DSO (roubuild版)
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/lhu/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/lhu/DSO/camera.txt mode=1
运行结果如下:
用自己摄像头实时运行DSO (catkin版)
利用作者发布的dso_ros运行DSO(ros安装请自行搜索)。下载地址。 作者提供了rosbuild和catkin两个版本的程序包,如果你使用catkin_ws工作空间,请使用dso_ros的catkin版本。如果使用rosbuild去编译,请使用rosbuild版本,这里使用catkin版本。
1) 安装编译dso_ros:
- mkdir -p ~/catkin_ws/src
- cd ~/catkin_ws/src
- git clone https://github.com/JakobEngel/dso_ros.git
- cd ..
- export DSO_PATH=/home/lhu/Documents/dso/
- catkin_make
2) 安装编译usb_cam
- cd ~/catkin_ws/src
- git clone https://github.com/bosch-ros-pkg/usb_cam.git
- cd ..
- catkin_make
- source ~/catkin_ws/devel/setup.bash
3) 运行dso
修改相机参数文件
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
新开一个终端
- Roscore
再开一个终端
- source ~/catkin_ws/devel/setup.bash
- roslaunch usb_cam usb_cam-test.launch
再开一个终端
- source ~/catkin_ws/devel/setup.bash
- rosrun dso_ros dso_live image:=/usb_cam/image_raw calib=/home/hyj/DSO/camera.txt mode=1
DSO安装已经介绍完了,整体来说比较简单,DSO采用的直接法,效果很不错。在接下来的文章将对DSO做详细剖析。
这篇关于DSO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!