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

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

Owner
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

  • 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 '[email protected]@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();
               ^
    
  • 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.

  • 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.

  • 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.

  • 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 )

  • 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 ;) )?

  • 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").
  • 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 `

  • 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...
  • armhf error in unit tests: alignment to be fixed

    armhf error in unit tests: alignment to be fixed

    To fix:

    [ RUN      ] Matrices.CMatrixFixedNumeric_loadWithEigenMap
    test_mrpt_math: /usr/include/eigen3/Eigen/src/Core/MapBase.h:191: void Eigen::MapBase<Derived, 0>::checkSanity(typename Eigen::internal::enable_if<(Eigen::internal::traits<OtherDerived>::Alignment > 0), void*>::type) const [with T = Eigen::Map<Eigen::Matrix<double, 3, 4, 1, 3, 4>, 16, Eigen::Stride<0, 0> >; Derived = Eigen::Map<Eigen::Matrix<double, 3, 4, 1, 3, 4>, 16, Eigen::Stride<0, 0> >; typename Eigen::internal::enable_if<(Eigen::internal::traits<OtherDerived>::Alignment > 0), void*>::type = void*]: Assertion `( ((internal::UIntPtr(m_data) % internal::traits<Derived>::Alignment) == 0) || (cols() * rows() * innerStride() * sizeof(Scalar)) < internal::traits<Derived>::Alignment ) && "data is not aligned"' failed.
    Aborted (core dumped)
    

    log

  • gtsam_wrappers.h: covariance matrix transformation between MRPT and GTSAM

    gtsam_wrappers.h: covariance matrix transformation between MRPT and GTSAM

    Hello,

    I'm trying to use MRPT and GTSAM to build a SLAM package. I have recently discovered the existence of gtsam_wrappers.h. However, I have a doubt about the transformation of the covariance matrix. As far as I understand, MRPT uses the yaw-pitch-roll parametrization for 3D rotations. However, GTSAM works in SE(3), with the 3 rotational degrees of freedom being the exponential of the SO(3) rotation matrix (Rodrigues vector).

    We have checked GTSAM derivatives of the SE(3) group and they are done with respect to the exponential coordinates, using the same Jacobians as in [1]. We understand that when manipulating them, all the covariance matrices and jacobians should share the same representation: YPR or SO(3) exponential map. In the code of gtsam_wrappers.h, I see that the only operation to transform the covariance matrix from YPR to Rodrigues is the reordering of rows and columns. Shouldn't this transformation also include a multiplication with the jacobian matrix that relates YPR and SO(3) exponential map? Or is there something that we are missing?

    Thank you very much! Miguel

    [1] Solà, J., Deray, J., & Atchuthan, D. (2018). A micro Lie theory for state estimation in robotics. Retrieved from http://arxiv.org/abs/1812.01537

  • [WIP] Fix registration for static lib builds

    [WIP] Fix registration for static lib builds

    Changed apps/libraries

    • all

    TODO:

    • [ ] Make recursive calls from each module to its deps in the registration method.

    PR Description

    Static builds lack the .so / .dll load-triggered automatic RTTI registration of classes. This PR adds support for manual calling a replacement for that.

    Fixes #706

  • 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.

  • 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.

  • 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

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

Apr 7, 2022
open Multiple View Geometry library. Basis for 3D computer vision and Structure from Motion.
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

May 13, 2022
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

May 15, 2022
Apr 30, 2022
Insight Toolkit (ITK) is an open-source, cross-platform toolkit for N-dimensional scientific image processing, segmentation, and registration
 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

May 16, 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

May 10, 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 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.

May 11, 2022
Nov 13, 2020
Microsoft Cognitive Toolkit (CNTK), an open source deep-learning toolkit
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.

May 20, 2022
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

May 11, 2022
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

May 8, 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

May 8, 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.

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.

May 13, 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

May 11, 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

Feb 8, 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 学习世

Feb 20, 2022
ROS wrapper for real-time incremental event-based vision motion estimation by dispersion minimisation
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

Jan 10, 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

Jan 10, 2022
Deep Learning in C Programming Language. Provides an easy way to create and train ANNs.
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)

Apr 18, 2022