ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[学习SLAM]DSO跑KITTI数据集

2020-12-09 18:30:38  阅读:310  来源: 互联网

标签:文件 dso camToWorld DSO SLAM result txt KITTI


安装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

    1

其中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抛出的关键帧数目不一样,虽然轨迹可以对比,但是精度盖怎么对比?
未完待续。。。。
————————————————。
原文链接:https://blog.csdn.net/weixin_43166819/article/details/103133570

标签:文件,dso,camToWorld,DSO,SLAM,result,txt,KITTI
来源: https://blog.csdn.net/KYJL888/article/details/105290902

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有