Testing rosify_difodo on RGBD-SLAM TUM dataset

3 minute read

The goal know is to start testing the rosify_difodo on a well known and used by the scientific community, SLAM dataset. We need an RGBD, in fact only the D (Depth) is desired but the most common is to use RGBD cameras so, usually you will find RGBD datasets.

In this task I came across this github repository called Awesome SLAM datasets, that has several links to SLAM related datasets or robotics navigation datasets, group by categories. Also it has a version as a github pages.

What we are looking for is for a dataset of RGBD (or just D) that ideally has a groundtruth and comes is a ROS bag like format. Since our rosify_difodo works with ROS, using a ROS bag will simplify integration with the algorithm.

Among the different datsets, we will start using the dataset from the TUM (Technical University of Munich) which has ROSBAG files and also is the same dataset that was used by the original DIFODO paper test the algorithm.

TUM RGBD Dataset

The dataset from the Technical University of Munich provides different datasets recorder with the Kinect.

Ive tried to make this dataset work with ros_difodo but I cannot seem to make it work yet.

The format of the dataset is clear. For the depth images we have a 640x480 16-bit monochrome images. Also the depth has a scale of 5000, so a pixel 5000 is a value of depth of 1 meter. Even though the images are 16bit when processing the message through ROS the encoding information says is a 32FC1 while for the realsense Ive been getting 16UC1.

Ive tried different combinations, like decoding the message at 32 and 16 bits but the results I get arent good.

Solution

After a lot of tries and a lot of time waste, I could make ros_difodo work against TUM dataset. Despite what they say in the format of the dataset (16bit, scale of 5000…) this doesnt seem to be tru when it comes to the ros messages. On the ros messages the encoding of the message is 32bit. Using 32 bits and using a scale of 1, the value of the pixel is the real value in meters, finally it works. The results for the freiburg1_desk are very similar to the ones I obtained with their DifOdometry-Datasets application. Here is a comparation of the output from ros difodo using rviz and the output of the DifOdometry-Dataset:

DifOdometry-Datasets ros_difodo
alt alt

More information on the Ros Depth Images

REP 108 has all the information about ros depth images. The original format for depth images was 32bits but since Kinect uses Openni and Openni uses 16bit, it became a format that spread just as much as the 32bit.

Next Steps

Use TUM evaluation tool

TUM also provides with their dataset of a tool to automatically evaluate the estimated trajectory against the groundtruth that they also provide with the datasets as a text file. This tool can also be used online.

To generate a compatible grountruth a file with the following format must be created, check formats:

timestamp tx ty tz qx qy qz qw

Here is the groundtruth for the freiburg1_desk rosbag.

Use slam-testbed

The URJC robotic group JdeRobot has also a tool for evaluation of SLAM algorithms called slam-testbed.

Using the previous tool from TUM with their dataset could be useful also to test and verify slam-testbed performance.

Test the algorithm with more rosbags from TUM

TUM RGBD dataset is quite large, they have different categories and will be a useful dataset in the future since it also provides a groundtruth plus their tool for evaluation.