Wednesday, October 12, 2011

Take three steps backwards to take a leap forward:

It has been more than two weeks since my last entry and I have decided to write a new one to summarize what I have been doing during those days.

As I mentioned in my previous entry, the next milestone of my FYP consist in the construction of a graph of keyframe's poses as nodes and rigid transformations between nodes as edges. The main objective consist in the optimization of that graph to avoid accumulation of error performing visual odometry.

The first task was to integrate the g2o library in my project so that I could generate and optimize the graph. This task was not too difficult although I must confess that I took more time than originally expected.

Once integrated this part, I started to test the application comparing the resulting global map from the optimization process with the global unoptimized map. The bad news came to see that the results were pretty bad, and guilt obviously, would not be the developers of the g2o but mine.

After few days trying to fix those problems with the g2o library, I decided to do the graph optimization part with the MRPT library to see if this way I could get better results. This task took me some days too and unfortunately didn't work as I expected. Curiously, the global maps obtained from the optimization of small graphs with the MRPT library, seemed to be slightly better than the unoptimized maps. Instead, when I tried to optimize a graph reconstructing a room, the results where much worse optimizing than just doing odometry.

Global map without graph optimization:

Global map graph optimization (small MRPT graph):

At this point, I decided that the best thing I could do was a cleaning of the code and restructuring in classes to help me find the problem. This is what I have been doing during the last four days and I think It will take at least one or two weeks more refactoring the whole project.

Therefore, in the coming weeks my work will not consist in the addition of new functionality, but improve what I have and rebuild the project over a new base. Perhaps in this way I could be able to find the problem and fix it, in any case this won't be work in vain. I'll take three steps backwards to take a big leap forward!


  1. Hey Miguel

    What are your difficulties with g2o? Have you checked how we implemented the optimization? We will probably soon publish a new paper on the RGBD-SLAM which could help you.

    Nikolas from the RGBD-SLAM-Team

  2. Hi Nikolas,

    "What are your difficulties with g2o?"

    In that version, there was an error in my program which I have not found yet due to the complexity of the project.

    In the past few weeks I have been re-implementing the whole project to make sure that every part works as expected. I have implemented loop detection and I plan to implement graph optimization with the new version of my FYP in the weeks to come. I will try to perform graph optimization with the MRPT graph structures first because this library is being developed in my University. If I manage to make this working with the MRPT graph structures, I will try to do the same with your framework as it outperforms state of the art graph optimization algorithms.

    "We will probably soon publish a new paper on the RGBD-SLAM which could help you."

    I will stay tuned to read it as soon as it is published. If you wish, I will be really thankful if you notify me when it is ready.

    Best regards