Change Log

Version 2.13.4: UNRELEASED

  • Fix docs typos.

  • Upgraded nanoflann to v1.6.0 (fixes an important bug).

Version 2.13.3: Released July 1st, 2024

  • Build system:

    • ROS package.xml: Re-enable the octomap dependency


    • Fix FTBFS of pymrpt for armhf

    • Fix failing unit tests for KLT_response() in non-Intel architectures.

Version 2.13.2: Released June 23rd, 2024

Version 2.13.1: Released June 5th, 2024


    • nanogui: Fix invalidation of iterators/references in widget lists.

    • rnav: fix exception thrown when target is out of the domain of one PTG.

Version 2.13.0: Released May 19th, 2024

  • Changes in apps:

    • SceneViewer3D: it now automatically guesses the min/max clip planes from the scene bounding box.

    • rosbag2rawlog (ROS1): tolerate loss of some sensor observations if /tf has not been yet received instead of aborting conversion.

  • Changes in libraries:


Version 2.12.2: Released April 23rd, 2024

  • Changes in libraries:

    • mrpt_math_grp:

      • Remove deprecated headers:

        • <mrpt/math/lightweight_geom_data_frwds.h>

        • <mrpt/math/lightweight_geom_data.h>

      • Static constructors of mrpt::math::TPoint2D and mrpt::math::TPoint3D marked as [[nodiscard]].

    • mrpt_opengl_grp:

      • Render pipeline is now robust against exceptions thrown in the 3D entities boundingBox determination methods.


Version 2.12.1: Released April 4th, 2024

Version 2.12.0: Released March 17th, 2024

  • Changes in libraries:


    • Fix Debian bug #1066207: FTBFS in latest sid due to undefined declarations in mrpt_xsens C library.

    • Fix FTBFS if using embedded libfreenect due to undefined declarations (usleep).

    • Update embedded version of libfreenect to v0.7.0

    • Fix wrong computation of bounding boxes for mrpt::opengl::CSetOfObjects.

Version 2.11.12: Released March 10th, 2024

Version 2.11.11: Released March 5th, 2024

Version 2.11.10: Released Feb 19th, 2024

  • Changes in libraries:

    • mrpt_maps_grp:

    • mrpt_vision_grp:

      • Remove functions that were problematic with opencv 5: mrpt::vision::findMultipleChessboardsCorners()

  • Others:

    • Fix Debian appstream warnings on mrpt-apps.

    • Fix build against opencv 5.

Version 2.11.9: Released Feb 11th, 2024

Version 2.11.8: Released Feb 7th, 2024

  • Changes in apps:

    • RawLogViewer: Show pointcloud ring, intensity, and time min/max ranges.

    • rawlog-edit: Show dataset duration as formatted time interval.

    • rosbag2rawlog (ROS 1):

      • Added support for XYZIRT point clouds.

      • Finally, implemented automatic detection of sensor poses wrt base_link from tf messages, with an option to manually override sensor poses from YAML config.

  • Changes in libraries:

Version 2.11.7: Released Jan 25th, 2024

  • Changes in apps:

    • carmen2rawlog: Generate valid timestamps.

    • rosbag2rawlog: Add support for sensor_msgs/CompressedImage topics.


Version 2.11.6: Released Jan 13th, 2024

Version 2.11.5: Released Dec 21st, 2023

Version 2.11.4: Released Dec 15th, 2023

Version 2.11.3: Released Nov 21st, 2023

Version 2.11.2: Released Oct 25th, 2023

Version 2.11.1: Released Oct 23rd, 2023

  • Changes in libraries:

    • [mrpt-math]

      • Fix several build warnings introduced in the last version.

    • [mrpt-maps]

      • Voxel maps: A voxel is considered occupied if its occupancy is larger than likelihoodOptions.occupiedThreshold instead of a fixed 0.5.

Version 2.11.0: Released Oct 19th, 2023

Version 2.10.2: Released Oct 5th, 2023

  • Build system:

    • ROS: fix missing deps in package.xml needed for build via Nix.

    • MRPT and OpenCV versions were until now exposed as macros with 3 hexadecimal digits (e.g. 2.4.0 -> 0x240), with a clear limitation of versions greater than 15. Now, both symbols MRPT_VERSION and MRPT_OPENCV_VERSION_NUM use TWO hexadecimal digits per version part, like: 2.10.2 -> 0x010A02, which is much more general and safe for the future. For backwards compatibility, just make sure your user code only uses MRPT_VERSION>=xxx or MRPT_VERSION>xxx comparisons, instead of less-than comparisons (Fixes issue #1285).

  • Changes in apps:

    • rawlog-edit: Add --select-label optional filter to command --remap-timestamps.

  • Changes in libraries:


    • Fix CSparse “C” linkage build error (OSX Clang). PR #1280

    • Fix missing Python wrapping of poses PDF (poses with uncertainty) composition (oplus and ominus) operators. (Closes #1281). PR #1283

    • Fix wrong Jacobian in mrpt::math::CQuaternion::rpy_and_jacobian() for the case of Gimbal Lock. Thanks @giafranchini for reporting!. PR #1290 (Closes #1289)

    • Fix spurious failures in offscreen render unit tests in RISCV64 (Closes #1287).

Version 2.10.1: Released August 10th, 2023

  • Build system:

    • Add cmake flag to disable LTO in pymrpt module.

    • Add -flto=auto to pymrpt so linking is much faster.


    • Fix “FTBFS when binutils-dev is installed but not libiberty-dev” (Debian bug #1041165)

    • pymrpt Debian packaging: triggering of post/pre installation scripts was missing.

Version 2.10.0: Released July 9th, 2023

Version 2.9.4: Released July 1st, 2023

  • Python:

    • pymrpt now ships stub .pyi files, for IDEs to autocomplete MRPT Python programs.

    • maps and multimaps are iterable again (Fixes a regression in v2.9.3)

    • timestamps now has a __str__ operator and to_double() method.

  • Build system:

    • Fix several modern cmake warnings.


    • Fix fail to build with libftdi1 v1.4 (Ubuntu Focal).

Version 2.9.3: Released June 22nd, 2023

  • Python:

    • New module pymrpt.ros_bridge

    • Matrices now have proper conversion and accessor methods in the Python API, including conversion from/to numpy.

    • Reduce build time of pymrpt.

Version 2.9.2: Released June 20th, 2023

Version 2.9.1: Release June 14th, 2023

  • Build system:

    • ROS 2: fix missing explicit dep on rclcpp in package.xml.

Version 2.9.0: Released June 7th, 2023

  • Changes in apps:

  • Changes in libraries:

    • New Python3 module pymrpt with an almost full wrapping of all MRPT classes (via pybind11). Refer to the Python API documentation (pydoc3).

    • Removed the legacy module mrpt::hmtslam and associated applications. Please refer to older MRPT releases if needed.

    • Removed all deprecated functions and headers.

    • [mrpt-ros2bridge]

      • Fix use of obsolete header <cv_bridge.h> in newer ROS distributions.

Version 2.8.1: Released April 17th, 2023

Version 2.8.0: Released April 8th, 2023

Version 2.7.0: Released March 4th, 2023

Version 2.6.0: Released January 12th, 2023

Version 2.5.8: Released January 7th, 2023

Version 2.5.7: Released November 25th, 2022

Version 2.5.6: Released November 12th, 2022

Version 2.5.5: Released October 19th, 2022

  • Changes in applications:

    • ptg-configurator:

      • A maximum trajectory time can be specified now for rendering PTGs.

      • New CLI arguments --ini, --ini-section to automate loading custom INI files.

  • Changes in libraries:

    • [mrpt-containers]

      • mrpt::container::yaml:

        • Clearer error messages when an invalid type conversion is requested.

        • It now does not throw internal exceptions when trying to convert strings to bool.

    • mrpt_imgs_grp

    • [mrpt-math]

      • Correct copyright notes for embedded version of the CSparse sources (PR #1255).

    • [mrpt-typemeta]

      • mrpt::typemeta::TEnumType<> on invalid names, it now prints all valid known enum names in its exception error message.

Version 2.5.4: Released September 24th, 2022

Version 2.5.3: Released September 6th, 2022

  • Changes in libraries:

    • [mrpt-gui]

      • nanogui::mainloop() (and mrpt::gui::CDisplayWindowGUI()) now allows defining a minimum period for calls to user callback functions via a new second optional parameter.

    • [mrpt-obs]

      • Not all CObservation* classes were declared in <mrpt/obs/obs_frwds.h>. Now it is corrected.


    • Fix build on hppa (parisc64) architecture (not supported flag -mtune=native)

Version 2.5.2: Released August 30th, 2022

Version 2.5.1: Released August 4th, 2022

  • Changes in applications:

    • RawLogViewer:

      • Bold points when selecting a sensor in the timeline UI.

  • Changes in libraries:

    • Embedded nanoflann version upgraded to v1.4.3


    • Fix regression: mrpt::opengl::CAssimpModel may fail to resolve texture relative paths.

    • mrpt::opengl::CMesh was implementing texture coordinates flipping (u,v) wrt documented behavior.

    • Fix static_assert() failure in CTicTac when building with latest emscripten clang compiler.

    • Fix regression: yaml parsing boolean values may throw an exception inside std::stoi().

Version 2.5.0: Released July 18th, 2022

Version 2.4.10: Relased June 24th, 2022

  • Changes in applications:

    • ptg-configurator:

      • New menu action to export selected path to matlab/octave script.

    • RawLogViewer:

      • Visual improvements and display of timestamps in local time too.

  • Changes in libraries:

  • Build system

    • Fix ROS version detection; select ROS2 if packages for both versions are found.


Version 2.4.9: Released June 7th, 2022

Version 2.4.8: Released May 26th, 2022

  • Build system:

    • Fixed various ROS-level public dependencies.

Version 2.4.7: Released May 26th, 2022

Version 2.4.6: Released May 24th, 2022

  • Build system

    • Fixed ROS-level public dependencies via package.xml

Version 2.4.5: Released May 22nd, 2022

  • Changes in libraries:

    • New module [mrpt-ros2bridge] to support conversions to/from ROS2 data types and MRPT classes.

  • Build system:

    • Fix detection of dependencies for both ROS1 and ROS2.

Version 2.4.4: Released March 5th, 2022

  • New web-based applications

    • All MRPT modules (including [mrpt-opengl] and mrpt-nanogui) are now compatible with Emscripten so they can run as Javascript + wasm on any modern browser.

  • Changes in applications:

    • RawlogViewer:

      • Browse dialog: Smarter coloring of pointclouds; check all & none buttons for sensor layers.

    • rawlog-edit:

  • Changes in libraries:

  • 3rdparty libraries:

    • Updated libfyaml to v0.7.12.

  • Build system:

    • Allow using libfyaml-dev system package if found.

    • ROS package.xml: update dependencies so all sensors and mrpt-ros1bridge are enabled.

    • Fix detection of ROS1 native *_msgs packages as build dependencies.

    • If ROS environment variables are detected at CMake configure time, unit tests are disabled by default (to reduce build time in build farms).


Version 2.4.3: Released Feb 22nd, 2022

  • Changes in applications:

    • navlog-viewer:

      • The timestamp is now always shown.


Version 2.4.2: Released Feb 3rd, 2022

Version 2.4.1: Released Jan 5th, 2022

Version 2.4.0: Released Dec 12th, 2021

Version 2.3.2: Released Jul 14, 2021

Version 2.3.1: Released May 26th, 2021

Version 2.3.0: Released April 25th, 2021

Version 2.2.0: Released March 10th, 2021

  • Changes in libraries:


    • Fix invalid bounding box returned by octree_getBoundingBox() and mrpt::opengl point cloud classes when empty (Closes #1145).

    • Fix potential infinite recursion in exceptions with stack trace (Closes #1141).

    • Fix potential race conditions accessing waypoint lists in mrpt::nav::CWaypointsNavigator

    • Fix build errors with gcc-11.

Version 2.1.8: Released Feb 23rd, 2021

Version 2.1.7: Released Jan 2nd, 2021


    • Fix bash syntax error in PPA release scripts.

    • Fix Debian bug #978209 : FTBFS: mainwindow.h:218:2: error: reference to Tracker is ambiguous

Version 2.1.6: Released Dec 14th, 2020

  • Changes in libraries:

    • [mrpt-core]

      • Disable the use of BFD for symbols in stack traces by default in Debian builds. It is still used if found in the system and in Ubuntu PPAs.


Version 2.1.5: Released Dec 6th, 2020

Version 2.1.4: Released Nov 8th, 2020

Version 2.1.3: Released Oct 21st, 2020

Version 2.1.2: Released Oct 20th, 2020


Version 2.1.1: Released Oct 19th, 2020

Version 2.1.0: Released Aug 31st, 2020

Version 2.0.4: Released Jun 20, 2020

Version 2.0.3: Released May 13, 2020

  • Changes in applications:

    • navlog-viewer: Can now navigate with keyboard arrows too.

    • RawLogViewer: better 3D pointcloud coloring in observation view and in “scan animation” view.

  • Changes in libraries:

    • [mrpt-maps]

      • Point cloud classes mrpt::maps::CPointsMap : New methods:

        • load2D_from_text_stream()

        • load3D_from_text_stream()

        • save2D_to_text_stream()

        • save3D_to_text_stream()

    • [mrpt-poses]

      • More accurate analytical Jacobians for CPose3DQuatPDFGaussian::inverse() (Closes #1053)

    • BUG FIXES:

      • Incorrect number of points loaded when trying to load point clouds from incorrectly-formatted text files.

      • Fix build error in riscv64 (gcc doesn’t know mtune=native for that arch)

      • Fix spurious unit test failures in mrpt::apps::RawlogGrabberApp due to system load.

Version 2.0.2: Released May 4th, 2020

  • Changes in applications:

    • navlog-viewer: Ported to the new nanogui UI system (fixes random OpenGL context errors in former version).

  • Changes in libraries:

    • mrpt_containers_grp

    • mrtp_hwdrivers_grp

      • Remove support for obsolete XSens MTi 3rd generation devices. Removed class mrpt::hwdrivers::CIMUXSens. 4th+ generation still supported.

    • mrpt_gui_grp

      • Fix mouse-motion rotation glitches if clicking inside a nanogui control.

      • Fix cmake errors building user programs in Windows (missing glfw dependency).

    • mrpt_math_grp

    • mrpt_opengl_grp

    • mrpt_ros1bridge_grp

      • Narrower build and run time dependencies: rosbag -> rosbag_storage

Version 2.0.1: Released April 3rd, 2020

  • Changes in applications:

    • RawLogViewer: new “-l” flag to load datasets with types defined in external projects.

  • Changes in libraries:

Version 2.0.0: Released March 29th, 2020

  • Most important changes:

    • MRPT now requires C++17 to build and use. See this page for a guide to port existing code to MRPT 2.0: Porting code from MRPT 1.{3,4,5} to MRPT 2.*

    • Support for old namespaces mrpt-scanmatching, mrpt-reactivenav is over.

    • Backwards compatible headers for “maps” and “observations” in mrpt::slam are removed. They moved to their own namespaces in MRPT v1.3.0 (Jan 2015).

    • All pointer typedefs are now in their respective classes: FooPtr -> Foo::Ptr

    • Add support for serialization with std::variant

    • PbMap has been factored out into its own repository

    • XML-based database C++ classes have been removed from MRPT.

  • Changes in applications:

    • RawLogViewer:

      • The ICP module now supports Velodyne 3D scans.

    • rawlog-edit:

      • New operation: --de-externalize

    • pf-localization:

      • Odometry is now used also for observation-only rawlogs.

  • Changes in libraries:

    • All otherlibs subdirectories have been renamed to 3rdparty since it is a widespread name used in most projects.

    • mrpt_base_grp => Refactored into several smaller libraries, one per namespace.

    • [mrpt-core] [NEW IN MRPT 2.0.0]

      • Memory alignment of aligned_allocator_cpp11<> is set to 16,32 or 64 depending on whether AVX optimizations are enabled, to be compatible with Eigen.

      • mrpt::cpu::supports() : a new cross-OS CPU feature detection function.

      • mrpt::Clock allows users to select between Realtime or Monotonic sources.

      • Removed custom macro MRPT_UNUSED_PARAM (replaced by c++17 attribute).

      • Add syntactic suggar mrpt::lockHelper()

    • [mrpt-math] [NEW IN MRPT 2.0.0]

      • Removed functions (replaced by C++11/14 standard library):

        • mrpt::math::erf, mrpt::math::erfc, std::isfinite, mrpt::math::std::isnan

        • mrpt::math::make_vector<> => std::vector<>{...} braced initializator

      • Removed the include file: <mrpt/math/jacobians.h>. Replace by <mrpt/math/num_jacobian.h> or individual methods in [mrpt-poses] classes.

    • [mrpt-config] [NEW IN MRPT 2.0.0]

    • [mrpt-gui]

    • [mrpt-img] [NEW IN MRPT 2.0.0]

      • mrpt::img::TCamera distortion parameters now also supports the extra K4,K5,K6 distortion parameters.

    • [mrpt-serialization] [NEW IN MRPT 2.0.0]

    • [mrpt-slam]

      • rbpf-slam: Add support for simplemap continuation.

      • CICP: parameter onlyClosestCorrespondences deleted (always true now).

      • mrpt::slam::CICP API: Simplified and modernized to use only one output parameter, using std::optional.

    • [mrpt-system]

      • functions to get timestamp as local time were removed, since they don’t make sense. All timestamps in MRPT are UTC, and they can be formated as dates in either UTC or local time frames.

      • Added: mrpt::system::WorkerThreadsPool

    • [mrpt-rtti] [NEW IN MRPT 2.0.0]

      • All classes are now registered (and de/serialized) with their full name including namespaces. A backwards-compatible flag has been added to mrpt::rtti::findRegisteredClass().

      • CLASS_INIT() macro for automatic registration of classes has been removed, since it is not well-defined in which order global objects will be initialized. Therefore, manual registration (as already done in registerAllClasses.cpp files) is left as the unique registration system. This fixes warning messages “[mrpt::rtti::registerClass] Warning: Invoked with a nullptr”.

    • [mrpt-nav]

    • [mrpt-comms] [NEW IN MRPT 2.0.0]

      • This new module has been created to hold all serial devices & networking classes, with minimal dependencies.

    • [mrpt-maps]

    • [mrpt-hwdrivers]

      • COpenNI2Generic: is safer in multithreading apps.

      • CHokuyoURG:

        • Rewrite driver to be safer and reduce mem allocs.

        • New parameter scan_interval to decimate scans.

      • VelodyneCalibration: Can now load YAML files, in addition to XML.

      • New sensor state enum value: mrpt::hwdrivers::CGenericSensor::ssUninitialized

      • NMEA GPS parser: now also recognizes all existing talker IDs (GP, GN, GA, etc.)

    • [mrpt-opengl]

      • Update Assimp lib version 4.0.1 -> 4.1.0 (when built as ExternalProject)

      • Rendering engine rewritten to work using OpenGL Core (GLSL 3.3) instead of Legacy fixed functions.

    • [mrpt-obs]

    • [mrpt-poses] [NEW IN MRPT 2.0.0]

    • [mrpt-vision]

      • Removed FASTER methods, and the libCVD 3rd party dependency.


    • Fix reactive navigator inconsistent state if navigation API is called from within rnav callbacks.

    • Fix incorrect evaluation of “ASSERT” formulas in mrpt::nav::CMultiObjectiveMotionOptimizerBase

    • Fix aborting reading from LMS111 scanner on first error.

    • Fix == operator on CPose3D: it now uses an epsilon for comparing the rotation matrices.

    • Fix accessing unaligned POD variables deserializing CObservationGPS (via the new MRPT_READ_POD() macro).

    • Fix segfault in CMetricMap::loadFromSimpleMap() if the provided CMetricMap has empty smart pointers.

    • Fix crash in CGPSInterface when not setting an external mutex.

    • Fix potential crashes in RawLogViewer while editing list of observations.

    • Fix incorrect conversion from quaternion to CPose3D.

Version 1.5.7: Released 24/APR/2019

  • Detailed list of changes:

    • mrpt_base_grp

      • The following features have been finally ported to C++11. User code now requires, at least, C++11 enabled:

        • stlplus-based smart pointers replaced by std::shared_ptr. Backwards compatibility API is maintained.

        • mrpt::system::TThreadHandle now is a wrapper around std::thread.

        • Atomic counters now based on std::atomic. Custom implementation has been removed.

        • stlplus source code has been removed.

      • mrpt::utils::COutputLogger: change log str format from “[name|type|time]” to “[time|type|name]”.

    • [mrpt-graphslam]

      • levenberg-Marquardt graphslam modified to use more stable SE(2) Jacobians.

      • CNetworkOfPoses: read/write format made compatible with G2O EDGE_SE2 types.

    • [mrpt-nav]

      • Add virtual method CAbstractPTGBasedReactive::getHoloMethod()

      • New method CAbstractPTGBasedReactive::enableRethrowNavExceptions() to rethrow exceptions during navigation.

      • Waypoints now have a field speed_ratio which is directly forwarded to the low-level reactive navigator.

    • BUG FIXES:

      • Fix missing “-ldl” linker flag.

      • Fix building against wxWidgets 3.1.1 in Windows (zlib link error).

      • Fix potential segfault in 3D reactive navigator.

Version 1.5.6: Released 24/APR/2018

  • Applications:

    • pf-localization:

      • Odometry is now used also for observation-only rawlogs.

  • [mrpt-hwdrivers]

  • [mrpt-maps]

    • COccupancyGridMap2D: New LIDAR insertion parameters: maxFreenessUpdateCertainty, maxFreenessInvalidRanges.

  • mrpt_reactivenav_grp

    • CAbstractPTGBasedReactive: Added new score holo_stage_eval.


    • circular_buffer: exception made state preserving

Version 1.5.5: (Under development)

Version 1.5.4: Released 31/OCT/2017

  • Detailed list of changes:

    • mrpt_base_grp

      • Fix potential uninitialized value in CRobot2DPoseEstimator::getLatestRobotPose()

      • MRPT_getCompilationDate() returns time as well

    • [mrpt-gui]

    • Build system:

      • Fix MRPTConfig.cmake for system octomap libraries.

      • Fix package-contains-vcs-control-file (.gitingore) Lintian error.

      • Fix compiling without liboctomap-dev in Ubuntu PPA.

    • BUG FIXES:

      • Fix waypoint reactive navigator edge case in which “end event” won’t be issued.

      • Fix waypoint reactive navigator error while doing final aligning (missing and dupplicated nav-end events).

      • Fix aborting reading from LMS111 scanner on first error.

      • Fix waypoint reactive navigator edge case in which “end event” won’t be issued.

      • Fix corrupted pointers in CNetworkOfPoses after copy or move operations.

      • Fix invalid TP-targets generated during reactive navigation.

      • Fix memory leak in reactivenav engine.

      • Fix potential out-of-range access in CObservation3DRangeScan::convertTo2DScan()

Version 1.5.3: Released 13/AUG/2017

  • Detailed list of changes:

    • CMake >=3.1 is now required for use of ExternalProjects.

    • Scripts packaging/prepare_{debian,release}.sh have been refactored and simplified.

    • Removed embedded source code versions of Eigen, assimp and octomap. Downloaded and built as ExternalProjects if not present in the system.

    • Releases will be signed with PGP from now on and posted as binary attachments to GitHub releases.

Version 1.5.2: Released 6/AUG/2017

Version 1.5.1: Released 21/JUN/2017

  • Detailed list of changes:

Version 1.5.0: Released 10-JUN-2018

ReactiveNavigationDemo has been totally rebuilt as a 3D visualizer capable of testing different navigation algorithms and robot kinematics.

  • RawLogViewer :

    • Now displays a textual and graphical representation of all observation timestamps, useful to quickly detect sensor “shortages” or temporary failures.

    • New menu operation: “Edit” -> “Rename selected observation”

    • mrpt::obs::CObservation3DRangeScan pointclouds are now shown in local coordinates wrt to the vehicle/robot, not to the sensor.

rawlog-edit : New flag: --txt-externals

Version 1.4.0: Released 22-APR-2016

gps2rawlog : Application to parse raw dumps of a GPS (GNSS) receiver output.

Version 1.3.2: Released 3-NOV-2015

  • Changes in Apps:

rawlog-edit :

  • New operation: --list-poses

  • --list-images now also works with 3D range scans

Changes in libraries:

Changes in build system:

  • FIND_PACKAGE(MRPT) will return libraries in the var MRPT_LIBRARIES, following the CMake convention. The old variable name MRPT_LIBS will be also returned for backward compatibility.


  • Fix excessive width of paths drawn by CMetricMapBuilderRBPF::drawCurrentEstimationToImage()

  • Fix image distortion: k3 may be ignored. (Thanks to CBaiz)

  • Fix Debian bugs.

Version 1.3.1: Released 18-JUL-2015

  • Changes in apps:

navlog-viewer : Now shows more information on navigation logs.

  • New app icp-slam-live : Real-time ICP-SLAM with a LIDAR sensor.

Changes in libraries:


  • Fix ocasional (false) failure of RANSAC unit tests due to their non-deterministic nature.

  • Fix build error with MSVC 2010 in mrpt-hmtslam (Closes #127).

  • Fixed potential wrong bounding box results in mrpt::maps::CPointsMap::boundingBox() when SSE2 optimization is enabled.

  • mrpt::obs::CObservation6DFeatures : Fixed random crashes related to non-aligned memory in 32bit builds (Fixes #141)

  • Fix Debian bug #786349 on Eigen2 support.

  • mrpt::hwdrivers::CIMUXSens_MT4 : Fix crash in destructor of objects not attached to a physical device.

  • Fix wrong quaternion cross product when target variable is one of the operands. Also affected the += operator of mrpt::poses::CPose3DQuat (Fixes #148)

  • mrpt::hwdrivers::CKinect with libfreenect driver: Fix potential memory corruption.

  • Fix a bug in mrpt::tfest::se3_l2_robust() that led to it returning without trying to find a good consensus solution. It affected the demo app kinect-3d-slam (Fixes #156)

  • Fix wrong feature points in CFeatureExtraction::extractFeaturesKLT() (Fixes #138)

Version 1.3.0: Released 12-JAN-2015

  • Most important changes:

    • Classes in libraries [mrpt-obs] and [mrpt-maps] now belong to new namespaces (mrpt::obs, mrpt::maps) instead of the old mrpt::slam

    • No more using namespace s polute MRPT headers. Errors in user projects missing using namespace XXX that might be formerly masked will now reveal. This is a good thing, though admitedly annoying…

    • New library [mrpt-nav], subsumming the old mrpt_reactivenav_grp.

    • New library [mrpt-tfest], a refactor of the old mrpt_scanmatching_grp.

    • Backwards compatible headers have been provided to ease the transition of user code for all those library changes. Warning messages will be shown recommending deprecated replacements.

  • Detailed list of changes:

    • Lib changes:

      • Clean up of the bad practice of using namespace in public scopes of headers. May lead to user code failing for missing using namespace s which were previously masked.

      • Namespace “slam” deprecated in libraries mrpt-obs and mrpt-maps (used for historical reasons):

        • New namespaces [mrpt-obs] and [mrpt-maps].

        • #include files moved from old paths <mrpt/slam/…> => <mrpt/{obs,maps}/…>

        • Backward compatible headers added in <mrpt/slam/…> until mrpt 2.0.0

      • New library [mrpt-nav], subsumming the old mrpt-reactivenav (mrpt_reactivenav_grp).

      • mrpt_reactivenav_grp is now a meta-library, depending on [mrpt-nav].

      • [mrpt-tfest] : Old library mrpt-scanmatching (mrpt_scanmatching_grp) has been refactored, its API clean-up, and renamed [mrpt-tfest]

      • mrpt_scanmatching_grp is now a meta-library, depending on [mrpt-tfest].

      • These classes have been moved between libs for a more sensible organization:

        • mrpt::slam::CDetectorDoorCrossing ==> mrpt::detectors::CDetectorDoorCrossing

        • mrpt::slam::CPathPlanningMethod & CPathPlanningCircularRobot: [mrpt-slam] ==> [mrpt-nav]

    • Build System / General changes:

      • Many optimizations in function arguments (value vs ref). Forces ABI incompatibility with previous versions, hence the change to a new minor version number.

      • Updated embedded version of Eigen to 3.2.3

      • Kinect: Dropped support for the CL NUI API, which seems discontinued. Alternatives in use are libfreenect and OpenNI2.

      • libfreenect is now detected in the system and used instead of compiling the embedded copy of it.

      • Embedded copy of libfreenect has been updated to (23/oct/2014). It now supports “Kinect for Windows”.

      • More selective linking of .so files to avoid useless dependencies (Fixes #52).

      • (Windows only) MRPT can now be safely built with libusb support (Freenect, Kinect,…) and it will run on systems without libusb installed, by means of /DELAYLOAD linking flags.

      • More unit tests.

    • Changes in classes:

    • BUG FIXES:

Version 1.2.2: Released 12-SEP-2014

  • Changes in apps:

  • New classes:

  • Changes in classes:

    • Consistency in all “laser scan” classes: angular increments between rays are now FOV/(N-1) instead of FOV/N.

    • [mrpt-base]

      • New method mrpt::img::CImage::loadTGA()

      • IMPORTANT : Changed behavior of CSerializable/CObject macros (see bugfix below), introducing the new macros DEFINE_SERIALIZABLE_POST_*. May require changes in user code if serializable classes are defined:

        • Previous version:

          class XXX {
        • Must be changed in this version to:

          class XXX {
    • [mrpt-hwdrivers]

    • [mrpt-maps]

    • [mrpt-opengl]

      • mrpt::opengl::CWxGLCanvasBase (affects all 3D rendering classes): better handling of internal timers for smoother updates while rendering in multithreading apps.

    • [mrpt-srba]

      • New method to recover the global coordinates graph-slam problem for a RBA map: mrpt::srba::RbaEngine::get_global_graphslam_problem() (see example [MRPT]samplessrba-examplessrba-tutorialstutorial-srba-how-to-recover-global-map.cpp)


    • mrpt::img::CImage constructor from a matrix crashed.

    • Unit tests: Named semaphores are not tested anymore if it’s detected that the kernel version doesn’t support them (Fix Debian 758725).

    • mrpt::synch::CSemaphore [Linux]: didn’t call sem_unlink().

    • mrpt::gui::CDisplayWindow3D didn’t implement get/set FOV.

    • Valgrind: Fixed potential unaligned memory access warning in point clouds.

    • Fix build error with AppleClang 5.1 (Closes #71).

    • mrpt::utils::CClientTCPSocket: Use a connection success check that works on all platforms

    • Important bug fixed regarding a missing dynamic_cast<> in smart pointers casting. See above possible implications in user code. properly (Patch by Joe Burmeister).

Version 1.2.1: Released 10-JUL-2014

  • Changes in classes:

  • Build system:

    • Fix compilation of SRBA with DEBUG_GARBAGE_FILL_ALL_NUMS=1

    • Fix de-serialization error in mrpt::reactivenav::CLogFileRecord (and new unit tests added to avoid regressions).

    • Several Debian bugs closed (see packaging/debian/changelog), including build errors in uncommon platforms (MIPS, kFreeBSD, etc.)

Version 1.2.0: Released 25-JUN-2014

  • Most important changes:

    • Public header files (.h) have undergone a serious refactoring to minimize unnecesary dependencies and reduce compile time and memory as much as possible. As a side effect, user code might need to add new #include<> lines. This change justifies the new minor version series 1.2.X.

    • MRPT now cleanly builds in clang and OSX.

    • Support for new camera drivers (OpenNI2, DUO3D).

    • Many bug fixes.

  • Detailed list of changes:

    • Changes in apps:

      • rawlog-edit :

        • New operations: export-odometry-txt, recalc-odometry

        • New flag: rectify-centers-coincide

    • New examples:

      • kitti_dataset2rawlog

    • New classes:

    • Changes in classes:

    • Build system / public API:

      • Fixes to build in OS X - Patch by Randolph Voorhies.

      • Removed most “using namespace” from public headers, as good practice.

      • Refactoring of MRPT headers.

        • <mrpt/utils/stl_extensions.h> has been split into:

          • <mrpt/serialization/stl_serialization.h>

          • <mrpt/containers/circular_buffer.h>

          • <mrpt/utils/list_searchable.h>

          • <mrpt/containers/bimap.h>

          • <mrpt/utils/map_as_vector.h>

          • <mrpt/containers/traits_map.h>

          • <mrpt/serialization/stl_serialization.h>

          • <mrpt/containers/printf_vector.h>

          • <mrpt/containers/stl_containers_utils.h>

          • <mrpt/utils/ci_less.h>

      • Deleted methods and functions:

      • Embedded Eigen updated to version 3.2.1 (commit) (commit)

    • BUG FIXES:

Version 1.1.0: Released 22-FEB-2014

  • New apps:

DifOdometry-Camera. (By Mariano Jaimez Tarifa)

Deleted classes:

  • mrpt::utils::CEvent, which was actually unimplemented (!)

  • mrpt::hwdrivers::CInterfaceNI845x has been deleted. It didn’t offer features enough to justify a class.

New examples:

  • [MRPT]/samples/threadsPipe

  • [MRPT]/samples/NIDAQ_test

  • [MRPT]/openNI2_RGBD_demo (by Mariano Jaimez Tarifa)

  • [MRPT]/openNI2_proximity_demo (by Mariano Jaimez Tarifa)

Build system:

  • Fixed compilation with clang.

  • Fixed building against OpenCV 3.0.0 (GIT head)

  • Updated to the latest nanoflann 1.1.7.

  • Updated to Eigen 3.2.0 - (commit)

  • Binary packages for Windows now include .pdb files to help debugging with Visual Studio.


  • Fixed potential infinity loop in mrpt::math::make_vector<1,T>()

  • Fixed build error with GCC when experimental parallelization is enabled. (commit)

  • mrpt::reactivenav::CReactiveNavigationSystem complained about missing config variables ROBOTMODEL_TAU & ROBOTMODEL_DELAY, which were removed in MRPT 1.0.2 - (commit)

  • Fixed potential mem alignment errors (Eigen’s UnalignedArrayAssert) in SRBA for 32bit builds. (commit)

  • mrpt::topography::geodeticToENU_WGS84() and related functions used a local +Z axis aligned to the line towards the Earth center; now the Z axis points normally to the ellipsoid surface. The difference with the previous behavior is small but may be of a few millimeters for each meter from the reference point. (commit)

  • Potential crash when setting mpPolygon::setPoints() with empty vectors


  • mrpt::reactivenav::CReactiveNavigationSystem and mrpt::reactivenav::CReactiveNavigationSystem3D didn’t obey the “enableConsoleOutput” constructor flag - (commit)

  • mrpt::synch::CSemaphore::waitForSignal() : Fixed error when thread got an external signal (commit)

Version 1.0.2: Released 2-AUG-2013 (SVN 3435)

  • New apps:

ReactiveNav3D-Demo (By Mariano Jaimez Tarifa)

  • Changes in apps:

    • rawlog-edit :

      • New operations: list-timestamps, remap-timestamps, export-2d-scans-txt, export-imu-txt

  • New classes:

    • [mrpt-base]

      • mrpt::poses::CPose3DRotVec is now fully implemented (By Francisco Angel Moreno).

    • [mrpt-opengl]

      • mrpt::opengl::CLight - OpenGL scenes now allow customization of OpenGL lighting. See also new lighting methods in mrpt::opengl::Viewport


  • [mrpt-reactivenav]

    • mrpt::reactivenav::CReactiveNavigationSystem3D - By Mariano Jaimez Tarifa - r3389

New functions:

Changes in classes:

Build system:

  • Updated to nanoflann 1.1.7: ICP is ~5% faster.

  • More unit tests:

    • [mrpt-base] geometry module.


  • CTimeLogger::registerUserMeasure() ignored the enable/disable state of the logger - r3382

  • mrpt-srba: SEGFAULT in 32bit builds due to missing


Version 1.0.1: Released 12-MAY-2013 (SVN 3370)

Version 1.0.0: Released 1-MAR-2013 (SVN 3287)

mrpt::config::CLoadableOptions::dumpToTextStreamstd::ostream::Seek() now supports files larger than 2GB by using uint64_t instead of long (still see issue report for another patch required for MSVC2010) - (Closes issue 39, thanks Robert Schattschneider) - r3042

  • mrpt::typemeta::TTypeName<> moved to its own header <mrpt/typemeta/TTypeName.h> while refactoring <mrpt/serialization/CSerializable.h>


  • mrpt::config::CConfigFileBase::write() now has signatures for “uint32_t” and “uint64_t” in both 32 and 64bit builds, instead of relying of the “size_t” type. This was done to fix build errors in some GCC versions under 32bits.

  • mrpt::poses::CPose2D now caches the cos() and sin() of phi, with a huge performance improvement in most common operations.








mrpt::opengl::COctreePointRenderer::octree_get_graphics_boundingboxes() has a new flag to draw solid boxes at each leaf node - r3033


  • Much code of mrpt::reactivenav classes have undergone a clean-up, slight optimizations and a translation of old Spanish names/comments to English - r2939, r2942, r2958, r3091

mrpt::reactivenav::CParameterizedTrajectoryGenerator::CCollisionGrid now has a more maintainable binary serialization format - r2939

  • mrpt::reactivenav::CParameterizedTrajectoryGenerator::debugDumpInFiles() now also saves text files which can be used to visualize PTGs from MATLAB (see scripts/viewPTG.m) - r3009

    • mrpt::reactivenav::CHolonomicVFF and mrpt::reactivenav::CHolonomicND now have more configurable parameters, loadable from config files. See their documentation.

    • Repulsive forces from obstacles in mrpt::reactivenav::CHolonomicVFF are now automatically normalized wrt the density of the 360deg view of obstacles and forces follow a “1/range” law instead of the old “exp(-range)”.

    • Solved a stability issue in C-S paths, in mrpt::reactivenav::CPTG_DiffDrive_CS (By Mariano Jaimez Tarifa) - r3085


  • mrpt::scanmatching::robustRigidTransformation():

    • Changed behavior not to allow features to appear in duplicated pairings.

    • Added a consistency test to avoid seeding RANSAC with an inconsistent initial model.


  • mrpt::slam::CMetricMapBuilderICP now does not integrate the small pose changes due to odometry and/or relocalization when considering the distance and angle thresholds. This means that fewer map updates are now done for the same ICP-SLAM parameters, which should lead to “less noisy” maps.

New functions:

New examples:

  • octomap_simple

  • ransac-data-association

Build system:

  • Update to nanoflann 1.1.4 - r2937, r3017

  • Update to Eigen 3.1.2 - r3064

  • MRPT’s root “CMakeLists.txt” has undergone a big refactoring and cleanup - r2961

  • Backward compatible “mrpt-core” has been removed as a fake lib for which to search with CMake from user programs - r2961

  • More system libs are detected in Linux (libclang-dev, lib3ds-dev), discarding embedded versions then - r2963 - Closes #17

  • Automatic detection of supported SIMD extensions (SSE*) from CMake (only for Linux OS) - r3013

  • Fixed building with Visual Studio 2012 (MSVC11) - r3017

  • MRPT now allows defining header-only libraries with the define_mrpt_lib_header_only() macro - r3034, r3035

  • More unit tests:

  • Added new documentation page: environment variables.

  • Removed the build flag “MRPT_BACKCOMPATIB_08X”.

  • Fixes for building under Mac OSX: r3181

  • Enable some c++11 features if the compiler supports them - r3273


  • Build: Fixed detection of OpenCV 2.4.2+ installed in the system via CMake config file instead of pkg-config, which seems to be broken. - r3019

  • [mrpt-base] The iterator returned by end() in all MRPT vectors and matrices (based on Eigen) pointed to the last element, not to the (now correct) next position after the last element - r2941

  • [mrpt-base] mrpt::dynamicsize_vector::resize() performed a memory reallocation even if given the current size, due to an inherited behavior from Eigen. It is not the expected behavior, so it has been fixed. - r3003

  • [mrpt-base] Wrong computation of normPDF() values for the multidimensional cases. Closes #46 - r3068

  • [mrpt-base] mrpt::poses::CPoint::asString() confused the 2D and 3D cases (Thanks Cipri!)

  • [mrpt-base] Fixed errors in de-serialization of mrpt::utils::CPointPDFSOG and mrpt::maps::CReflectivityGridMap2D

  • [mrpt-base] mrpt::math::KDTreeCapable::kdTreeRadiusSearch2D() always returned 0 matched.

  • [mrpt-graphs] Fixed bug in RecursiveSpectralPartition (Thanks to Edu!) - r3026

  • [mrpt-hwdrivers] Fixed potential SEGFAULT in mrpt::hwdrivers::CGPSInterface (Thanks K.Miyawaki for reporting)

  • [mrpt-hwdrivers] Fixed communications to LMS 1xx scanners (Thanks Henry! See

  • [mrpt-maps] mrpt::maps::COccupancyGridMap2D::getAs3DObject() returned cells with an occupancy of exactly “0” as transparent - r2957

  • [mrpt-maps] Fixed saving the correct point colors in mrpt::maps::CColouredPointsMap::savePCDFile() (Thanks Mariano!) - r3090

  • [mrpt-maps] In CPointsMap::computeMatchingWith3D. Fixed matching two 3D point clouds as each correspondence was inserted twice into the output vector. (By Paco) - r3162

  • [mrpt-opengl] Fixed a potential bug: after deserializing an object based on a display-list (most of them), it won’t update in the opengl view.

  • [mrpt-reactivenav] Class mrpt::reactivenav::CHolonomicVFF was not exported in Windows DLL’s (Thanks Mariano for noticing!).

  • [mrpt-reactivenav] Fixed wrong computation of obstacles force fields in mrpt::reactivenav::CHolonomicVFF (Thanks Mariano for noticing!) - r2953

  • [mrpt-reactivenav] Precomputed collision grids could be loaded in mrpt::reactivenav::CParameterizedTrajectoryGenerator even for different robot parameters/shape: now it correctly detects such situations and recompute when needed - r2939

Closes #33

  • [mrpt-reactivenav] ND algorithm: Fixed bugs of “last gap is never evaluated” and wrong composition of representative direction for some gaps (By Mariano) - r3056

Version 0.9.6 - (Version 1.0.0-Release_Candidate_4): Released 30-MAY-2012 (SVN 2930)