资源经验分享DSO跑KITTI数据集

DSO跑KITTI数据集

2019-11-21 | |  337 |   0

原标题:DSO跑KITTI数据集

原文来自:CSDN      原文链接:https://blog.csdn.net/weixin_43166819/article/details/103133570


安装DSO

此步非常简单,安装也很快,不详述,【参考博客】或【GitHub源网页
写在前面

  • 数据集中的camera.txt文件是可以更改的,且需要改成对应的相机参数

  • 图片的大小可以不用更改为一般的1280x1024,就保持KITTI数据集的图片尺寸就行

  • 图片的扩展名不用更改

  • times.txt文件也可以不自己做(取巧的办法,甚至可以不需要)

  • 可以不用压缩包直接解压选择图片文件夹就行

需要注意的问题

  • 首先可以下载一个最小的dso用的数据集对比里面的文件,其中times.txt文件留下KITTI对应的帧数就行,

  • camera.txt文件需要根据KITTI不同序列的相机内参进行修改,可以参考ORB-SLAM2中的KITTIxx.yaml文件。参考博客/测试选择crop,即可以写成以下形式:

707.0912 707.0912 601.8873 183.1104 0.0
1226 376
crop
1216 368

参考LDSO(有回环的DSO)内支持KITTI数据集
最终执行:

./build/bin/dso_dataset files=/home/zjb/dso/sequence_07/image calib=/home/zjb/dso/sequence_07/camera.txt preset=0 mode=2

其中sequence_07就是KITTI_07序列中的image_0的图片(其实是哪个图片根本不影响)
mode=2是指使用自己合成的数据集,preset=0并不强制实时性。speed=x可以调整速度,这里没有使用。具体其他参数查看【GitHub源网页】,所以说自己的数据集文件里需要两个东西就行了,一个是camera.txt文件,另一个是image图片文件夹。
目前跑的效果还行,现在需要保存其轨迹。

保存轨迹文件

其关键帧位姿文件是result.txt,我们可以看下他是怎么得到的

  • 首先,在dso/src/IOWrapper/OutputWrapper目录下有一个SampleOutputWrapper.h文件,这是一个采集工程运行中各种数据的,我们值保留下来publishCamPose()这个函数,其他的函数全删掉

  • 不管是主函数还是上一个头文件函数中,都引用了Output3DWrapper.h文件(在src/IOWrapper文件夹下),他里面详细讲了每个回调函数的描述

  • 工程的主文件在dso/src/FullSystem下的FullSystem.cpp,其中就有一个函数FullSystem::printResult(std::string file),file就是文件名,用来保存打印出来的信息,其实保存的就是TUM数据集的轨迹格式,每行8个数据(time, t x , t y , t z , q x , q y , q z , q w )

myfile << s->timestamp <<
			" " << s->camToWorld.translation().transpose()<<
			" " << s->camToWorld.so3().unit_quaternion().x()<<
			" " << s->camToWorld.so3().unit_quaternion().y()<<
			" " << s->camToWorld.so3().unit_quaternion().z()<<
			" " << s->camToWorld.so3().unit_quaternion().w() << "n";
  • src/下的main_dso_pangolin.cpp文件中调用了上一个函数,就是将位姿保存在result.txt文件中。

fullSystem->printResult("result.txt");

但是当使用evo进行评估时,出现:

[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space)

这个错误的主要原因我猜测是result.txt文件内写的太乱,有的数据之间空了好几个空格,所以使用以下命令给他规整好:

cat result.txt | tr -s [:space:] > ./out.txt

也就是删除多余空格,各个数据之间就保留一个空格就行,参考将内容保存在out.txt文件中
然后就可以执行以下命令保存成kitti格式:

evo_traj tum out.txt --save_as_kitti

DSO跑出来的关键帧和ORB-SLAM抛出的关键帧数目不一样,虽然轨迹可以对比,但是精度盖怎么对比?
未完待续。。。。

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:基于Paddle框架的预测鲍鱼年龄的调优方式

下一篇:python-简单程序设计

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...