ElasticFusion 使用TUM RGB-D数据集

目标

将TUM数据集的RGB-D图像序列作为ElasticFusion(https://github.com/mp3guy/ElasticFusion)的输入数据,旨在使用TUM数据集的工具量化ElasticFusion估计的估计误差,这样可以与其他方法对比。

方法

在github上发下一个公开代码,https://github.com/HTLife/png_to_klg,将TUM数据集的RGB-D数据集转化为klg格式后输入到ElasticFusion中处理。
按照png_to_klg的readme转换图像数据的格式,但是执行的时候,程序卡在RawLogReader.cpp的RawLogReader::getCore()方法处

    std::cout << "RawLogReader getCore ..." << std::endl;
    auto tmp = fread(×tamp,sizeof(int64_t),1,fp);
    assert(tmp);
    std::cout << "fread is over" << std::endl;

    tmp = fread(&depthSize,sizeof(int32_t),1,fp);
    assert(tmp);
    std::cout << "depthSize = " << depthSize << std::endl;

    tmp = fread(&imageSize,sizeof(int32_t),1,fp);
    assert(tmp);
    std::cout << "imageSize = " << imageSize << std::endl;

    tmp = fread(depthReadBuffer,depthSize,1,fp);
    assert(tmp);

depthReadBuffer一直无法返回。

# include
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
从文件中读取指定大小的数据块到内存中
ptr:将要不存数据的地址
size:每一项的字节数
count:总共读取多少项
stream:文件指针

最后发现是生成association.txt的时候,rgb和depth文件的先后顺序弄反了。应该是:

$ ./associate.py depth.txt rgb.txt  > associations.txt

之后进入png_to_klg目录:

$ cd png_to_klg
$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./pngtoklg -w '/home/turtlebot/Database/TUM/rgbd_dataset_freiburg1_360/' -o '/home/turtlebot/Database/TUM/rgbd_dataset_freiburg1_360/fr1360.klg' -t

之后在/home/turtlebot/Database/TUM/rgbd_dataset_freiburg1_360/下生成文件fr1360.klg。最后进入ElasticFusio/GUI/build/中

$ ./ElasticFusion -l ~/Database/TUM/rgbd_dataset_freiburg1_360/fr1360.klg -f

执行结束后会在/home/turtlebot/Database/TUM/rgbd_dataset_freiburg1_360/下生成fr1360.klg.freiburg文件,即就是ElasticFusion估计的相机位姿,之后就可以使用TUM提供的工具了,比如evaluate_ate.py。

你可能感兴趣的:(SLAM)