Wednesday, March 7, 2012

A new engineer. Kinect6DSLAM source code and report

Yesterday I presented my Final Year Project about Kinect SLAM 6D and now I am officially an engineer. It has been a long time since my last entry, but I have been very busy writing the final report, preparing the presentation, etc. Those past few months have been very tough, but I have learnt a lot and I am very proud of that, so I want to thank the people that have supported me during this time.

I would like to express my gratitude to my advisors Dr. D. Javier González and Dr. D. José Luis Blanco, who have devoted all the needed time and effort to help me overcome the difficulties I have encountered and, without whose assistance, it would not been possible to carry out this project.

I am also grateful to all the authors, who have generously allowed me to use part of their material to illustrate several pages of my final report. I would also like to thank the researchers that have helped me during all my project, helping me to integrate their algorithms and sharing their ideas.

Last but not least, I feel grateful to my family, which has tireless supported me since the beginning. To my friends who have been with me when I needed. And finally I feel extremely grateful to Araceli, who has not only suffered most of my work hours, but has always encouraged me to go ahead in the hardest moments. Thank you very much.


I have received a few emails asking me to release the source code of my Kinect6DSLAM project and Final Year Project report, so I have decided to publish both here so they can be downloaded from everyone.

A 3D map reconstructed in realtime with Kinect6DSLAM.

I have uploaded the source code to a repository of Github which can be accessed here:

Main page of the Doxygen documentation of the Kinect6DSLAM project.

The code comes with a (small) Doxygen documentation which briefly describes the project, how to install the software and how to use it. The documentation can be consulted in the "doc" directory: KinectSLAM6D/doc/html/index.html.

For the Final Year Project report I have decided to share a public link to the pdf document. The only problem is that the whole document is in spanish, but at least it is well illustrated and can be understandable, I think. The report can be downloaded from the following link:

I have also decided to publish the slides of the Final Year Project presentation, which can be found in the following public link:


  1. Hello Miguel,
    First of all, congratulations with obtaining your degree. I must call you 'colleague' now :-) I came across your blog site because I'm trying to do something very similar to what you've done in your thesis. I would like to know if and where I can find your complete thesis text. Is the code you wrote publicly available? Both would help me tremendously.

    Thanks in advance.
    Kind regards,

  2. Thanks a lot Dries! It is good to know that you find my blog interesting :). I have received a lot of requests for my code and thesis text, so I have decided to publish it in the following days. The only problem is that my thesis report is written in spanish.

    Best regards!
    Miguel A.

  3. Hello Miguel.

    I'm interesting with your project. so.. i have compiled that source. but I has one problem like that.

    [ 26%] Building CXX object CMakeFiles/Kinect6DSLAM.dir/src/KinectGrabber_Rawlog.cpp.o
    In file included from /usr/include/mrpt/obs/include/mrpt/slam/CObservation3DRangeScan.h:410:0,
    from /usr/include/mrpt/hwdrivers/include/mrpt/hwdrivers/CIbeoLuxETH.h:34,
    from /usr/include/mrpt/hwdrivers/include/mrpt/hwdrivers.h:43,
    from /home/stmoon/Download/MiguelAlgaba-KinectSLAM6D-9891798/src/../include/KinectGrabber_Rawlog.h:1,
    from /home/stmoon/Download/MiguelAlgaba-KinectSLAM6D-9891798/src/KinectGrabber_Rawlog.cpp:1:
    /usr/include/mrpt/obs/include/mrpt/slam/CObservation3DRangeScan_project3D_impl.h: In function ‘void mrpt::slam::detail::project3DPointsFromDepthImageInto(mrpt::slam::CObservation3DRangeScan&, POINTMAP&, bool, const mrpt::poses::CPose3D*, bool) [with POINTMAP = pcl::PointCloud]’:
    /usr/include/mrpt/obs/include/mrpt/slam/CObservation3DRangeScan.h:189:4: instantiated from ‘void mrpt::slam::CObservation3DRangeScan::project3DPointsFromDepthImageInto(POINTMAP&, bool, const mrpt::poses::CPose3D*, bool) [with POINTMAP = pcl::PointCloud]’
    /home/stmoon/Download/MiguelAlgaba-KinectSLAM6D-9891798/src/KinectGrabber_Rawlog.cpp:142:139: instantiated from here
    /usr/include/mrpt/obs/include/mrpt/slam/CObservation3DRangeScan_project3D_impl.h:51:63: error: ‘pca’ has incomplete type
    make[2]: *** [CMakeFiles/Kinect6DSLAM.dir/src/KinectGrabber_Rawlog.cpp.o] Error 1
    make[1]: *** [CMakeFiles/Kinect6DSLAM.dir/all] Error 2
    make: *** [all] Error 2

    I don't know why the error occurs.
    My environment is
    - Ubuntu 12.04
    - MRPT 0.9.6 (could you tell me the MRPT verson? I think that the problem is version dismatch)

    Thank you in advance.

    Kind regards,
    SungTae Moon.

  4. Hi SungTae,

    I am currently using the MRPT 0.9.6 (trunk version). Did you compiled the MRPT library with PCL support? This is needed in order to let the mrpt::slam::detail::project3DPointsFromDepthImageInto method to convert CObservation3DRangeScan objects from MRPT to PCL point clouds.

    Kind regards,
    Miguel Algaba

  5. Thank you very much.. it works...

    but other problem occur when it runs.

    I just run Kinect6DSLAM and PairwiseAlignmentSteps...
    My environment is ubuntu 12.04.

    stmoon@stmoon-dev:~/Test/TestMRPT/MiguelAlgaba-KinectSLAM6D-9891798/build$ ./Kinect6DSLAM
    bool g2o::HyperGraphActionLibrary::registerAction(g2o::HyperGraphElementAction*): creating collection for "writeGnuplot"
    terminate called after throwing an instance of 'std::logic_error'
    what(): basic_string::_S_construct null not valid
    중지됨 (core dumped)

    stmoon@stmoon-dev:~/Test/TestMRPT/MiguelAlgaba-KinectSLAM6D-9891798/build$ ./PairwiseAlignmentSteps
    X Error of failed request: BadWindow (invalid Window parameter)
    Major opcode of failed request: 137 (NV-GLX)
    Minor opcode of failed request: 4 ()
    Resource id in failed request: 0x4200002
    Serial number of failed request: 54
    Current serial number in output stream: 54

    stmoon@stmoon-dev:~/Test/TestMRPT/MiguelAlgaba-KinectSLAM6D-9891798/build$ ./PairwiseAlignmentSteps
    PairwiseAlignmentSteps: /usr/include/boost/smart_ptr/shared_ptr.hpp:412: boost::shared_ptr::reference boost::shared_ptr::operator*() const [with T = xn::NodeInfo, boost::shared_ptr::reference = xn::NodeInfo&]: Assertion `px != 0' failed.
    중지됨 (core dumped)

  6. hi Miguel,

    i've watched your youtube upload and am interested to try the code you provided. however it seems the GICP library is no longer existing at the location you gave in the instruction. are there any alternative place to find it? or is it difficult to switch to use GICP given in PCL? any suggestion?

    thanks a lot,

  7. Hi all, I'm working on the next version of the Kinect6DSLAM project. This version will be available during this week and doesn't require the GICP library. This version will use the three implementations of ICP included in the PCL library (ICP, ICP-LM and GICP). I will create a new post when released :).

    Kind regards,
    Miguel Algaba.

    1. i have the same problem. could you tell me where i can download your new version?

  8. Hi, Miguel.

    My name is Rodrigo.
    I saw your work and got interested, too.
    While trying to see the results of your code, I'm having problems compiling the GICP library that your code requires.
    In the previous post, you said that you were working on this code, but using the GICP of PCL instead.
    How is this project going?

    Thank you,

    Rodrigo Teixeira

  9. Hi, Miguel. i work on the same project. i have similar way. but i yet not implement global pose optimisation. i want to use g2o or isam. a do not understand how use it for SBA, not only pose graph optimisation. you use SBA?