Mobile Robot Programming Toolkit (MRPT) provides C++ libraries aimed at researchers in mobile robotics and computer vision

Overview

The MRPT project

CI Check clang-format

Gitpod ready-to-code

1. Introduction

Mobile Robot Programming Toolkit (MRPT) provides C++ libraries aimed at researchers in mobile robotics and computer vision. Libraries include SLAM solutions, 3D(6D) geometry, SE(2)/SE(3) Lie groups, probability density functions (pdfs) over points, landmarks, poses and maps, Bayesian inference (Kalman filters, particle filters), image processing, obstacle avoidance, etc. MRPT also provides GUI apps for Stereo camera calibration, dataset inspection, and much more.

2. Resources

3. Install

Packaging status

3.1. Ubuntu

See this PPA for nightly builds from the develop branch, or this one for stable releases.

    sudo add-apt-repository ppa:joseluisblancoc/mrpt   # develop branch
    #sudo add-apt-repository ppa:joseluisblancoc/mrpt-stable   # master (stable releases) branch
    #sudo apt update # Only required for Ubuntu 16.04
    sudo apt install libmrpt-dev mrpt-apps

Supported distributions:

  • Ubuntu 20.04 LTS (Focal), Ubuntu 18.04 LTS (Bionic), 18.10 (Cosmic), 19.10 (Eoan)
  • Ubuntu 16.04 LTS Xenial (EOL: April 2021)
    • Using 16.04 requires installing gcc-7 due to some bugs in gcc-5:

      add-apt-repository ppa:ubuntu-toolchain-r/test
      apt-get update
      apt-get install -y g++-7
      

3.2. Build from sources

Minimum compiler requisites:

  • gcc-7 or newer.
    • Ubuntu 16.04LTS Xenial: Instructions for installing gcc-7 in this version of Ubuntu.
    • Ubuntu 18.04 or newer: default gcc version is ok.
  • clang-4 or newer.
  • Windows: Visual Studio 2017 version 15.3 or newer.
  • cmake >= 3.3 required (>=3.4 for Windows).
  • Eigen >= 3.3 required.

To build in Debian/Ubuntu follow the steps below. See full build docs online for Windows instructions or to learn all the details.

  • Install minimum recommended dependencies:
sudo apt install build-essential pkg-config cmake libwxgtk3.0-dev libwxgtk3.0-gtk3-dev \
libopencv-dev libeigen3-dev libgtest-dev

MRPT builds against OpenCV 2.4.x, 3.x, 4.x, but it is recommended to use 3.0 or later.

  • Recommended: Install additional dependencies to enable most MRPT features (except ROS bridges):
sudo apt install libftdi-dev freeglut3-dev zlib1g-dev libusb-1.0-0-dev \
libudev-dev libfreenect-dev libdc1394-22-dev libavformat-dev libswscale-dev \
libassimp-dev libjpeg-dev   libsuitesparse-dev libpcap-dev liboctomap-dev \
libglfw3-dev
  • Install additional dependencies for ros1bridge using official Ubuntu repositories. If you already have a ROS distribution installed, doing source /opt/ros/xxx/setup.bash is enough, no further packages must be installed.
sudo apt install libcv-bridge-dev libgeometry-msgs-dev libnav-msgs-dev librosbag-storage-dev libroscpp-dev libsensor-msgs-dev libstd-srvs-dev libstereo-msgs-dev libtf2-dev libtf2-msgs-dev libbz2-dev
  • Build with cmake as usual:
mkdir build && cd build
cmake ..
make

3.3. Windows precompiled versions

Executables (.exes and .dlls) and development libraries (.hs and .libs) included:

Nightly built Windows installer

4. License

MRPT is released under the new BSD license.

Stargazers over time

Stargazers over time

Comments
  • Port to C++14

    Port to C++14

    To be done (in 2017? -> yes) when it's safe to assume everyone has a decent C++14 compiler.

    This implies:

    • [x] Deprecate support for Ubuntu precise (and also trusty but only in PPA, for the next item:)
    • [x] Use modern CMake 3.1+ C++ compiler features: target_compile_features, WriteCompilerDetectionHeader, set (CMAKE_CXX_STANDARD 11), etc.
    • [x] Smart pointers: forget about stlplus and move to C++11 smart pointers.
    • [x] Threads: move to std::thread, unless there are strong reasons not to do so.
    • [x] Switch tfest/indiv-compat-decls.h to <functional>
    • [x] CMake: use EXPORT, etc.
    • [x] Direct use of Eigen? Moved to its own issue: #496
    • [x] Semaphore -> http://stackoverflow.com/a/27852868
    • [x] MRPT_OVERRIDE -> override
    • [x] CPipe : avoid deprecated auto_ptr<>
    • [x] Search and rewrite all areas having an #if MRPT_HAS_CXX11
    • [x] Drop mrpt::synch::CAtomicCounter in favor of C++11 std::atomic.
    • [x] Prefer nullptr
    • [x] MRPT_NO_THROWS ==> C++11.
    • [x] Make all destructors noexcept
    • [x] Consider replacing uint32_t enums with correct C++11 typed enums. E.g. in GNSS_BINARY_MSG_DEFINITION_START
    • [x] Review usages of mrpt::utils::delete_safe and consider changing them to use C++11 smart pointers.
    • [x] Foo::Create with make_shared ()
    • [x] std::function typedefs or similar for ZMQ wrappers: See #231
    • [x] Support move semantics (read below)
    • [x] typedefs ==> using
    • [x] Add constexpr to geometry constructors, etc.
    • [x] alignas instead of Eigen align macros
    • [x] Simplify ctors via member initialization in headers, e.g. int a { 0 }; or int a = 0;
    • [x] Replace copy_ptr<>, etc. with simple using ... partial template specializations.
    • [x] Use using FP=... to define functors.
    • [x] Use template<> using ... instead of current aligned STL containers. ==> Nope: it would break existing code, it's not worth (Nov 3, 2017)
    • [x] Replace std::vector of fixed length with std::array. E.g. ReactiveNav classes, etc.
    • [x] Make sure all move ctors and move = operators are declared noexcept. Otherwise, they will not be eligible for "real move".
    • [x] refactor type traits
    • [x] Use weak_ptr for m_frame_tf API in ReactiveNav

    Minimum compilers (see this table)

    • MSVC 15 aka 14.1 (2017)
    • GCC 4.8 (?)
    • CLANG 3.3 (?)

    Minimum CMake version: 3.1

    enhancement 
    opened by jlblancoc 68
  • Build issues when Qt or OpenGL disabled

    Build issues when Qt or OpenGL disabled

    • [x] Qt5 components shouldn't be required. They should be optional and build to succeed if the optional components are not found.
    • [x] Disabling OpenGL should not break the build.

    From: https://gitter.im/MRPT/mrpt

    Alex Giokas @alexge233 Oct 05 04:47 Hi Hunter, I'm trying to build a minimal version of MRPT-1.9.9 (from github) without any GUI stuff. I keep running into the same issue:

    -- Architecture (uname -m): x86_64
    -- Kernel name (uname -s): Linux
    -- Could NOT find OpenGL (missing:  OPENGL_INCLUDE_DIR) 
    -- Could NOT find GLUT (missing:  GLUT_glut_LIBRARY GLUT_INCLUDE_DIR) 
    -- **Warning**: OpenGL and/or GLUT not found! OpenGL capabilities will be disabled.
    --                      OPENGL_gl_LIBRARY: /usr/lib/x86_64-linux-gnu/libGL.so
    --                      OPENGL_glu_LIBRARY: OPENGL_glu_LIBRARY-NOTFOUND
    --                      GLUT_glut_LIBRARY: GLUT_glut_LIBRARY-NOTFOUND
    --                      OPENGL_INCLUDE_DIR: OPENGL_INCLUDE_DIR-NOTFOUND
    -- Could NOT find wxWidgets (missing:  wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS) 
    wxWidgets was not found automatically. Please, set wxWidgets_ROOT_DIR to the lib directory to enable it in MRPT.
    CMake Warning at cmakemodules/script_qt.cmake:10 (find_package):
      By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has
      asked CMake to find a package configuration file provided by "Qt5", but
      CMake did not find one.
    
      Could not find a package configuration file provided by "Qt5" with any of
      the following names:
    
        Qt5Config.cmake
        qt5-config.cmake
    
      Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
      to a directory containing one of the above files.  If "Qt5" provides a
      separate development package or SDK, be sure it has been installed.
    Call Stack (most recent call first):
      CMakeLists.txt:234 (include)
    
    
    -- cotire 1.7.9 loaded.
    And when I build:
    [ 45%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/CGlCanvasBase.cpp.o
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp: In member function ‘void mrpt::gui::CGlCanvasBase::resizeViewport(int, int)’:
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:119:20: error: ‘GLint’ was not declared in this scope
      glViewport(0, 0, (GLint)w, (GLint)h);
                        ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:119:37: error: ‘glViewport’ was not declared in this scope
      glViewport(0, 0, (GLint)w, (GLint)h);
                                         ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp: In member function ‘void mrpt::gui::CGlCanvasBase::clearColors()’:
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:124:65: error: ‘glClearColor’ was not declared in this scope
      glClearColor(clearColorR, clearColorG, clearColorB, clearColorA);
                                                                     ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp: In member function ‘virtual double mrpt::gui::CGlCanvasBase::renderCanvas(int, int)’:
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:260:16: error: ‘GL_ALL_ATTRIB_BITS’ was not declared in this scope
       glPushAttrib(GL_ALL_ATTRIB_BITS);
                    ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:260:34: error: ‘glPushAttrib’ was not declared in this scope
       glPushAttrib(GL_ALL_ATTRIB_BITS);
                                      ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:263:12: error: ‘GL_DEPTH_TEST’ was not declared in this scope
       glEnable(GL_DEPTH_TEST);
                ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:263:25: error: ‘glEnable’ was not declared in this scope
       glEnable(GL_DEPTH_TEST);
                             ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:264:12: error: ‘GL_ALPHA_TEST’ was not declared in this scope
       glEnable(GL_ALPHA_TEST);
                ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:265:12: error: ‘GL_TEXTURE_2D’ was not declared in this scope
       glEnable(GL_TEXTURE_2D);
                ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:269:19: error: ‘GLsizei’ was not declared in this scope
       resizeViewport((GLsizei)width, (GLsizei)height);
                       ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:293:17: error: ‘GL_MODELVIEW’ was not declared in this scope
        glMatrixMode(GL_MODELVIEW);
                     ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:293:29: error: ‘glMatrixMode’ was not declared in this scope
        glMatrixMode(GL_MODELVIEW);
                                 ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:294:19: error: ‘glLoadIdentity’ was not declared in this scope
        glLoadIdentity();
                       ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:307:11: error: ‘glFlush’ was not declared in this scope
       glFlush();
               ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:312:15: error: ‘glPopAttrib’ was not declared in this scope
       glPopAttrib();
                   ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:316:15: error: ‘glPopAttrib’ was not declared in this scope
       glPopAttrib();
                   ^
    /root/mrpt/libs/gui/src/CGlCanvasBase.cpp:325:15: error: ‘glPopAttrib’ was not declared in this scope
       glPopAttrib();
    Do you have a CMAKE macro/flag to turn OpenGL/GUI off?
    

    Hunter Laux @jolting Oct 05 10:38 Did you try USE_QT=false?

    Alex Giokas @alexge233 Oct 06 02:08 I did now. This is weird, Cmake spots no presence of QT, wxWidgets but it still tries to build the GUI library. I've also run into a similar issue: I can compile the library if I install freeglut-dev, but when I build by application which links to mrpt, then I get link errors to assimp.so.4. Where do you default to using gui and opengl, maybe I can hack into it and turn them off.

    Alex Giokas @alexge233 Oct 06 02:14 For example, running with -DUSE_QT=false it still tries to build velodyne (which I don't need) which then fails to link to pthread:

    [ 87%] Building CXX object tests/CMakeFiles/test_mrpt_hwdrivers.dir/__/libs/hwdrivers/src/CVelodyneScanner_unittest.cpp.o
    /usr/bin/ld: CMakeFiles/velodyne-view.dir/velodyne-view_main.cpp.o: undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
    //lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
    collect2: error: ld returned 1 exit status
    apps/velodyne-view/CMakeFiles/velodyne-view.dir/build.make:162: recipe for target 'bin/velodyne-view' failed
    make[2]: *** [bin/velodyne-view] Error 1
    CMakeFiles/Makefile2:2549: recipe for target 'apps/velodyne-view/CMakeFiles/velodyne-view.dir/all' failed
    make[1]: *** [apps/velodyne-view/CMakeFiles/velodyne-view.dir/all] Error 2
    make[1]: *** Waiting for unfinished jobs....
    

    Just fyi, I am willing to contribute if you point me to the right direction, it's the least I can do

    Alex Giokas @alexge233 Oct 06 05:51 This is what I'm trying with right now:

    cmake .. -DDISABLE_OPENGL=ON -DDISABLE_LIBUSB=ON -DDISABLE_OPENNI2=ON -DDISABLE_PCAP=ON -DDISABLE_PCL=ON -DDISABLE_PHIDGETS=ON -DDISABLE_PYTHON_BINDINGS=ON -DUSE_QT=OFF -DDISABLE_ROS=ON
    

    Still, I get:

    - List of MRPT libs/modules to be built (and dependencies):
    -- -----------------------------------------------------------------
    --   mrpt-hwdrivers : mrpt-base;mrpt-comms;mrpt-maps;mrpt-obs;mrpt-gui;mrpt-opengl;mrpt-maps;mrpt-vision;mrpt-graphs 
    --   mrpt-graphs : mrpt-opengl;mrpt-base 
    --   mrpt-base :  
    --   mrpt-vision : mrpt-obs;mrpt-opengl;mrpt-base;mrpt-opengl 
    --   mrpt-tfest : mrpt-base 
    --   mrpt-comms : mrpt-base 
    --   mrpt-bayes : mrpt-base   (header-only)
    --   mrpt-graphslam : mrpt-base;mrpt-graphs;mrpt-gui;mrpt-maps;mrpt-obs;mrpt-opengl;mrpt-slam;mrpt-vision 
    --   mrpt-detectors : mrpt-vision;mrpt-maps;mrpt-gui;mrpt-slam;mrpt-base;mrpt-opengl;mrpt-obs;mrpt-graphs 
    --   mrpt-hmtslam : mrpt-slam;mrpt-graphslam;mrpt-graphs;mrpt-vision;mrpt-maps;mrpt-base;mrpt-obs;mrpt-opengl;mrpt-gui 
    --   mrpt-topography : mrpt-base;mrpt-obs;mrpt-opengl;mrpt-tfest 
    --   mrpt-opengl : mrpt-base 
    --   mrpt-slam : mrpt-bayes;mrpt-graphs;mrpt-vision;mrpt-tfest;mrpt-maps;mrpt-obs;mrpt-opengl;mrpt-base 
    --   mrpt-obs : mrpt-opengl;mrpt-base 
    --   mrpt-kinematics : mrpt-opengl;mrpt-base 
    --   mrpt-maps : mrpt-obs;mrpt-graphs;mrpt-opengl;mrpt-base 
    --   mrpt-gui : mrpt-opengl;mrpt-base 
    --   mrpt-nav : mrpt-graphs;mrpt-maps;mrpt-kinematics;mrpt-graphs;mrpt-obs;mrpt-opengl;mrpt-base
    What I really want is slam, obs, nav, maps and base.
    As it builds, it runs into:
    Scanning dependencies of target test_mrpt_graphs
    [ 48%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/CAboutBoxBase.cpp.o
    [ 48%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/CWxGLCanvasBase.cpp.o
    [ 50%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/CGlCanvasBase.cpp.o
    [ 50%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/CAboutBox_wx.cpp.o
    [ 50%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/CDisplayWindowPlots.cpp.o
    [ 50%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/WxUtils.cpp.o
    [ 50%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/CDisplayWindow.cpp.o
    [ 50%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/registerAllClasses.cpp.o
    [ 50%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/gui-precomp.cpp.o
    [ 50%] Building CXX object libs/gui/CMakeFiles/mrpt-gui.dir/src/CAboutBoxQt.cpp.o
    [ 50%] Building CXX object tests/CMakeFiles/test_mrpt_graphs.dir/test_main.cpp.o
    [ 50%] Building CXX object tests/CMakeFiles/test_mrpt_graphs.dir/__/libs/graphs/src/ScalarFactorGraph_unittest.cpp.o
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp: In member function ‘void mrpt::gui::CGlCanvasBase::resizeViewport(int, int)’:
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:119:20: error: ‘GLint’ was not declared in this scope
      glViewport(0, 0, (GLint)w, (GLint)h);
                        ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:119:37: error: ‘glViewport’ was not declared in this scope
      glViewport(0, 0, (GLint)w, (GLint)h);
                                         ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp: In member function ‘void mrpt::gui::CGlCanvasBase::clearColors()’:
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:124:65: error: ‘glClearColor’ was not declared in this scope
      glClearColor(clearColorR, clearColorG, clearColorB, clearColorA);
                                                                     ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp: In member function ‘virtual double mrpt::gui::CGlCanvasBase::renderCanvas(int, int)’:
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:260:16: error: ‘GL_ALL_ATTRIB_BITS’ was not declared in this scope
       glPushAttrib(GL_ALL_ATTRIB_BITS);
                    ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:260:34: error: ‘glPushAttrib’ was not declared in this scope
       glPushAttrib(GL_ALL_ATTRIB_BITS);
                                      ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:263:12: error: ‘GL_DEPTH_TEST’ was not declared in this scope
       glEnable(GL_DEPTH_TEST);
                ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:263:25: error: ‘glEnable’ was not declared in this scope
       glEnable(GL_DEPTH_TEST);
                             ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:264:12: error: ‘GL_ALPHA_TEST’ was not declared in this scope
       glEnable(GL_ALPHA_TEST);
                ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:265:12: error: ‘GL_TEXTURE_2D’ was not declared in this scope
       glEnable(GL_TEXTURE_2D);
                ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:269:19: error: ‘GLsizei’ was not declared in this scope
       resizeViewport((GLsizei)width, (GLsizei)height);
                       ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:293:17: error: ‘GL_MODELVIEW’ was not declared in this scope
        glMatrixMode(GL_MODELVIEW);
                     ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:293:29: error: ‘glMatrixMode’ was not declared in this scope
        glMatrixMode(GL_MODELVIEW);
                                 ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:294:19: error: ‘glLoadIdentity’ was not declared in this scope
        glLoadIdentity();
                       ^
    /home/zuperath/code/mrpt/libs/gui/src/CGlCanvasBase.cpp:307:11: error: ‘glFlush’ was not declared in this scope
       glFlush();
               ^
    
    opened by jolting 38
  • Segmentation Fault when saving ICP map

    Segmentation Fault when saving ICP map

    I'm using mrpt 1.5 from an Ubuntu PPA.

    The ICP builder exposes some methods which AFAIK allow the CSimpleMap to be saved, however they all SEGFAULT when I try:

    • saveCurrentMapToFile segfaults right away
    • setCurrentMapFile when the builder is destroyed, it tries to save the map file
    • getCurrentlyBuiltMap does not fill the map, which when I try to save segfaults also

    Am I using this wrongly, or is this a bug? Running under gdb and backtracing pinpoints to mrpt::obs::CSensoryFrame::writeToStream which in turn hints towards a dynamic_cast.

    opened by alexge233 30
  • MRPT runs on MacOS10.14

    MRPT runs on MacOS10.14

    Emmm... I have tried to build mrpt on MacOS10.14, but some requirements can not be fullfilled.

    Is there any solutions for running MRPT on MacOS? Or does anyone try to fix it? I would like to join this fixed work.

    opened by alibenD 24
  • Fix static builds on Linux

    Fix static builds on Linux

    Hello, I complied mrpt 1.5.6 on my Ubuntu Xenial using the source file in the branch. However, when I run the test "test_mrpt_base" I get a failure message: [ FAILED ] Matrices.SerializeCMatrixD [ FAILED ] SerializeTestBase.WriteReadToMem.

    Similarly, when I run "test_mrpt_slam", MRPT throws an exception and I get a failure message. [ FAILED ] MonteCarlo2D.RunSampleDataset.

    Please can someone tell me if there are fixes for these because I am new to mrpt.

    Thank you!

    wontfix 
    opened by JohnDuke259 21
  • Octomap include problem

    Octomap include problem

    When building current master, if there is ros-octomap installed, cmake script finds octomap directory correctly. However, when compiling, there is an error octomap/octomap.h: No such file or directory: build log When uninstalling ros-octomap and using internal one, there is no problem. Built with internal octomap, MRPT installs and then there is an error when building catkin workspace with MRPT included: build log Installing ros-octomap between building MRPT and catkin workspace solves compilation problem but looks like a piece of duct tape.

    Isn't it related to #574?

    Sincerely, Borys.

    opened by spsancti 20
  • Graphslam devel2

    Graphslam devel2

    Changed apps/libraries:

    • mrpt-graphslam
    • mrpt-graphs
    • mrpt-base

    Notes on Pull-Request

    • Current PR improves in the robustness of mrpt-graphslam lib (numerous bug fixes) and also adds support for implementing multi-robot graphSLAM - see mrpt_graphslam_2d for an example of such usage
    • Add support for implementing 3D graphSLAM using CGraphSlamEngine.
    • mrpt-graphs is a standard lib (not header-only)
    • Instead of a single function that plots a graph, add separate classes for visualizing graphs produced by a single or by multiple agents - refer to CMRVisualizer.h, CVisualizer.h.
    • Add compile-time traits for determining whether a PosePDF class holds the uncertainty in covariance or information based form - see pose_traits
    • Modify the look of github PR template file

    For an more in-depth analysis of the proposed changes refer to the commit messages.


    I acknowledge to have:

    (Notify: @MRPT/owners )

    opened by bergercookie 20
  • Errors building with MinGW 4.9  (Was: The Eigen/Array header does no longer exist in Eigen3)

    Errors building with MinGW 4.9 (Was: The Eigen/Array header does no longer exist in Eigen3)

    Hi all, I am trying to compile mrpt 1.3.2 under Windows and MinGW32. The CMake configuration has the EIGEN_USE_EMBEDDED_VERSION checked, and my make command is [mingw32-make -f makefile CXXFLAGS="-std=gnu++11" SHARED=1 UNICODE=1 BUILD=release]

    The build explodes compiling bayes/CParticleFilter.cpp, and yields the error message "The Eigen/Array header does no longer exist in Eigen3. All that functionality has moved to Eigen/Core."

    What am I doing wrong (besides building under Windows ;) )?

    opened by prpsymbol 19
  • merge JSON-capable serialization methods

    merge JSON-capable serialization methods

    By @rachit173 for GSOC 2018. See #783

    Additional tasks to be done before merging:

    • [x] Helper macros
    • [x] Add serialization for CPose* classes.
    • [x] Add serialization for, at least, some CObservation* classes. Moved to #820
    • [x] Add real unit tests?
    • [x] Add examples + update dox docs with the 2 ways to use JSON serialization ("raw" and "opaque").
    opened by jlblancoc 17
  • MinGW x64 building issue

    MinGW x64 building issue

    Hello!

    I got issue compiling mrpt wint MinGW64:

    cmake .. -G "MSYS Makefiles" - ok mingw32-make: `$ make Scanning dependencies of target EP_octomap [ 0%] Creating directories for 'EP_octomap' [ 0%] Performing download step (download, verify and extract) for 'EP_octomap' -- Downloading... dst='D:/Programming/libs/mrpt-1.5.6/build/EP_octomap-prefix/src/devel.zip' timeout='none' -- Using src='https://github.com/MRPT/octomap/archive/devel.zip' -- Downloading... done -- extracting... src='D:/Programming/libs/mrpt-1.5.6/build/EP_octomap-prefix/src/devel.zip' dst='D:/Programming/libs/mrpt-1.5.6/build/otherlibs/octomap' -- extracting... [tar xfz] -- extracting... [analysis] -- extracting... [rename] -- extracting... [clean up] -- extracting... done [ 0%] No patch step for 'EP_octomap' [ 0%] No update step for 'EP_octomap' [ 1%] Performing configure step for 'EP_octomap' -- The C compiler identification is GNU 7.2.0 -- The CXX compiler identification is GNU 7.2.0 -- Check for working C compiler: D:/Programming/tools/msys2/mingw64/bin/gcc.exe -- Check for working C compiler: D:/Programming/tools/msys2/mingw64/bin/gcc.exe -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: D:/Programming/tools/msys2/mingw64/bin/g++.exe -- Check for working CXX compiler: D:/Programming/tools/msys2/mingw64/bin/g++.exe -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done

    -- octomap building as Release -- Found Doxygen: C:/Program Files/doxygen/bin/doxygen.exe (found version "1.8.10") found components: doxygen missing components: dot

    -- Compile octomap using: make -- Install octomap using: make install -- (be sure to set the correct CMAKE_INSTALL_PREFIX before) -- Compile API-documentation using: make docs

    -- Configuring done -- Generating done -- Build files have been written to: D:/Programming/libs/mrpt-1.5.6/build/EP_octomap-prefix/src/EP_octomap-build [ 1%] Performing build step for 'EP_octomap' Scanning dependencies of target octomath-static [ 7%] Building CXX object octomap/src/math/CMakeFiles/octomath-static.dir/Vector3.cpp.obj [ 14%] Building CXX object octomap/src/math/CMakeFiles/octomath-static.dir/Quaternion.cpp.obj [ 21%] Building CXX object octomap/src/math/CMakeFiles/octomath-static.dir/Pose6D.cpp.obj [ 28%] Linking CXX static library /D/Programming/libs/mrpt-1.5.6/build/otherlibs/octomap/lib/liboctomath.a [ 28%] Built target octomath-static Scanning dependencies of target octomap-static [ 35%] Building CXX object octomap/src/CMakeFiles/octomap-static.dir/AbstractOcTree.cpp.obj [ 42%] Building CXX object octomap/src/CMakeFiles/octomap-static.dir/AbstractOccupancyOcTree.cpp.obj [ 50%] Building CXX object octomap/src/CMakeFiles/octomap-static.dir/Pointcloud.cpp.obj [ 57%] Building CXX object octomap/src/CMakeFiles/octomap-static.dir/ScanGraph.cpp.obj [ 64%] Building CXX object octomap/src/CMakeFiles/octomap-static.dir/CountingOcTree.cpp.obj [ 71%] Building CXX object octomap/src/CMakeFiles/octomap-static.dir/OcTree.cpp.obj [ 78%] Building CXX object octomap/src/CMakeFiles/octomap-static.dir/OcTreeNode.cpp.obj [ 85%] Building CXX object octomap/src/CMakeFiles/octomap-static.dir/OcTreeStamped.cpp.obj [ 92%] Building CXX object octomap/src/CMakeFiles/octomap-static.dir/ColorOcTree.cpp.obj [100%] Linking CXX static library /D/Programming/libs/mrpt-1.5.6/build/otherlibs/octomap/lib/liboctomap.a [100%] Built target octomap-static [ 1%] No install step for 'EP_octomap' [ 1%] No test step for 'EP_octomap' [ 1%] Completed 'EP_octomap' [ 1%] Built target EP_octomap Scanning dependencies of target DocumentationFiles [ 1%] Built target DocumentationFiles [ 1%] Generating C unity source libs/base/cotire/mrpt-base_C_unity.c [ 2%] Generating CXX prefix source libs/base/cotire/mrpt-base_CXX_prefix.cxx [ 2%] Generating CXX prefix header libs/base/cotire/mrpt-base_CXX_prefix.hxx [ 2%] Building CXX precompiled header libs/base/cotire/mrpt-base_CXX_prefix.hxx.gch [ 2%] Generating C prefix source libs/base/cotire/mrpt-base_C_prefix.c [ 2%] Generating C prefix header libs/base/cotire/mrpt-base_C_prefix.h [ 2%] Building C precompiled header libs/base/cotire/mrpt-base_C_prefix.h.gch Scanning dependencies of target mrpt-base [ 2%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/bayes/CParticleFilter.cpp.obj [ 2%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/bayes/CParticleFilterCapable.cpp.obj [ 2%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/compress/zip.cpp.obj [ 2%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/math/CAtan2LookUpTable.cpp.obj [ 2%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/math/CHistogram.cpp.obj [ 2%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/math/CMatrix.cpp.obj [ 2%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/math/CMatrixB.cpp.obj [ 2%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/math/CMatrixD.cpp.obj [ 3%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/math/CPolygon.cpp.obj [ 3%] Building CXX object libs/base/CMakeFiles/mrpt-base.dir/src/math/CRuntimeCompiledExpression.cpp.obj D:/Programming/tools/msys2/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/../../../../x86_64-w64-mingw32/bin/as.exe: CMakeFiles/mrpt-base.dir/src/math/CRuntimeCompiledExpression.cpp.obj: too many sections (49113) D:\Programming\tools\msys2\tmp\ccPuqE9n.s: Assembler messages: D:\Programming\tools\msys2\tmp\ccPuqE9n.s: Fatal error: can't write 19 bytes to section .text of CMakeFiles/mrpt-base.dir/src/math/CRuntimeCompiledExpression.cpp.obj because: 'File too big' D:/Programming/tools/msys2/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/../../../../x86_64-w64-mingw32/bin/as.exe: CMakeFiles/mrpt-base.dir/src/math/CRuntimeCompiledExpression.cpp.obj: too many sections (49113) D:\Programming\tools\msys2\tmp\ccPuqE9n.s: Fatal error: can't close CMakeFiles/mrpt-base.dir/src/math/CRuntimeCompiledExpression.cpp.obj: File too big make[2]: *** [libs/base/CMakeFiles/mrpt-base.dir/build.make:325: libs/base/CMakeFiles/mrpt-base.dir/src/math/CRuntimeCompiledExpression.cpp.obj] Error 1 make[1]: *** [CMakeFiles/Makefile2:332: libs/base/CMakeFiles/mrpt-base.dir/all] Error 2 make: *** [Makefile:152: all] Error 2 `

    opened by JekaS178RUS 17
  • particle filters: use values vs. pointers; enable C++17 in MRPT

    particle filters: use values vs. pointers; enable C++17 in MRPT

    • CProbabilityParticle now has a "storage" template param.
    • SE(2) / SE(2) particle filters now use value storage instead of smart pointers for robot poses, saving huge numbers of memory allocations.
    • MRPT now requires C++17 to build. See minimum compilers in updated README.md

    Pending before merging:

    • [x] Take a look at what's wrong with the python bindings. I fixed many error there but the remaining one, I can't localize the problem origin...
    opened by jlblancoc 17
  • When configuring the running environment of pl-slam, install mrpt software, and then this error occurs

    When configuring the running environment of pl-slam, install mrpt software, and then this error occurs

    When configuring the running environment of pl-slam, install mrpt software, and then this error occurs。Mrpt version is https://github.com/MRPT/mrpt/tree/0c3d605c3cbf5f2ffb8137089e43ebdae5a55de3

    error: /usr/bin/ld: /usr/local/wxWidgets/lib/libwx_baseu-3.1.a(baselib_threadinfo.o): relocation R_X86_64_TPOFF32 against _ZZN12_GLOBAL__N_117GetThisThreadInfoEvE16s_thisThreadInfo' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: /usr/local/wxWidgets/lib/libwx_baseu-3.1.a(baselib_utilsunx.o): relocation R_X86_64_PC32 against symbol_ZN16wxAppConsoleBase14ms_appInstanceE' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: The last link failed: wrong value collect2: error: ld returned 1 exit status libs/base/CMakeFiles/mrpt-base.dir/build.make:3638: recipe for target 'lib/libmrpt-base.so.1.5.0' failed make[2]: *** [lib/libmrpt-base.so.1.5.0] Error 1 CMakeFiles/Makefile2:259: recipe for target 'libs/base/CMakeFiles/mrpt-base.dir/all' failed make[1]: *** [libs/base/CMakeFiles/mrpt-base.dir/all] Error 2 Makefile:151: recipe for target 'all' failed make: *** [all] Error 2

    ubuntu 18.04 wxWidgets3.1.0 opencv3.1.0 gcc7.5.0

    opened by xqs-c 2
  • pymrpt.so already registered; second conversion method ignored.

    pymrpt.so already registered; second conversion method ignored.

    on noetic if I link the pymrpt.so so that it is in the pythonpath many warnings are generated. The library does work.

    $ ln -s /opt/ros/noetic/lib/x86_64-linux-gnu/python3.8/dist-packages/pymrpt.so /usr/local/lib/python3.8/dist-packages/pymrpt.so
    
    $ python
    Python 3.8.10 (default, Mar 15 2022, 12:22:08) 
    [GCC 9.4.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pymrpt
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::poses::CPose2D> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::poses::CPosePDF> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::poses::CPosePDFGaussian> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::poses::CPosePDFParticles> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::poses::CPose3D> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::poses::CPose3DPDF> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::poses::CPose3DPDFGaussian> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::poses::CPose3DPDFParticles> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::obs::CAction> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::obs::CActionRobotMovement2D> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::obs::CObservation> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::obs::CObservationOdometry> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::obs::CObservationRange> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::obs::CObservation2DRangeScan> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::obs::CObservationBearingRange> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::obs::CSensoryFrame> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::maps::TMapGenericParams> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::maps::CMetricMap> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::maps::COccupancyGridMap2D> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::maps::CPointsMap> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::maps::CSimplePointsMap> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::maps::CSimpleMap> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::maps::CMultiMetricMap> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::maps::CMultiMetricMapPDF> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::opengl::CRenderizable> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::opengl::CGridPlaneXY> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::opengl::CSetOfObjects> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::opengl::CSetOfLines> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::opengl::CEllipsoid3D> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::opengl::CEllipsoid2D> already registered; second conversion method ignored.
    <frozen importlib._bootstrap>:219: RuntimeWarning: to-Python converter for std::shared_ptr<mrpt::opengl::COpenGLScene> already registered; second conversion method ignored.
    
    
    opened by rdinoff 1
  • Kinect v2 calibration using Camera calibration app

    Kinect v2 calibration using Camera calibration app

    Hi, I am trying to calibrate Kinect V2 camera. Does the camera-calib app supports the Kinvect V2. I was using kinect v2 with libfreenect2. I tried the app but it doesnt detect the Kinect V2.

    Thanks.

    opened by nrasulnrasul 0
  • benchmarkingImageFeatures_GUI segfault - needs refactor (Was: rawlog files not readable)

    benchmarkingImageFeatures_GUI segfault - needs refactor (Was: rawlog files not readable)

    Some rawlog files are not readable anymore.

    1. download rawlog_rgbd_dataset_freiburg1_360.tgz from https://www.mrpt.org/Collection_of_Kinect_RGBD_datasets_with_ground_truth_CVPR_TUM_2011
    2. run the benchmarkingImageFeatures_GUI example with that log file

    This will print the errors:

    QImage::scaled: Image is a null image
    QImage::scaled: Image is a null image
    QImage::scaled: Image is a null image
    Exception message: Assert condition failed: rows > 0 && cols > 0
    ==== MRPT exception backtrace ====
    [1] ../libs/obs/src/CObservation3DRangeScan.cpp:447: [virtual void mrpt::obs::CObservation3DRangeScan::serializeFrom(mrpt::serialization::CArchive&, uint8_t)] Assert condition failed: rows > 0 && cols > 0
    [0] ../libs/serialization/src/CArchive.cpp:462: [void mrpt::serialization::CArchive::internal_ReadObject(mrpt::serialization::CSerializable*, const string&, bool, int8_t)] Exception while parsing typed object 'CObservation3DRangeScan' from stream!
    

    and crash once trying to read the next image.

    The first image might be indeed empty, but this used to work with older MRPT versions. It would be very useful to retain backward compatibility with log files.

    bug 
    opened by christian-rauch 6
  • can't compile with mingw64

    can't compile with mingw64

    Hi

    I tried to compile MRPT on windows with mingw64: I have created a build directory next to the CMakeLists.txt file

    cd build
    cmake-gui ..
    configure
    generate
    make
    

    I have directly the following error: Building CXX object libs/core/CMakeFiles/core.dir/src/WorkerThreadsPool.cpp.obj In function 'void mySetThreadName(const string&, std::thread&)': error: 'SetThreadDescription' was not declared in this scope SetThreadDescription(theThread.native_handle(), wName);

    I can't find any reference to that issue anywhere.

    Help would be appreciated. Regards

    opened by Dharmesh946 8
Releases(2.5.7)
  • 2.5.7(Nov 25, 2022)

    Version 2.5.7: Released November 25th, 2022

    • Changes in applications:
      • navlog-viewer:
        • It now shows custom visualization artifacts stored in the new field mrpt::nav::CLogFileRecord::visuals.
    • Changes in libraries:
      • Upgrade embedded version of nanoflann to current master (2022-Nov-18).
      • \ref mrpt_maps_grp
        • mrpt::math::KDTreeCapable updated to build against nanoflann v1.5.0
      • \ref mrpt_system_grp
        • New method mrpt::system::COutputLogger::setVerbosityLevelForCallbacks()
    • General build changes:
      • clang-format: enforce and upgraded to use clang-format-11.
    • BUG FIXES:
      • Fix crash if calling mrpt::opengl::CSetOfObjects::getByName() with null pointers as children objects.
      • Fix opengl resources leak if mrpt::opengl::CRenderizableShaderTexturedTriangles instance is destroyed from a thread different than the one used to render.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.5.7.tar.gz(41.62 MB)
    mrpt-2.5.7.tar.gz.asc(833 bytes)
    mrpt-2.5.7.zip(46.48 MB)
    mrpt-release-2.5.7.exe(106.46 MB)
  • 2.5.6(Nov 12, 2022)

    Version 2.5.6: Released November 12th, 2022

    • Changes in libraries:
      • \ref mrpt_containers_grp
        • New template class mrpt::containers::PerThreadDataHolder
      • \ref mrpt_opengl_grp
        • The rendering pipeline (mrpt::opengl::enqueueForRendering) is now more optimized to cull earlier, achieving faster rendering of large and complex 3D scenes.
        • All opengl shaders, objects, and renderers are now multithread capable, including rendering several FBOs in different threads.
        • mrpt::opengl::CFBORender constructor now takes a parameters struct making it much more configurable.
        • mrpt::opengl::CAssimpModel now supports (de)serializing, storing itself in the Assimp binary format (assbin).
        • New opengl shaders: one set for light-enabled objects and another for objects without diffuse reflection effects (to avoid conditionals inside the GPU shader programs).
      • \ref mrpt_gui_grp
        • mrpt::gui OpenGL canvas windows and components no longer have a background color property. It is now always handled by the mrpt::opengl::COpenGLViewport to avoid duplicated functionalities.
      • \ref mrpt_system_grp
        • These functions are now thread-safe if built in a system with the localtime_r() variant of localtime():
          • mrpt::system::timestampToParts()
          • mrpt::system::dateTimeLocalToString()
          • mrpt::system::timeLocalToString()
    • Build system:
      • Provide CMAKE_BUILD_TYPES SanitizeThread and SanitizeAddress.
      • Fix build against latest (Debian/sid) libglut-dev.
    • BUG FIXES:
      • Fix build against latest version of EMSDK (Emscripten).
      • Fix wrong scaling of samples in mrpt::random::CRandomGenerator::drawGaussianMultivariate() and mrpt::random::CRandomGenerator::drawGaussianMultivariateMany()
      • mrpt::opengl::CSetOfTexturedTriangles was not automatically registered in the mrpt::rtti system
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.5.6.tar.gz(41.62 MB)
    mrpt-2.5.6.tar.gz.asc(833 bytes)
    mrpt-2.5.6.zip(46.48 MB)
    mrpt-release-2.5.6.exe(106.80 MB)
  • 2.5.5(Oct 19, 2022)

    Version 2.5.5: Released October 19th, 2022

    • Changes in applications:
      • prg-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:
      • \ref mrpt_containers_grp
        • 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.
      • \ref mrpt_imgs_grp
        • mrpt::img::CImage::filledRectangle() is now implemented using the fast opencv draw function instead of the slow mrpt::img::CCanvas default base implementation.
      • \ref mrpt_math_grp
        • Correct copyright notes for embedded version of the CSparse sources (PR #1255).
      • \ref mrpt_typemeta_grp
        • mrpt::typemeta::TEnumType<> on invalid names, it now prints all valid known enum names in its exception error message.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.5.5.tar.gz(41.59 MB)
    mrpt-2.5.5.tar.gz.asc(833 bytes)
    mrpt-2.5.5.zip(46.45 MB)
    mrpt-release-2.5.5.exe(106.69 MB)
  • 2.5.4(Sep 24, 2022)

    Version 2.5.4: Released September 24th, 2022

    • Changes in libraries:
      • \ref mrpt_opengl_grp
        • mrpt::opengl::CFBORender is now faster, using a LUT for converting from logarithmic to linear depth values.
      • \ref mrpt_ros1bridge_grp
        • Implemented missing mrpt::ros1bridge::toROS() for point clouds.
      • \ref mrpt_ros2bridge_grp
        • Implemented missing mrpt::ros2bridge::toROS() for point clouds.
    • BUG FIXES:
      • Fix build on hppa for parisc architecture too (not supported flag -mtune=native)
      • nanogui: Fix mismatched memory allocator/free in serialization code.
      • Fix potential segfault in RawLogViewer while building the tree view.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.5.4.tar.gz(40.09 MB)
    mrpt-2.5.4.tar.gz.asc(833 bytes)
    mrpt-2.5.4.zip(43.44 MB)
    mrpt-release-2.5.4.exe(105.17 MB)
  • 2.5.3(Sep 6, 2022)

    Version 2.5.3: Released September 6th, 2022

    • Changes in libraries:
      • \ref mrpt_gui_grp
        • nanogui::mainloop() (and mrpt::gui::CDisplayWindowGUI()) now allows defining a minimum period for calls to user callback functions via a new second optional parameter.
      • \ref mrpt_obs_grp
        • Not all CObservation* classes were declared in <mrpt/obs/obs_frwds.h>. Now it is corrected.
    • BUG FIXES:
      • Fix build on hppa (parisc64) architecture (not supported flag -mtune=native)
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.5.3.tar.gz(40.06 MB)
    mrpt-2.5.3.tar.gz.asc(833 bytes)
    mrpt-2.5.3.zip(43.42 MB)
    mrpt-release-2.5.3.exe(104.88 MB)
  • 2.5.2(Aug 30, 2022)

    Version 2.5.2: Released August 30th, 2022

    • BUG FIXES:
      • mrpt::math::MatrixBase::eig_symmetric() now is ensured not to return negative eigenvalues due to numerical innacuracies in some platforms (i386).
      • mrpt::maps::COccupancyGridMap2D::getAsPointCloud() did not return the outermost cells as obstacles.
      • Fix unit test errors when compiling with LTO (Closes Debian bug #1015550)
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.5.2.tar.gz(40.05 MB)
    mrpt-2.5.2.tar.gz.asc(833 bytes)
    mrpt-2.5.2.zip(43.42 MB)
    mrpt-release-2.5.2.exe(104.88 MB)
  • 2.5.1(Aug 3, 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
    • BUG FIXES:
      • 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().
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.5.1.tar.gz(40.02 MB)
    mrpt-2.5.1.tar.gz.asc(833 bytes)
    mrpt-2.5.1.zip(43.36 MB)
    mrpt-release-2.5.1.exe(104.83 MB)
  • 2.5.0(Jul 17, 2022)

    Version 2.5.0: Released July 18th, 2022

    • Changes in applications:
      • RawLogViewer:
        • New time-line UI for quickly navigating and selecting observations.
      • New application:
        • ros-map-yaml2mrpt: CLI tool to import ROS map_server maps into MRPT formats.
    • Changes in libraries:
      • \ref mrpt_containers_grp
        • New functions mrpt::containers::find_closest() and mrpt::containers::find_closest_with_tolerance().
        • mrpt::containers::yaml now also keeps information about line and column positions for each token, see mrpt::containers::yaml::node_t::marks
      • \ref mrpt_core_grp
        • mrpt::Clock::toDouble() now returns 0 for default-constructed (invalid) time_point.
      • \ref mrpt_opengl_grp
        • mrpt::opengl::CMesh supports having (x,y) limits with maxCoord<minCoord for flipped elevation and image meshes.
        • New flag mrpt::opengl::CAssimpModel::LoadFlags::IgnoreMaterialColor for mrpt::opengl::CAssimpModel::loadScene()
        • A new rendering mode for default no-perspective transformations. See mrpt::opengl::CCamera::setNoProjection()
      • \ref mrpt_poses_grp
        • Add correct displacement covariance calculation between two poses with cross-correlation via new method mrpt::poses::CPose3DQuatPDFGaussian::inverseCompositionCrossCorrelation() (Closes #1242)
      • \ref mrpt_system_grp
        • New funtions mrpt::system::toAbsolutePath(), mrpt::system::pathJoin()
        • Most functions in \ref filesystem ported to C++17 std::filesystem
      • \ref mrpt_tfest_grp
        • New method TMatchingPairList::overallSquareError() for SE(3) poses (CPose3D).
    • Deprecations:
      • The following macros, which were already deprecated, have been removed: ASSERT_BELOW_, ASSERT_ABOVE_(), ASSERT_BELOWEQ_(), ASSERT_ABOVEEQ_()
    • Build system:
      • Update fallback embedded version of octomap to v1.9.6
    • BUG FIXES:
      • FIX: OpenGL API errors if several CWxGLCanvasBase instances are updated simultaneously in the same program.
      • mrpt::opengl::COpenGLViewport would throw if an uninitialized image is passed for rendering in "image mode".
      • mrpt::system::formatTimeInterval() reported an incorrect number of milliseconds.
      • Fix detection of Boost python module.
      • Calling mrpt::opengl::CRenderizable::setColor_u8() did not force a regeneration of opengl buffer objects in all cases.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.5.0.tar.gz(40.01 MB)
    mrpt-2.5.0.tar.gz.asc(833 bytes)
    mrpt-2.5.0.zip(43.37 MB)
    mrpt-release-2.5.0.exe(104.82 MB)
  • 2.4.10(Jul 1, 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:
      • \ref mrpt_poses_grp
        • Adds covariance mapping to SE(3) for GTSAM (Closes #1229)
      • \ref mrpt_ros1bridge_grp
        • Import mrptToROSLoggerCallback() from the now obsolete mrpt_bridge package into mrpt::ros1bridge.
    • Build system
      • Fix ROS version detection; select ROS2 if packages for both versions are found.
    • BUG FIXES:
      • Fix mrpt-comms rare timeout in busy build farms.
      • mrpt::ros1bridge and mrpt::ros2bridge were not correctly exporting the fromROS() function for LaserScan messages.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.4.10.tar.gz(39.99 MB)
    mrpt-2.4.10.tar.gz.asc(833 bytes)
    mrpt-2.4.10.zip(43.36 MB)
    mrpt-release-2.4.10.exe(104.74 MB)
  • 2.4.9(Jun 7, 2022)

    Version 2.4.9: Released June 7th, 2022

    • Changes in libraries
      • \ref mrpt_math_grp
        • new method mrpt::math::TPlane::signedDistance()
      • \ref mrpt_ros2bridge_grp
        • Fixed missing find_package() in module config.cmake file.
    • BUG FIXES:
      • Fix wrong handling of cmake exported built-in version of Eigen3 (Closes #1235)
      • Fix pymrpt Python3 module location (Closes #1232)
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.4.9.tar.gz(39.99 MB)
    mrpt-2.4.9.tar.gz.asc(833 bytes)
    mrpt-2.4.9.zip(43.34 MB)
    mrpt-release-2.4.9.exe(104.73 MB)
  • 2.4.8(May 26, 2022)

  • 2.4.7(May 26, 2022)

    Version 2.4.7: Released May 26th, 2022

    • Examples:
      • gui_depth_camera_distortion: Added option to change distortion model.
    • Build system
      • Fixed ROS-level public dependency on suitesparse.
      • Enable tinyxml2 for ROS builds.
    • Changes in libraries:
      • \ref mrpt_maps_grp
        • Method mrpt::maps::CPointsMap::addFrom() removed, it overlapped with mrpt::maps::CPointsMap::insertAnotherMap()
        • New optional parameter in mrpt::maps::CPointsMap::insertAnotherMap()
      • \ref mrpt_obs_grp
        • New option mrpt::obs::T3DPointsProjectionParams::onlyPointsWithIntensityColor
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.4.7.tar.gz(39.99 MB)
    mrpt-2.4.7.tar.gz.asc(833 bytes)
    mrpt-2.4.7.zip(43.35 MB)
  • 2.4.5(May 22, 2022)

  • 2.4.4(May 5, 2022)

    Version 2.4.4: Released March 5th, 2022

    • New web-based applications
      • All MRPT modules (including \ref mrpt_opengl_grp 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:
        • Operation --camera-params now also works for mrpt::obs::CObservation3DRangeScan observations.
        • New operation --describe.
    • Changes in libraries:
      • \ref mrpt_poses_grp
        • mrpt::poses::CPose3DQuat: Remove use of obsolete base class std::iterator.
    • 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.
    • BUG FIXES:
      • ASSERT_NEAR_() did not work correctly when arguments were expressions with operators.
      • Fixed incorrect parsing of strings with whitespaces in mrpt::from_string<>() when converting to std::string
      • mrpt::obs::CObservation3DRangeScan::get_unproj_lut() was ignoring the depth camera distortion model and always assumed plumb_bob.
      • mrpt::ros1bridge converter for IMU observations now correctly handles missing IMU readings (ROS convention of "-1" in covariance).
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.4.4.tar.gz(39.69 MB)
    mrpt-2.4.4.tar.gz.asc(833 bytes)
    mrpt-2.4.4.zip(43.01 MB)
  • 2.4.3(Feb 23, 2022)

    Version 2.4.3: Released Feb 22nd, 2022

    • Changes in applications:
      • navlog-viewer:
        • The timestamp is now always shown.
    • BUG FIXES:
      • Do not run offscreen rendering unit tests in MIPS arch, since they seem to fail in autobuilders.
      • mrpt::vision::checkerBoardCameraCalibration() did not return the distortion model (so if parameters are printed, it would look like no distortion at all!).
      • mrpt::gui::CDisplayWindowGUI::createManagedSubWindow() created the subwindows helper UI on top of the other user windows. It now remains on the back of other windows.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.4.3.tar.gz(39.68 MB)
    mrpt-2.4.3.tar.gz.asc(833 bytes)
    mrpt-2.4.3.zip(43.00 MB)
    mrpt-release-2.4.3.exe(104.38 MB)
  • 2.4.2(Feb 3, 2022)

    Version 2.4.2: Released Feb 3rd, 2022

    • Changes in libraries:
      • \ref mrpt_containers_grp
        • mrpt::container::yaml::operator(size_t) added, conditionally to size_t being a different type than uint64_t and such (Fixes build errors on OSX).
      • \ref mrpt_core_grp
        • mrpt::callStackBackTrace() (and exception backtraces) now only use BFD to solve for line numbers in DEBUG builds, to avoid the large delay in processing each exception.
        • New method mrpt::WorkerThreadsPool::size().
      • \ref mrpt_expr_grp
        • ExprTk updated to latest version.
      • \ref mrpt_gui_grp
        • GUI windows can now have custom icons via mrpt::gui::CDisplayWindowGUI::setIcon() or mrpt::gui::CDisplayWindowGUI::setIconFromData()
      • \ref mrpt_img_grp
        • New static method mrpt::img::CImage::LoadFromFile()
      • \ref mrpt_math_grp
        • Vector and matrix classes: add [[nodiscard]] to static "constructor" methods to avoid mistakes.
      • \ref mrpt_opengl_grp
        • mrpt::opengl::CFBORender now does not rely on GLUT to create opengl contexts, but on EGL.
      • \ref mrpt_typemeta_grp
        • Add syntactic sugar function mrpt::typemeta::str2enum<>().
    • BUG FIXES:
      • mrpt::opengl::CFBORender did only render the main viewport, it now processes all of them.
      • Fix FTBFS with ffmpeg 5.0 (Debian Bug #1004585)
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.4.2.tar.gz(39.68 MB)
    mrpt-2.4.2.tar.gz.asc(833 bytes)
    mrpt-2.4.2.zip(43.00 MB)
    mrpt-release-2.4.2.exe(104.36 MB)
  • 2.4.1(Jan 5, 2022)

    Version 2.4.1: Released Jan 5th, 2022

    • Changes in build system:
    • Changes in applications:
      • rawlog-edit:
        • New flag --externals-filename-format
      • RawlogViewer:
        • Better handling of exceptions failing to load delayed-load images.
    • Changes in libraries:
      • \ref mrpt_core_grp
        • Remove unused header <mrpt/3rdparty/llvm/propagate_const.h>.
      • \ref mrpt_graphs_grp
        • mrpt::graphs::CDijkstra now has an optional maximum topological search range.
      • \ref mrpt_math_grp
        • New geometry functions:
          • mrpt::math::intersect(const TPolygon2D& subject, const TPolygon2D& clipping)
          • mrpt::math::signedArea(const mrpt::math::TPolygon2D& p)
      • \ref mrpt_obs_grp
        • New function mrpt::obs::format_externals_filename()
      • Embedded copy of nanoflann: upgraded to v1.4.0.
    • BUG FIXES:
      • Fix bug in mrpt::math::getAngle(const TPlane&, const TPlane&).
      • Fix exception if mrpt::opengl::CFBORender is used with setProjectiveFromPinhole() camera models.
      • Fix CMake Warning at cmakemodules/FindFilesystem.cmake and failure to detect the std::filesystem feature in some g++ versions.
      • Fix numerical innacuracies with planar bounding boxes, fixed via new epsilon parameter in mrpt::math::TBoundingBox::intersection()
      • Fix sluggish rendering in opengl+wxWidgets controls (e.g. within RawLogViewer, etc.).
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.4.1.exe(104.31 MB)
    mrpt-2.4.1.tar.gz(39.60 MB)
    mrpt-2.4.1.tar.gz.asc(833 bytes)
    mrpt-2.4.1.zip(42.91 MB)
    mrpt-release-2.4.1.exe(104.32 MB)
  • 2.4.0(Dec 12, 2021)

    Version 2.4.0: Released Dec 12th, 2021

    • Changes in build system:
      • Most important CMake variables now are prefixed with MRPT_ to avoid name collisions if using MRPT as a git submodule in a larger project.
      • GNUInstallDirs directories are now always honored when installing.
    • Changes in applications:
      • ptg-configurator:
        • Show selected PTG path output motion command.
      • navlog-viewer:
        • New checkbox to enforce 2D orthogonal view, which is now the default view.
      • rawlog-edit
        • The --info command now also shows the first and last timestamp in a rawlog.
      • RawLogViewer:
        • Show mrpt::obs::CObservationPointCloud 3D point clouds in main window and scan animation dialog.
        • Displays timestamp as the user tracks the timeline scroll bar.
      • rosbag2rawlog:
        • PointCloud2 messages are now only converted to mrpt::obs::CObservationRotatingScan is this latter class is specified in the YAML file.
    • Changes in libraries:
      • \ref mrpt_apps_grp
        • Application rawlog-edit is now available as the C++ class mrpt::apps::RawlogEditApp
      • \ref mrpt_containers_grp
        • New methods mrpt::containers::bimap::erase_by_key(),mrpt::containers::bimap::erase_by_value()
        • mrpt::containers::vector_with_small_size_optimization has new methods at() and push_back() for a smoother transition from STL containers.
        • mrpt::containers::yaml and libfyaml updated to latest version (more memory efficient parser).
      • \ref mrpt_core_grp
        • New base virtual interface class mrpt::Stringifyable unifying the asString() method already offered by many MRPT classes.
      • \ref mrpt_img_grp
        • [API change] mrpt::img::TCamera methods changed to allow defining fish-eye camera models too.
      • \ref mrpt_io_grp
        • GZIP compressed streams now also support open and append. See new mrpt::io::CFileGZOutputStream::open() signature.
        • New enum mrpt::io::OpenMode for clearer-to-read code.
        • Moved lazy-load operations to mrpt::io::setLazyLoadPathBase() and companion functions, since the older names mentioned images but this setting actually affects other sensors too.
      • \ref mrpt_math_grp
        • New function mrpt::math::xcorr()
        • New header <mrpt/math/gtsam_wrappers.h>, see \ref mrpt_gtsam_wrappers
        • New method mrpt::math::TBoundingBox::containsPoint()
      • \ref mrpt_maps_grp
        • Optimization: mrpt::maps::CPointsMap::insertAnotherMap() avoids matrix multiplication if SE(3) identity is passed as insertion pose.
        • [API change] mrpt::maps::CSimpleMap docs improved, API modernized and made const-correct including returned shared_ptr instances as ConstPtr where applicable.
      • \ref mrpt_nav_grp
        • mrpt::nav::CParameterizedTrajectoryGenerator::initTPObstacleSingle() now always initializes to the maximum free distance, instead of saturating free space when heading to a target waypoint.
        • [API change] mrpt::nav::CParameterizedTrajectoryGenerator::getPathPose() had two overloaded signatures, which is not recommended being one of them a virtual method. Only the return-by-value is left.
      • \ref mrpt_obs_grp
        • Fix const-correctness of mrpt::obs::CObservation::unload() for consistency with load().
        • [API change] Replaced all API signatures taking an optional mrpt::poses::CPose3D as pointers (with default=nullptr) with a modern std::optional<>.
      • \ref mrpt_opengl_grp
        • New method mrpt::opengl::COpenGLViewport::setClonedCameraFrom()
        • mrpt::opengl::CFBORender changes:
          • More consistent naming of API methods: mrpt::opengl::CFBORender::render_RGB().
          • New method to render into a depth image mrpt::opengl::CFBORender::render_RGBD().
        • mrpt::opengl::CCamera::setProjectiveFromPinhole() now allows defining a camera by means of a pinhole model.
        • New class mrpt::opengl::COpenGLFramebuffer, used to refactor mrpt::opengl::CFBORender
        • New methods to control face culling:
          • mrpt::opengl::CRenderizableShaderTriangles::cullFaces()
          • mrpt::opengl::CRenderizableShaderTexturedTriangles::cullFaces()
        • Remove specular light effects in the default shaders, to fix buggy behavior.
        • [API change] New mrpt::opengl::Visualizable interface replaces former getAs3DObject() in all mrpt::maps and mrpt::poses classes with an uniform API, avoiding shared_ptr if possible.
        • mrpt::opengl::CTexturedPlane now more efficiently renders as plain triangles if no texture has been assigned.
        • Custom user OpenGL shaders can now be defined and installed to replace MRPT defaults. Refer to example: \ref opengl_custom_shaders_demo
      • \ref mrpt_poses_grp
        • New function mrpt::poses::sensor_poses_from_yaml()
        • New header <mrpt/poses/gtsam_wrappers.h>, see \ref mrpt_gtsam_wrappers
      • \ref mrpt_random_grp
        • New function mrpt::random::partial_shuffle()
        • New function mrpt::random::portable_uniform_distribution()
      • \ref mrpt_serialization_grp
        • Implemented serialization of mrpt::containers::bimap in the new header #include <mrpt/serialization/bimap_serialization.h>.
        • Enums can now be binary-serialized too via >> / << streaming operators into an mrpt::serialization::CArchive.
        • mrpt::serialization::CArchive and mrpt::io::CStreams now have virtual methods to provide human-friendly self-descriptions, useful to debug which stream causes an error in serialization.
      • \ref mrpt_system_grp
        • Backwards-compatible change: New function mrpt::system::InvalidTimeStamp() used now inside the macro INVALID_TIMESTAMP, so the macro always returns a const reference instead of returning by value.
        • New function mrpt::system::consoleColorAndStyle()
        • mrpt::system::intervalFormat() now generates more human-friendly strings for time periods larger than 1 second (e.g. "1 year, 3 days, 8 hours").
      • \ref mrpt_tfest_grp
        • [API change] mrpt::tfest::TMatchingPair members are now called "local" vs "global" instead of the former, more confusing, "this" vs "other".
      • \ref mrpt_vision_grp
        • SIFT descriptors can now be evaluated for arbitrary keypoint coordinates.
    • BUG FIXES:
      • Fix potential race conditions in:
        • mrpt::rtti class registry
        • The global mrpt::random::getRandomGenerator()
        • mrpt::typemeta::TEnumTypeFiller
      • Image-mode was not serialized in mrpt::opengl::COpenGLViewport
      • nanogui: avoid potential divide by zero.
      • mrpt::comms::CClientTCPSocket crashed if socket handle >=1024 in Linux (Closes #1157)
      • Fix error generating and parsing TUM RGBD dataset rawlog files.
      • Fix regresion in mrpt::opengl::CFBORender::render() throwing an exception if the input image was empty.
      • Fix incorrect handling of negative, fractional viewport sizes in mrpt::opengl::COpenGLViewport
      • Fix: Should not scale velocity commands when in slow down, in CAbstractPTGBasedReactive::generate_vel_cmd() (Closes #1175).
      • mrpt::system::CDirectoryExplorer did not fill in correct absolute paths if a relative path was passed as starting directory to scan.
      • Fix mrpt::obs::CSensoryFrame::operator+=() did not perform what it was supposed to do.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.4.0.exe(103.63 MB)
    mrpt-2.4.0.tar.gz(39.53 MB)
    mrpt-2.4.0.tar.gz.asc(833 bytes)
    mrpt-2.4.0.zip(42.83 MB)
    mrpt-release-2.4.0.exe(103.63 MB)
  • 2.3.2(Jul 15, 2021)

    Version 2.3.2: Released Jul 14, 2021

    • Changes in applications:
      • RawLogViewer:
        • More tree view icons.
        • "Play video" window now also shows timestamps.
      • SceneViewer3D:
        • New command-line flag --imgdir to define the base path for lazy-load images.
      • rawlog-edit:
        • New operation --export-txt exploiting the new export-to-txt API in mrpt::obs::CObservation
      • navlog-viewer:
        • New UI tools to manually pick and export selected PTG selections to a training YAML file.
    • Changes in libraries:
      • \ref mrpt_containers_grp
        • YAML macros MCP_LOAD_OPT(), MCP_LOAD_REQ(), and MCP_SAVE() now also support reading and writing enums directly as YAML, transparently converting numerical values to/from their symbolic names.
      • \ref mrpt_core_grp
        • Added C++14 helper templates mrpt::uint_select_by_bytecount_t and mrpt::int_select_by_bytecount_t
      • \ref mrpt_gui_grp
        • mrpt::gui::CDisplayWindowGUI: improved API to allow multiple callback handlers, and to report exceptions in them.
        • New 3D navigation key binding: SHIFT+scroll wheel, for fast up/down pure vertical motion of the camera point.
      • \ref mrpt_img_grp
        • mrpt::img::CImage::loadFromFile() now avoids memory allocations if there was already an image in memory with the same size.
      • \ref mrpt_obs_grp
        • mrpt::obs::CObservation now has a common API to export datasets to TXT/CSV files, see methods exportTxtSupported(), exportTxtHeader(), exportTxtDataRow(). It has been implemented in all suitable observation classes.
        • mrpt::obs::CObservationImage::unload() defaulted to doing nothing. It now correctly unloads lazy-load images.
      • \ref mrpt_poses_grp
        • New methods mrpt::math::TTwist2D::rotated() and mrpt::math::TTwist3D::rotated()
      • \ref mrpt_system_grp
        • mrpt::system::CTimeLogger:
          • Include custom name in underlying mrpt::system::COutputLogger name.
          • Fix all valgrind/helgrind warning messages.
        • New functions mrpt::system::firstNLines() and mrpt::system::nthOccurrence()
    • BUG FIXES:
      • mrpt::img::CImage::isEmpty() should return false for delay-load images.
      • Fix build error with GCC 8 in mrpt/containers/yaml.h.
      • Fix exception rendering empty point clouds due to invalid bounding box.
      • Fix broken 2D plots rendering in Ubuntu 20.04 (and probably other systems), via an update in mpWindow to properly use wxAutoBufferedPaintDC.
      • mrpt::img::CImage::getPixelDepth() should force loading lazy load images.
      • Fixed wrong rendering of different textures within the same opengl shader program.
      • Fixed potential crashes inside BFD if using BFD and calling mrpt::callStackBackTrace() from several parallel threads.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.3.2.tar.gz(39.33 MB)
    mrpt-2.3.2.tar.gz.asc(833 bytes)
    mrpt-2.3.2.zip(42.32 MB)
    mrpt-release-2.3.2.exe(102.02 MB)
  • 2.3.1(May 26, 2021)

    Version 2.3.1: Released May 26th, 2021

    • General cmake scripts:
      • find_package(mrpt-xxx) is now much faster.
    • Changes in applications:
      • RawLogViewer:
        • Browse scans window now has a check-box list to show/hide individual sensors.
      • SceneViewer3D:
        • Graceful failure when loading a corrupted 3Dscene file.
    • Changes in libraries:
      • \ref mrpt_core_grp
        • Removed mrpt::reverseBytesInPlace(long double) for it not being portable.
      • \ref mrpt_containers_grp
        • New environment variable MRPT_YAML_PARSER_VERBOSE controlling mrpt::containers::yaml
      • \ref mrpt_hwdrivers_grp
        • New argument to pass custom ffmpeg options to mrpt::hwdrivers::CFFMPEG_InputStream::openURL(). New default is to prefer stream over TCP for more reliable IP cameras reading.
        • mrpt::hwdrivers::CHokuyoURG now has a parameter for between-data communications timeout (comms_between_timeout_ms).
      • \ref mrpt_gui_grp
        • mrpt::gui::CDisplayWindowGUI new methods to minimize/restore subwindows.
      • \ref mrpt_math_grp
        • New method mrpt::math::TLine3D::closestPointTo()
        • New methods mrpt::math::TPose3D::translation(), mrpt::math::TPose2D::translation().
      • \ref mrpt_obs_grp
        • New mrpt::obs::CActionCollection::insert() overload for smart pointers.
        • New method mrpt::obs::CObservation2DRangeScan::getScanAngle() and clarify docs on class members.
        • New class mrpt::obs::CObservation3DScene.
        • mrpt::obs::CObservationIMU now uses std::array instead of std::vector (faster due to less dynamic memory).
      • \ref mrpt_opengl_grp
        • Deprecate mrpt::opengl::COpenGLScene::dumpListOfObjects() in favor of new mrpt::opengl::COpenGLScene::asYAML()
        • New method mrpt::opengl::CSimpleLine::setLineCoords() accepting mrpt::math::TPoint3D (older signature deprecated).
      • \ref mrpt_system_grp
        • New return-by-value signature for mrpt::system::CDirectoryExplorer::explore(), older version deprecated.
        • mrpt::system::extractFileDirectory() returns "." instead of an empty string for filenames without any explicit full path.
    • BUG FIXES:
      • Fix wrong formatting of empty string values (not null values) in mrpt::containers::yaml.
      • Fix exception loading old datasets with stereo observations, via a new argument in mrpt::img::CImage::makeSureImageIsLoaded()
      • Fix unhandled deserialization of v2 of mrpt::opengl::CPlanarLaserScan
      • Fix build errors with MinGW.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.3.1.tar.gz(39.04 MB)
    mrpt-2.3.1.tar.gz.asc(833 bytes)
    mrpt-2.3.1.zip(42.03 MB)
    mrpt-release-2.3.1.exe(101.62 MB)
  • Windows-nightly-builds(May 5, 2021)

  • 2.3.0(Apr 25, 2021)

    Version 2.3.0: Released April 25th, 2021

    • General build changes:
      • CMake >=3.8.0 is now required to ensure proper handling of dependencies compile options.
    • Changes in applications:
      • ptg-configurator: target now also comprises a heading angle.
      • RawLogViewer:
        • New tab with CObservation3DRangeScan visualization options.
        • All icons have been updated for a more modern look.
    • Changes in libraries:
      • \ref mrpt_containers_grp
        • add method mrpt::containers::map_as_vector::at()
      • \ref mrpt_graphs_grp
        • mrpt::graphs::CDijkstra:
          • now no longer requires a field nodes in input graphs.
          • add convenient return by value getTreeGraph()
          • Deprecate mrpt::graphs::CDijkstra::Visitor virtual class API in favor of new C++11 std::function-based mrpt::graphs::CDijkstra::visitor_t
      • \ref mrpt_math_grp
        • Removed redundant mrpt::math::pointIntoPolygon2D() -> mrpt::math::TPolygon2D::contains()
        • Removed redundant mrpt::math::SegmentsIntersection() -> mrpt::math::intersect(mrpt::math::TSegment2D,mrpt::math::TSegment2D)
        • Removed redundant mrpt::math::distancePointToPolygon2D() -> TPolygon2D::distance()
        • Moved mrpt::math::minDistBetweenLines() -> mrpt::math::TLine3D::distance()
      • \ref mrpt_opengl_grp
        • mrpt::opengl::CAssimpModel now uses a texture cache to speed up and reduce RAM usage if loading the same textures in different objects.
      • \ref mrpt_system_grp
        • New function mrpt::system::progress()
    • BUG FIXES:
      • ptg-configurator: Fix failure to list existing PTGs, due to RTTI unregistered name "CParameterizedTrajectoryGenerator".
      • mrpt::opengl::COpenGLViewport::get3DRayForPixelCoord() returned wrong pixel coordinates when in orthogonal projection mode.
      • mrpt::opengl::CArrow: Fix wrong normal calculation (wrong rendering reflections).
      • mrpt::opengl::CPointCloud::markAllPointsAsNew() and mrpt::opengl::CPointCloudColoured::markAllPointsAsNew() did not refresh OpenGL buffers.
      • mrpt::nav::CPTG_DiffDrive_CollisionGridBased::getPathTwist() returned much larger velocities than the actual values.
      • Fix broken Debian dependencies for libmrpt-vision-lgpl (Closes Debian bug #986071).
      • mrpt::maps::CPointsMap::load2Dor3D_from_text_stream() for 2D maps left uninitialized values in z. Fixed to load zeros instead.
      • Fixed crash in mrpt::vision::checkerBoardCameraCalibration() causing segfault in the camera-calib app.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.3.0.tar.gz(38.31 MB)
    mrpt-2.3.0.tar.gz.asc(833 bytes)
    mrpt-2.3.0.zip(41.30 MB)
  • 2.2.0(Mar 10, 2021)

    Version 2.2.0: Released March 10th, 2021

    • Changes in libraries:
      • \ref mrpt_vision_grp
        • Remove all obsolete SIFTOptions.implementation values. OpenCV is now the only possibility.
      • \ref mrpt_nav_grp
        • mrpt::nav::TWaypoint now uses std::optional instead of magic numbers in some fields.
        • mrpt::nav::TWaypoint now has std::any fields to hold user-given extra data.
    • BUG FIXES:
      • 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.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.2.0.tar.gz(35.64 MB)
    mrpt-2.2.0.tar.gz.asc(833 bytes)
    mrpt-2.2.0.zip(38.59 MB)
  • 2.1.8(Feb 28, 2021)

    Version 2.1.8: Released Feb 23rd, 2021

    • Changes in applications:
      • RawLogViewer:
        • "Scan animation" window: now also shows the timestamp of observations.
      • camera-calib and kinect-stereo-calib:
        • New option to save camera calibration results as YAML files.
      • navlog-viewer:
        • New option to enable orthogonal view.
    • General build changes:
      • Fix excessive alignment in aarch64 (32->16 bytes).
      • clang-format: enforce and upgraded to use clang-format-10.
      • Fix building against the non-legacy GL library (Linux).
      • nanoflann source code is no longer included as a copy: it will be used as the system library libnanoflann-dev, or as a git submodule if the former is not found.
    • Changes in libraries:
      • \ref mrpt_containers_grp
        • New YAML to/from matrix methods: mrpt::containers::yaml::FromMatrix(), mrpt::containers::yaml::toMatrix()
      • \ref mrpt_core_grp
        • New CMake build flags MRPT_EXCEPTIONS_WITH_CALL_STACK to optionally disable reporting call stacks upon exceptions and MRPT_EXCEPTIONS_CALL_STACK_MAX_DEPTH to set their maximum depth.
      • \ref mrpt_hwdrivers_grp
        • mrpt::hwdrivers::CHokuyoURG now has a parameter for communications timeout (comms_timeout_ms).
      • \ref mrpt_math_grp
        • New class mrpt::math::TBoundingBox
      • \ref mrpt_maps_grp
        • Const correctness fixed in all mrpt::maps::CMetricMap classes.
      • \ref mrpt_opengl_grp
        • mrpt::opengl::CFrustum() new constructor from mrpt::img::TCamera()
      • \ref mrpt_poses_grp
        • mrpt::poses::CPose3D: Add more syntactic sugger static constructors.
      • \ref mrpt_slam_grp
        • mrpt::slam::TMonteCarloLocalizationParams map parameters are now shared pointers instead of plain pointers for safer code.
    • BUG FIXES:
      • Log *_THROTTLE_* macros (e.g. MRPT_LOG_THROTTLE_DEBUG) did not report the message the first time they were called, which seems a safer behavior.
      • Reverted changed behavior: mrpt::config::CConfigFile did not throw if a non-existing file was passed to its constructor, but it throws in MRPT 2.1.{0-7}.
      • Fix build against opencv 2.4.x (version in Ubuntu Xenial 16.04).
      • Fixed: CHokuyoURG::initialize() won't report sensor status as ssError if it fails to communicate with the sensor, incorrectly leaving it as ssInitializing instead.
      • Fixed: mrpt::opengl::CTexturedPlane::setPlaneCorners() did not check for incorrect null width or height.
      • Fixed: mrpt::opengl textured objects leaking memory (Closes #1136).
      • Fix bug in parsing CARMEN logs: mrpt::obs::carmen_log_parse_line() returned all scan ranges marked as "invalid".
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.1.8.tar.gz(35.65 MB)
    mrpt-2.1.8.tar.gz.asc(833 bytes)
    mrpt-2.1.8.zip(38.60 MB)
  • 2.1.7(Jan 2, 2021)

  • 2.1.6(Dec 14, 2020)

  • 2.1.5(Dec 7, 2020)

    Version 2.1.5: Released Dec 6th, 2020

    • Changes in libraries:
      • \ref mrpt_containers_grp
        • Both mrpt::containers::CDynamicGrid and mrpt::containers::CDynamicGrid3D are now compatible with range-based for loops, and also have a data() method.
      • \ref mrpt_core_grp
        • Added mrpt::LockHelper::unlock()
        • Added mrpt::Clock::nowDouble()
        • New method mrpt::WorkerThreadsPool::name()
        • Function mrpt::system::callStackBackTrace() moved to mrpt::callStackBackTrace()
        • mrpt::callStackBackTrace() now uses BFD to find out line numbers if debug info (at least -g1) is available.
        • Stacked exceptions changes:
          • Line numbers will be now shown if built with debug info (>= -g1).
          • Exceptions in STL or any other 3rd-party library will be also reported with exact call point line number, as long as MRPT_START/MRPT_END is used in the user function.
          • No further need to call mrpt::exception_to_str(), just calling what() will return a detailed stack backtrace.
          • New function mrpt::winerror2str()
      • \ref mrpt_gui_grp
        • New method mrpt::gui::CGlCanvasBase::CamaraParams::FromCamera()
      • \ref mrpt_math_grp
        • Added missing method for consistent API across pose classes: mrpt::math::TPose3D::operator+()
      • \ref mrpt_system_grp
        • mrpt::system::COutputLogger::writeLogToFile() will now save all messages despite the runtime log verbosity level.
    • BUG FIXES:
      • Fix error rendering an opengl scene with mrpt::opengl::CCamera objects in it.
      • rawlog-edit silently ignored when more than one operation was requested.
      • Fix FTBFS against libjsoncpp 1.9.4 (Closes #1118)
      • Fix AppStream errors and warnings in Debian Tracker.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.1.5.tar.gz(35.65 MB)
    mrpt-2.1.5.tar.gz.asc(833 bytes)
    mrpt-2.1.5.zip(38.60 MB)
  • 2.1.4(Nov 9, 2020)

    Version 2.1.4: Released Nov 8th, 2020

    • Changes in libraries:
      • \ref mrpt_core_grp
        • mrpt::format() is no longer a template but a function, to use GCC automated printf-format warnings.
      • \ref mrpt_containers_grp
        • mrpt::containers::yaml avoids throwing internal exceptions as part of regular valid conversions, and better support and report of out-of-range integers.
      • \ref mrpt_math_grp
        • mrpt::math::linspace() added overload returning by value.
      • \ref mrpt_random_grp
        • mrpt::random::CRandomGenerator::permuteVector() added overload returning by value.
      • \ref mrpt_tfest_grp
        • mrpt::tfest::TMatchingPairListTempl::saveAsMATLABScript() now draws 3D correspondences too.
        • RANSAC method mrpt::tfest::se3_l2_ransac() now uses more correct SO(3) metric for angular distance threshold instead of independent yaw/pitch/roll angles.
      • BUG FIXES:
        • Fix wrong Debian dependencies of libmrpt-dev
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.1.4.tar.gz(35.66 MB)
    mrpt-2.1.4.tar.gz.asc(833 bytes)
    mrpt-2.1.4.zip(38.59 MB)
  • 2.1.3(Oct 21, 2020)

    Version 2.1.3: Released Oct 21st, 2020

    • Changes in libraries:
      • \ref mrpt_config_grp
        • Refactor parsing functionality as new exposed method mrpt::config::config_parser()
      • \ref mrpt_gui_grp
        • mrpt::gui::CDisplayWindowGUI subwindows control UI automatically keep tracks of focused subwindows.
    • Build system:
      • Support for ccache, enabled by default if found.
      • Fix build with system libsimpleini-dev.
    • BUG FIXES:
      • Fix mrpt::opengl::CFBORender requiring images with origin at the bottom-left corner.
    Source code(tar.gz)
    Source code(zip)
    mrpt-2.1.3.tar.gz(35.64 MB)
    mrpt-2.1.3.tar.gz.asc(833 bytes)
    mrpt-2.1.3.zip(38.57 MB)
  • 2.1.2(Oct 19, 2020)

Owner
MRPT
Mobile Robot Programming Toolkit
MRPT
Implementations of Multiple View Geometry in Computer Vision and some extended algorithms.

MVGPlus Implementations of Multiple View Geometry in Computer Vision and some extended algorithms. Implementations Template-based RANSAC 2D Line estim

Chenyu 6 Apr 7, 2022
open Multiple View Geometry library. Basis for 3D computer vision and Structure from Motion.

OpenMVG (open Multiple View Geometry) License Documentation Continuous Integration (Linux/MacOs/Windows) Build Code Quality Chat Wiki local/docker bui

openMVG 4.6k Jan 8, 2023
Open Source Computer Vision Library

OpenCV: Open Source Computer Vision Library Resources Homepage: https://opencv.org Courses: https://opencv.org/courses Docs: https://docs.opencv.org/m

OpenCV 65.7k Jan 4, 2023
VNOpenAI 31 Dec 26, 2022
Insight Toolkit (ITK) is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration

ITK: The Insight Toolkit C++ Python Linux macOS Windows Linux (Code coverage) Links Homepage Download Discussion Software Guide Help Examples Issue tr

Insight Software Consortium 1.1k Dec 26, 2022
Microsoft Cognitive Toolkit (CNTK), an open source deep-learning toolkit

CNTK Chat Windows build status Linux build status The Microsoft Cognitive Toolkit (https://cntk.ai) is a unified deep learning toolkit that describes

Microsoft 17.3k Dec 23, 2022
Lite.AI.ToolKit 🚀🚀🌟: A lite C++ toolkit of awesome AI models such as RobustVideoMatting🔥, YOLOX🔥, YOLOP🔥 etc.

Lite.AI.ToolKit ?? ?? ?? : A lite C++ toolkit of awesome AI models which contains 70+ models now. It's a collection of personal interests. Such as RVM, YOLOX, YOLOP, YOLOR, YoloV5, DeepLabV3, ArcFace, etc.

DefTruth 2.4k Jan 9, 2023
Zenotech 6 Oct 21, 2022
Microsoft Cognitive Toolkit (CNTK), an open source deep-learning toolkit

The Microsoft Cognitive Toolkit is a unified deep learning toolkit that describes neural networks as a series of computational steps via a directed graph.

Microsoft 17.3k Jan 6, 2023
The Robotics Library (RL) is a self-contained C++ library for rigid body kinematics and dynamics, motion planning, and control.

Robotics Library The Robotics Library (RL) is a self-contained C++ library for rigid body kinematics and dynamics, motion planning, and control. It co

Robotics Library 656 Jan 1, 2023
A lightweight C++ machine learning library for embedded electronics and robotics.

Fido Fido is an lightweight, highly modular C++ machine learning library for embedded electronics and robotics. Fido is especially suited for robotic

The Fido Project 413 Dec 17, 2022
Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation"

SSM-VLN Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation". Environment Installation Download Room-to-Room

hanqing 35 Dec 3, 2022
Episodic Transformer (E.T.) is a novel attention-based architecture for vision-and-language navigation.

Episodic Transformer (E.T.) is a novel attention-based architecture for vision-and-language navigation. E.T. is based on a multimodal transformer that encodes language inputs and the full episode history of visual observations and actions.

Alex Pashevich 61 Nov 17, 2022
Open source modules to interface Metavision Intelligence Suite with event-based vision hardware equipment

Metavision: installation from source This page describes how to compile and install the OpenEB codebase. For more information, refer to our online doc

PROPHESEE 106 Dec 27, 2022
deep learning vision detector/estimator

libopenvision deep learning visualization C library Prerequest ncnn Install openmp vulkan(optional) Build git submodule update --init --recursuve cd b

Prof Syd Xu 3 Sep 17, 2022
Homework of RoboWalker Vision team of USTC for DJI Robomaster competition.

USTC RoboWalker战队 视觉组2022练习作业 “极限犹可突破,至臻亦不可止。” 作业列表 0. 编程基础教程 Hello World 针对没有学过C++/Python、没有太多相关编程经验的新同学的C++ & Python编程入门教程。 0. Git基础教程 Hello Git 学习世

Zhehao Li 4 Feb 20, 2022
ROS wrapper for real-time incremental event-based vision motion estimation by dispersion minimisation

event_emin_ros ROS wrapper for real-time incremental event-based vision motion estimation by dispersion minimisation (EventEMin). This code was used t

Imperial College London 2 Jan 10, 2022
Deep Learning in C Programming Language. Provides an easy way to create and train ANNs.

cDNN is a Deep Learning Library written in C Programming Language. cDNN provides functions that can be used to create Artificial Neural Networks (ANN)

Vishal R 12 Dec 24, 2022
The code for C programming 2021, Department of Computer Science, National Taiwan University.

C2021 .c for sousce code, .in for input file, and .out for correct output. The numbers are the problem indices in the judge system. "make number" to m

Pangfeng Liu 6 Jan 10, 2022