DSO跑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

其中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抛出的关键帧数目不一样,虽然轨迹可以对比,但是精度盖怎么对比?
未完待续。。。。

你可能感兴趣的:(SLAM实验)