What's new in Mobile Robot Programming Toolkit 2.12.2

Apr 23, 2024
  • Changes in libraries:
  • ref mrpt_math_grp:
  • Remove deprecated headers:
  • <mrpt/math/lightweight_geom_data_frwds.h>
  • <mrpt/math/lightweight_geom_data.h>
  • Static constructors of mrpt::math::TPoint2D and mrpt::math::TPoint3D marked as [[nodiscard]].
  • ref mrpt_opengl_grp:
  • Render pipeline is now robust against exceptions thrown in the 3D entities boundingBox determination methods.
  • BUG FIXES:
  • rosbag2rawlog: Fix wrong sensorPose while importing ROS1 datasets.
  • mrpt::math::TPoint2D::FromVector() and mrpt::math::TPoint3D::FromVector() will silently access undefined memory if an input vector smaller than the vector dimensionality is passed.

New in Mobile Robot Programming Toolkit 2.12.1 (Apr 4, 2024)

  • Changes in apps:
  • simul-landmarks: Fix correct generation of sensorLabel and timestamps in observations.
  • Changes in libraries:
  • ref mrpt_obs_grp:
  • mrpt::obs::CObservationBearingRange now implements the exportTxt*() virtual interface.
  • ref mrpt_opengl_grp:
  • mrpt::opengl::CAssimpModel now can read embedded textures in model files.
  • Update embedded Assimp lib version 4.1.0 -> 5.3.1 (when built as ExternalProject)
  • ref mrpt_poses_grp:
  • New methods:
  • mrpt::poses::CPose2DGridTemplate::data(), mrpt::poses::CPose3DGridTemplate::data()
  • mrpt::poses::CPose2DGridTemplate::absidx2idx(), mrpt::poses::CPose3DGridTemplate::absidx2idx()
  • mrpt::poses::CPose2DGridTemplate::idx2absidx(), mrpt::poses::CPose3DGridTemplate::idx2absidx()
  • Fix const-correctness of mrpt::poses::CPose2DGridTemplate::getAsMatrix()
  • rplidar_skd: Update to the latest upstream version, and fix all build warnings.
  • xsens library: Fix all build warnings.

New in Mobile Robot Programming Toolkit 2.12.0 (Mar 17, 2024)

  • Changes in libraries:
  • ref mrpt_obs_grp:
  • mrpt::math::TBoundingBox: Mark all relevant methods with [nodiscard] to avoid mistakes.
  • ref mrpt_system_grp:
  • Removed explicit references to time_t and redundant functions. Removed functions:
  • mrpt::system::getCurrentTime() -> replaced by mrpt::Clock::now()
  • mrpt::system::now() -> replaced by mrpt::Clock::now()
  • mrpt::system::now_double() -> replaced by mrpt::Clock::nowDouble()
  • mrpt::system::time_tToTimestamp() -> replaced by mrpt::Clock::fromDouble()
  • mrpt::system::timestampTotime_t() -> replaced by mrpt::Clock::toDouble()
  • mrpt::system::timestampToDouble() -> replaced by mrpt::Clock::toDouble()
  • BUG FIXES:
  • Fix Debian bug #1066207: FTBFS in latest sid due to undefined declarations in mrpt_xsens C library.
  • Fix FTBFS if using embedded libfreenect due to undefined declarations (usleep).
  • Update embedded version of libfreenect to v0.7.0
  • Fix wrong computation of bounding boxes for mrpt::opengl::CSetOfObjects.

New in Mobile Robot Programming Toolkit 2.11.12 (Mar 11, 2024)

  • Changes in libraries:
  • ref mrpt_obs_grp:
  • Fix compiler error on invocation of template mrpt::obs::CObservationGPS::getMsgByClassPtr()
  • Add field mrpt::obs::CObservationGPS::covariance_enu for easier interoperability with ROS.
  • API simplified: replace custom mrpt::obs::gnss::gnss_message_ptr with a std::shared_ptr<>.
  • mrpt::obs::CObservationRobotPose::getDescriptionAsText(): add human-readable pose uncertainties.
  • BUG FIXES:
  • Fix wrong encoding of grayscale images in mrpt::ros1bridge::toROS() and mrpt::ros2bridge::toROS().
  • Correctly return true/false in conversion of GPS observation in mrpt::ros1bridge::toROS() and mrpt::ros2bridge::toROS() depending on whether there is a valid GGA message.
  • mrpt::obs::CObservationComment: Missing serialization of sensorLabel.

New in Mobile Robot Programming Toolkit 2.11.11 (Mar 5, 2024)

  • Changes in libraries:
  • ref mrpt_ros1bridge_grp:
  • Add missing mrpt::ros1bridge::toROS() for mrpt::maps::CPointsMapXYZIRT => PointCloud2 conversions.
  • BUG FIXES:
  • mrpt::nav::CPTG_DiffDrive_CollisionGridBased: Fix wrongly discarding of WS points out of the refDistance radius as invalid instead of returning its closest extrapolated path pose.

New in Mobile Robot Programming Toolkit 2.11.10 (Feb 20, 2024)

  • Changes in libraries:
  • ref mrpt_maps_grp:
  • mrpt::maps::CHeightGridMap2D: now supports integrating any point-cloud observation.
  • ref mrpt_vision_grp:
  • Remove functions that were problematic with opencv 5: mrpt::vision::findMultipleChessboardsCorners()
  • Others:
  • Fix Debian appstream warnings on mrpt-apps.
  • Fix build against opencv 5.

New in Mobile Robot Programming Toolkit 2.11.8 (Feb 6, 2024)

  • Changes in apps:
  • RawLogViewer: Show pointcloud ring, intensity, and time min/max ranges.
  • rawlog-edit: Show dataset duration as formatted time interval.
  • rosbag2rawlog (ROS 1):
  • Added support for XYZIRT point clouds.
  • Finally, implemented automatic detection of sensor poses wrt base_link from tf messages, with an option to manually override sensor poses from YAML config.
  • Changes in libraries:
  • ref mrpt_maps_grp:
  • Implement missing probabilistic observation models in mrpt::maps::CVoxelMap and mrpt::maps::CVoxelMapRGB
  • Add debug env variable MRPT_DEBUG_OBSPTS_LAZY_LOAD to debug lazy-load point cloud observations.
  • ref mrpt_ros1bridge_grp:
  • Add missing mrpt::ros1bridge::fromROS() for PointCloud2 => mrpt::maps::CPointsMapXYZIRT conversions.
  • ref mrpt_ros2bridge_grp:
  • Fix wrong macros leading to including obsolete header <cv_bridge/cv_bridge.h>.
  • ref mrpt_system_grp:
  • New function mrpt::system::hyperlink() to generate clickable links in terminal messages.

New in Mobile Robot Programming Toolkit 2.11.7 (Jan 26, 2024)

  • Changes in apps:
  • Carmen2rawlog: Generate valid timestamps.
  • Changes in libraries:
  • Rosbag2rawlog: Add support for sensor_msgs/CompressedImage topics.
  • BUG FIXES:
  • Mrpt::hwdrivers::CImageGrabber_dc1394 did not mark the right image as present in stereo cameras.
  • Kinect-stereo-calib: Fix exception un-distorting images.

New in Mobile Robot Programming Toolkit 2.11.6 (Jan 14, 2024)

  • Changes in libraries:
  • ref mrpt_obs_grp
  • mrpt::obs::CObservation::load() is now protected with a std::mutex for safe multi-threading usage.
  • ref mrpt_nav_grp
  • mrpt::nav::CPTG_DiffDrive_alpha now has a "K" parameter for generating backwards trajectories too.
  • BUG FIXES:
  • Fix wrong filenames in rawlog-edit --externalize when sensor labels contain the / character (e.g. mimicking ROS topic names).
  • Fix crash in mrpt::ros2bridge::toROS() for XYZIRT point clouds.
  • Fix exception while rendering paths in the ptg-configurator application.
  • Fix potential race condition in mrpt::obs::CObservation3DRangeScan.

New in Mobile Robot Programming Toolkit 2.11.5 (Dec 21, 2023)

  • Changes in libraries:
  • ref mrpt_maps_grp
  • New method mrpt::maps::CPointsMap::insertPointFrom() (and associated auxiliary methods) to easily copy points between different point clouds with different fields (timestamp, ring, RGB, etc.).
  • ref mrpt_obs_grp
  • mrpt::maps::CSimpleMap changes:
  • Added an optional twist field.
  • Simplified API for preferred usage with structured binding tuples.
  • ref mrpt_system_grp
  • More readable results in mrpt::system::unitsFormat() for the special case of exactly 0.
  • BUG FIXES:
  • Fix filtering of NANs input point clouds in mrpt::maps::CPointsMap::insertAnotherMap().

New in Mobile Robot Programming Toolkit 2.11.4 (Dec 15, 2023)

  • Changes in apps:
  • RawLogViewer: visualize mrpt::obs::CObservationRotatingScan as point cloud + range image + intensity image.
  • rawlog-edit: --info command now also shows the type of each sensor label.
  • Changes in libraries:
  • ref mrpt_maps_grp
  • Use nanoflann RKNN search in mrpt::maps::CPointsMap::nn_radius_search()
  • Added a new point cloud class mrpt::maps::CPointsMapXYZIRT, including its Python and ROS wrappers.
  • ref mrpt_math_grp
  • mrpt::math::KDTreeCapable: Add optional argument maximumSearchDistanceSqr in many API methods to exploit the new nanoflann RKNN search method.
  • ref mrpt_opengl_grp
  • mrpt::opengl::PLY_Importer: Add support for importing point clouds with the timestamp property per point.
  • ref mrpt_obs_grp
  • mrpt::obs::CObservationRotatingScan:
  • Moved from the library mrpt-maps to mrpt-obs, since it no longer requires any mrpt::maps class.
  • Complete its implementation: insertion into point cloud, observation likelihood, visualization in RawLogViewer, etc.
  • BUG FIXES:
  • Fix missing Threads::Threads downstream due to missing find_dependency(Threads) in MRPT cmake config files.
  • Fix broken import of PLY files in SceneViewer3D (empty scene even if correctly imported).
  • mrpt::math::CMatrixDynamic constructor from (row,col) was not marked explicit, leading to potential problems.
  • mrpt::opengl::Viewport::setViewportPosition() did not handle negative width values as expected (i.e. pixel distances from the opposite corner).

New in Mobile Robot Programming Toolkit 2.11.3 (Nov 22, 2023)

  • Changes in libraries:
  • ref mrpt_core_grp
  • Add the [[nodiscard]] attribute to all functions returning a value in <mrpt/core/bits_math.h>
  • ref mrpt_maps_grp
  • mrpt::maps::COccupancyGridMap3D::insertObservation() now also handles mrpt::obs::CObservationPointCloud
  • New virtual interface mrpt::maps::NearestNeighborsCapable, implemented in:
  • All mrpt::maps::CPointsMap classes
  • All classes derived from mrpt::maps::CVoxelMapOccupancyBase
  • mrpt::maps::COccupancyGridMap2D
  • mrpt::maps::COccupancyGridMap2D
  • New virtual method mrpt::maps::CMetricMap::boundingBox()
  • mrpt::maps::TMetricMapInitializer now returns shared_ptrs instead of plain pointers.
  • mrpt::maps::TSetOfMetricMapInitializers::loadFromConfigFile() now throws if it finds a *_count entry with an unknown map class name.
  • ref mrpt_math_grp
  • New template mrpt::math::confidenceIntervalsFromHistogram()
  • ref mrpt_obs_grp
  • mrpt::maps::CMetricMap::loadFromSimpleMap() now automatically calls mrpt::obs::CObservation::load() and mrpt::obs::CObservation::unload() for all observations, so it works with lazy-load datasets.
  • BUG FIXES:
  • Fix compilation errors if using the MCP_SAVE() macro with class enum types.
  • Fix wrong cloud pose in CPointsMap::insertObservation() when inserting an mrpt::obs::CObservationPointCloud.
  • Fix potential data race in mrpt::WorkerThreadsPool::pendingTasks()

New in Mobile Robot Programming Toolkit 2.11.2 (Oct 25, 2023)

  • BUG FIXES:
  • Fix wrong rendering of all wxWidgets-based OpenGL windows when using Ubuntu's display settings to change UI to a size different than 100% (Fixes issue #1114).
  • Fix ignored sensorPose of mrpt::obs::CObservationPointCloud while inserting them into voxel maps.

New in Mobile Robot Programming Toolkit 2.11.1 (Oct 23, 2023)

  • Changes in libraries:
  • ref mrpt_math_grp
  • Fix several build warnings introduced in the last version.
  • ref mrpt_maps_grp
  • Voxel maps: A voxel is considered occupied if its occupancy is larger than likelihoodOptions.occupiedThreshold instead of a fixed 0.5.

New in Mobile Robot Programming Toolkit 2.11.0 (Oct 19, 2023)

  • Changes in libraries:
  • ref mrpt_maps_grp
  • New voxel map containers, based on Faconti's Bonxai header-only libray (MPL-2.0 license):
  • mrpt::maps::CVoxelMap
  • mrpt::maps::CVoxelMapRGB
  • Example: ref maps_voxelmap_from_tum_dataset
  • Example: ref maps_voxelmap_simple
  • BUG FIXES:
  • Fix python wrapper FTBFS in armhf and other architectures.
  • Fix matrices removeColumns() and removeRows() won't throw if user specified a non-existing index.

New in Mobile Robot Programming Toolkit 2.10.2 (Oct 5, 2023)

  • Build system:
  • ROS: fix missing deps in package.xml needed for build via Nix.
  • MRPT and OpenCV versions were until now exposed as macros with 3 hexadecimal digits (e.g. 2.4.0->0x240), with a clear limitation of versions greater than 15. Now, both symbols MRPT_VERSION and MRPT_OPENCV_VERSION_NUM use TWO hexadecimal digits per version part, like: 2.10.2 -> 0x010A02, which is much more general and safe for the future. For backwards compatibility, just make sure your user code only uses MRPT_VERSION>=xxx or MRPT_VERSION>xxx comparisons, instead of less-than comparisons (Fixes issue #1285).
  • Changes in apps:
  • rawlog-edit: Add --select-label optional filter to command --remap-timestamps.
  • Changes in libraries:
  • mrpt-ros1bridge and mrpt-ros2bridge: Remove leftover printf debugging trace printing Ok to console.
  • ref mrpt_hwdrivers_grp
  • New overload mrpt::hwdrivers::CFFMPEG_InputStream::retrieveFrame() returning the frame PTS (presentation timestamp).
  • BUG FIXES:
  • Fix CSparse "C" linkage build error (OSX Clang). PR #1280
  • Fix missing Python wrapping of poses PDF (poses with uncertainty) composition (oplus and ominus) operators. (Closes #1281). PR #1283
  • Fix wrong Jacobian in mrpt::math::CQuaternion::rpy_and_jacobian() for the case of Gimbal Lock. Thanks @giafranchini for reporting!. PR #1290 (Closes #1289)
  • Fix spurious failures in offscreen render unit tests in RISCV64 (Closes #1287).

New in Mobile Robot Programming Toolkit 2.10.1 (Aug 10, 2023)

  • Build system:
  • Add cmake flag to disable LTO in pymrpt module.
  • Add -flto=auto to pymrpt so linking is much faster.
  • BUG FIXES:
  • Fix "FTBFS when binutils-dev is installed but not libiberty-dev" (Debian bug #1041165)
  • pymrpt Debian packaging: triggering of post/pre installation scripts was missing.

New in Mobile Robot Programming Toolkit 2.10.0 (Jul 8, 2023)

  • Changes in libraries:
  • ref mrpt_opengl_grp
  • Move the parameter eyeDistance2lightShadowExtension from TRenderMatrices to mrpt::opengl::TLightParameters so it can be changed from user code (ABI change).
  • New parameter mrpt::opengl::TLightParameters::minimum_shadow_map_extension_ratio
  • Python:
  • More pymrpt examples.
  • BUG FIXES:
  • Pymrpt was not automatically built when invoking the python tests using make test_legacy.

New in Mobile Robot Programming Toolkit 2.9.4 (Jul 1, 2023)

  • Python:
  • pymrpt now ships stub .pyi files, for IDEs to autocomplete MRPT Python programs.
  • maps and multimaps are iterable again (Fixes a regression in v2.9.3)
  • timestamps now has a __str__ operator and to_double() method.
  • Build system:
  • Fix several modern cmake warnings.
  • BUG FIXES:
  • Fix fail to build with libftdi1 v1.4 (Ubuntu Focal).

New in Mobile Robot Programming Toolkit 2.9.3 (Jun 22, 2023)

  • Python:
  • New module pymrpt.ros_bridge
  • Matrices now have proper conversion and accessor methods in the Python API, including conversion from/to numpy.
  • Reduce build time of pymrpt.

New in Mobile Robot Programming Toolkit 2.9.2 (Jun 20, 2023)

  • Changes in docs:
  • Update dependency in instructions from libftdi-dev to libftdi1-dev
  • Changes in libraries:
  • ref mrpt_comms_grp
  • mrpt::comms::CInterfaceFTDI Fix usage of deprecated API in libftdi
  • ref mrpt_obs_grp
  • New static method mrpt::obs::CRawlog::ReadFromArchive() (useful for python bindings)
  • New overload mrpt::obs::obs_to_viz() for mrpt::obs::CSensoryFrame containers
  • ref mrpt_slam_grp
  • mrpt::slam::CMetricMapBuilder::getCurrentlyBuiltMetricMap() returns a const ref instead of a pointer (safer, and does not lead to memory crashes in the Python wrapper).
  • Python:
  • New wrapped functions:
  • mrpt.serialization.archiveFrom()
  • Fix python install directory:
  • ROS 1 or pure Debian: [...]/lib/python3/site-packages/
  • ROS 2: [...]/lib/python3.X/site-packages/
  • BUG FIXES:
  • Fixed including the wrong <mrpt/config.h> if building MRPT in a system with another ROS-provided MRPT build.
  • Fixed build errors with gcc-13 (Fixes Debian bug #1037783)

New in Mobile Robot Programming Toolkit 2.9.1 (Jun 14, 2023)

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

New in Mobile Robot Programming Toolkit 2.9.0 (Jun 8, 2023)

  • Changes in apps:
  • rosbag2rawlog: Added support for converting nav_msgs/LaserScan topics to mrpt::obs::CObservation2DRangeScan
  • Changes in libraries:
  • New Python3 module pymrpt with an almost full wrapping of all MRPT classes (via pybind11). Refer to the Python API documentation (pydoc3).
  • Removed the legacy module mrpt::hmtslam and associated applications. Please refer to older MRPT releases if needed.
  • Removed all deprecated functions and headers.
  • ref mrpt_ros2bridge_grp
  • Fix use of obsolete header <cv_bridge.h> in newer ROS distributions.

New in Mobile Robot Programming Toolkit 2.8.1 (Apr 17, 2023)

  • Changes in libraries:
  • ref mrpt_opengl_grp
  • Expose shadow bias parameters into mrpt::opengl::TLightParameters
  • BUG FIXES:
  • OpenGL shadow rendering: Fix error in calculation of anti peter-panning and shadow acne effects.

New in Mobile Robot Programming Toolkit 2.8.0 (Apr 8, 2023)

  • Fix regression in mrpt::obs::CRawlog::detectImagesDirectory() leading to RawLogViewer and other apps not finding the external image directories for datasets.
  • Fix wrong rendering of shadows of lines when in orthographic projection.
  • mrpt::opengl::CSphere::onUpdateBuffers_Triangles() did not update the list of points

New in Mobile Robot Programming Toolkit 2.7.0 (Mar 4, 2023)

  • Changes in libraries:
  • ref mrpt_gui_grp
  • All OpenGL viewports: pan is now also achieved by pressing the mouse middle button (wheel) + dragging, for similarity with many other CAD UIs.
  • ref mrpt_opengl_grp
  • Shadows can now be rendered for directional lights. See mrpt::opengl::Viewport::enableShadowCasting()
  • These class names have been shortened for ease of use (typedefs with the older names still exist for backwards compatibility, including deserialization of old files):
  • mrpt::opengl::COpenGLScene ==> mrpt::opengl::Scene
  • mrpt::opengl::COpenGLViewport ==> mrpt::opengl::Viewport
  • New class mrpt::opengl::CSkyBox for rendering "3D background" as sky boxes. Refer to example ref opengl_skybox_example
  • OpenGL shaders: more rational use of GLSL precision specifiers: highp for positions, lowp for colors.
  • New flag mrpt::opengl::CFBORender::Parameters::raw_depth
  • mrpt::opengl::FrameBuffer: Remove stencil bit for faster off-screen rendering.
  • New class mrpt::opengl::OpenGLDepth2LinearLUTs
  • mrpt::opengl::CMesh now supports texture wrapping over the mesh extension.
  • Texture handling refactored into a new class mrpt::opengl::Texture
  • Enabled GL MipMap texture generation.
  • Triangles shaders now also account for shininess of material to generate specular reflections. See new method mrpt::opengl::CRenderizable::materialShininess()
  • mrpt::opengl::TLightParameters has been modified to make it more consistent: just one light color and three floats (diffuse, ambient, specular).
  • mrpt::opengl::CRenderizable base methods are now 100% thread-safe. getPoseRef() method has been removed since it was not safe.
  • BUG FIXES:
  • Fix unrealistic odometry error simulation in mrpt::kinematics::CVehicleSimulVirtualBase (it affected the app GridmapNavSimul)

New in Mobile Robot Programming Toolkit 2.6.0 (Jan 12, 2023)

  • Changes in libraries:
  • ref mrpt_math_grp
  • Remove unused header: <mrpt/math/bits_math.h>
  • ref mrpt_opengl_grp
  • New method mrpt::opengl::CAssimpModel::texturedObjects()
  • BUG FIXES:
  • Fix wrong evaluation of the pivot point for the angular threshold parameters in ICP (Closes #1264)

New in Mobile Robot Programming Toolkit 2.5.8 (Jan 8, 2023)

  • Changes in libraries:
  • ref mrpt_core_grp
  • Move the _deg literal to a new namespace mrpt::literals to allow finer-grained using namespace mrpt::literals; instead of using namespace mrpt;. This change is backwards compatible, no user code change required, but recommended.
  • ref mrpt_expr_grp
  • New mrpt::expr::CRuntimeCompiledExpression::register_function() to allow user-defined functions in runtime-compiled formulas.

New in Mobile Robot Programming Toolkit 2.5.7 (Nov 25, 2022)

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

New in Mobile Robot Programming Toolkit 2.5.6 (Nov 13, 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

New in Mobile Robot Programming Toolkit 2.5.5 (Oct 19, 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.

New in Mobile Robot Programming Toolkit 2.5.4 (Sep 24, 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.

New in Mobile Robot Programming Toolkit 2.5.3 (Sep 6, 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)

New in Mobile Robot Programming Toolkit 2.5.2 (Aug 30, 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

New in Mobile Robot Programming Toolkit 2.5.1 (Aug 4, 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().

New in Mobile Robot Programming Toolkit 2.5.0 (Jul 18, 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.

New in Mobile Robot Programming Toolkit 2.4.10 (Jul 1, 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.

New in Mobile Robot Programming Toolkit 2.4.9 (Jun 8, 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)

New in Mobile Robot Programming Toolkit 2.4.8 (Jun 7, 2022)

  • Build system:
  • Fixed various ROS-level public dependencies.

New in Mobile Robot Programming Toolkit 2.4.8 (May 29, 2022)

  • Fixed various ROS-level public dependencies.

New in Mobile Robot Programming Toolkit 2.4.7 (May 26, 2022)

  • 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::onlyPointsWithIntensityCol

New in Mobile Robot Programming Toolkit 2.4.5 (May 22, 2022)

  • Changes in libraries:
  • New module mrpt_ros2bridge_grp to support conversions to/from ROS2 data types and MRPT classes.
  • Build system:
  • Fix detection of dependencies for both ROS1 and ROS2.

New in Mobile Robot Programming Toolkit 2.4.4 (May 6, 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).

New in Mobile Robot Programming Toolkit 2.4.3 (Feb 23, 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.

New in Mobile Robot Programming Toolkit 2.4.2 (Feb 3, 2022)

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

New in Mobile Robot Programming Toolkit 2.4.1 (Jan 5, 2022)

  • Changes in build system:
  • Disable -flto in nanogui (to avoid an Eigen regression).
  • 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.).

New in Mobile Robot Programming Toolkit 2.4.0 (Dec 12, 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.

New in Mobile Robot Programming Toolkit 2.3.2 (Jul 15, 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.

New in Mobile Robot Programming Toolkit 2.3.0 (Apr 25, 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.

New in Mobile Robot Programming Toolkit 2.2.0 (Mar 11, 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.

New in Mobile Robot Programming Toolkit 2.1.8 (Mar 1, 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".

New in Mobile Robot Programming Toolkit 2.1.7 (Jan 2, 2021)

  • BUG FIXES:
  • Fix bash syntax error in PPA release scripts.
  • Fix Debian bug #978209: FTBFS : mainwindow.h:218:2: error: reference to Tracker is ambiguous

New in Mobile Robot Programming Toolkit 2.1.6 (Dec 14, 2020)

  • Changes in libraries:
  • ref mrpt_core_grp
  • Disable the use of BFD for symbols in stack traces by default in Debian builds. It is still used if found in the system and in Ubuntu PPAs.
  • BUG FIXES:
  • Fix Debian bug #976803: mrpt uses private binutils shared library.
  • Fix Debian bug #977247: fail to link pymrpt against opencv.

New in Mobile Robot Programming Toolkit 2.1.4 (Nov 9, 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

New in Mobile Robot Programming Toolkit 2.1.0 (Sep 29, 2020)

  • Incompatible API changes:
  • mrpt::system::TParameters has been removed, superseded by mrpt::containers::yaml.
  • Remove mrpt::hwdrivers::CRovio
  • Removed old mrpt 1.5.x backwards-compatible <mrpt/utils/...> headers (Closes #1083).
  • Changes in libraries:
  • ref mrpt_containers_grp
  • New class mrpt::containers::yaml for nested, YAML-like data structures.
  • ref mrpt_core_grp
  • New mrpt::for_<> constexpr for loop helper function.
  • New function mrpt::demangle()
  • New class mrpt::WorkerThreadsPool
  • New macro ASSERT_NEAR_(). Defined new macros with correct English names ASSERT_LT_(), etc. deprecating the former ones.
  • mrpt::get_env() gets specialization for bool.
  • ref mrpt_math_grp
  • New static methods with semantic-rich names: mrpt::math::TPlane::From3Points(), mrpt::math::TPlane::FromPointAndLine(), ...
  • New asString() methods in mrpt::math::TPlane, mrpt::math::TLine2D, mrpt::math::TLine3D
  • ref mrpt_tfest_grp
  • New templatized mrpt::tfest::TMatchingPairTempl<> and mrpt::tfest::TMatchingPairListTempl<>
  • New mrpt::tfest::se3_l2() for double precision.
  • Build:
  • yamlcpp is no longer a build dependency.
  • Less RAM and time required to build debug builds or to load in the debugger.
  • BUG FIXES:
  • Avoid crash in camera-calib app when clicking "Close" while capturing a live video.
  • Fix potential Eigen crash in matrixes inverse() and inverse_LLt() if building mrpt and user code with different optimization flags.
  • Wrong parsing of env variables in mrpt::get_env() when called more than once.
  • mrpt::system::CTimeLogger: Fix wrong formatting (parent entry prefix collapse) in summary stats table.
  • mrpt::opengl::CEllipsoid2D was not RTTI registered.
  • Fix wrong copy of internal parameters while copying mrpt::maps::CMultiMetricMap objects.

New in Mobile Robot Programming Toolkit 1.3.0 (Jan 15, 2015)

  • Most important changes:
  • Classes in libraries [mrpt-obs] and [mrpt-maps] now belong to new namespaces (mrpt::obs, mrpt::maps) instead of the old mrpt::slam
  • No more using namespaces polute MRPT headers. Errors in user projects missing using namespace XXX that might be formerly masked will now reveal. This is a good thing, though admitedly annoying...
  • New library [mrpt-nav], subsumming the old [mrpt-reactivenav].
  • New library [mrpt-tfest], a refactor of the old [mrpt-scanmatching].
  • Backwards compatible headers have been provided to ease the transition of user code for all those library changes. Warning messages will be shown recommending deprecated replacements.
  • Detailed list of changes:
  • Lib changes:
  • Clean up of the bad practice of using namespace in public scopes of headers. May lead to user code failing for missing using namespaces which were previously masked.
  • Namespace "slam" deprecated in libraries mrpt-obs and mrpt-maps (used for historical reasons):
  • New namespaces [mrpt-obs] and [mrpt-maps].
  • #include files moved from old paths =>
  • Backward compatible headers added in until mrpt 2.0.0
  • New library [mrpt-nav], subsumming the old mrpt-reactivenav ([mrpt-reactivenav]).
  • [mrpt-reactivenav] is now a meta-library, depending on [mrpt-nav].
  • [mrpt-tfest] : Old library mrpt-scanmatching ([mrpt-scanmatching]) has been refactored, its API clean-up, and renamed [mrpt-tfest]
  • [mrpt-scanmatching] is now a meta-library, depending on [mrpt-tfest].
  • These classes have been moved between libs for a more sensible organization:
  • mrpt::slam::CDetectorDoorCrossing ==> mrpt::detectors::CDetectorDoorCrossing
  • mrpt::slam::CPathPlanningMethod & CPathPlanningCircularRobot: [mrpt-slam] ==> [mrpt-nav]
  • Build System / General changes:
  • Many optimizations in function arguments (value vs ref). Forces ABI incompatibility with previous versions, hence the change to a new minor version number.
  • Updated embedded version of Eigen to 3.2.3
  • Kinect: Dropped support for the CL NUI API, which seems discontinued. Alternatives in use are libfreenect and OpenNI2.
  • libfreenect is now detected in the system and used instead of compiling the embedded copy of it.
  • Embedded copy of libfreenect has been updated to (23/oct/2014). It now supports "Kinect for Windows".
  • More selective linking of .so files to avoid useless dependencies (Fixes #52).
  • (Windows only) MRPT can now be safely built with libusb support (Freenect, Kinect,...) and it will run on systems without libusb installed, by means of /DELAYLOAD linking flags.
  • More unit tests.
  • Changes in classes:
  • [mrpt-base]
  • New function mrpt::math::angDistance()
  • [mrpt-hwdrivers]
  • mrpt::hwdrivers::CIMUXSens_MT4: (by Joe Burmeister for Suave Aerial Software)
  • Upgrade to latest XSens SDK 4.2.1. Requires libudev-dev in Linux
  • Add GPS observations to CIMUXSens_MT4 for Xsens devices like GTi-G-700 which have GPS
  • mrpt::hwdrivers::CImageGrabber_dc1394: Length of ring buffer is now configurable via TCaptureOptions_dc1394::ring_buffer_size
  • [mrpt-maps]
  • Important refactor of internal code related to mrpt::maps::CMultiMetricMap:
  • All maps (derived from mrpt::maps::CMetricMap) now have a more uniform interface.
  • Each map now has a MapDefinition structure with all its parameters. See docs for mrpt::maps::TMetricMapInitializer
  • Introduced mrpt::maps::TMapGenericParams to hold parameters shared in all maps.
  • [mrpt-obs]
  • CObservation::getDescriptionAsText(): New virtual method to obstain a textual description of observations. Refactoring of messy code previously in the RawLogViewer app.
  • [mrpt-vision]
  • mrpt::vision::CFeatureExtraction: Removed (unused) optional ROI parameter in detectors.
  • BUG FIXES:
  • mrpt::poses::CRobot2DPoseEstimator could estimate wrong angular velocities for orientations near +-180deg.
  • mrpt::system::CDirectoryExplorer::sortByName() didn't sort in descending order
  • Fixed crashes from MATLAB .mex files: mrpt::system::registerFatalExceptionHandlers() has no longer effect, and will be removed in future releases. (Thanks to Jesús Briales García for all the testing!)
  • Fixed potential crash for Eigen unaligned memory access in 32bit builds in mrpt::slam::CGridMapAligner and other places (Closes #94)

New in Mobile Robot Programming Toolkit 1.2.2 (Sep 15, 2014)

  • Changes in apps:
  • SceneViewer3D:
  • New menu "File" -> "Import" -> "3D model" which supports many standard formats (via mrpt::opengl::CAssimpModel)
  • New classes:
  • mrpt-hwdrivers:
  • mrpt::hwdrivers::CRoboPeakLidar to interface Robo Peak LIDAR scanners.
  • mrpt-opengl:
  • mrpt::opengl::CAssimpModel for rendering complex 3D models (many supported formats) in OpenGL scenes.
  • Changes in classes:
  • Consistency in all "laser scan" classes: angular increments between rays are now FOV/(N-1) instead of FOV/N.
  • mrpt-base:
  • New method mrpt::utils::CImage::loadTGA()
  • IMPORTANT: Changed behavior of CSerializable/CObject macros (see bugfix below), introducing the new macros DEFINE_SERIALIZABLE_POST_*. May require changes in user code if serializable classes are defined:
  • Previous version:
  • DEFINE_SERIALIZABLE_PRE_*(...)
  • class XXX {
  • DEFINE_SERIALIZABLE(XXX)
  • Must be changed in this version to:
  • DEFINE_SERIALIZABLE_PRE_*(...)
  • class XXX {
  • DEFINE_SERIALIZABLE(XXX) };
  • DEFINE_SERIALIZABLE_POST_*(...)
  • mrpt-hwdrivers:
  • Bumblebee2 Linux support in mrpt::hwdrivers::CImageGrabber_FlyCapture2 via Triclops (by Jesus Briales)
  • mrpt-maps:
  • New method mrpt::slam::COccupancyGridMap2D::getRawMap()
  • New method mrpt::slam::CColouredPointsMap::getPCLPointCloudXYZRGB()
  • mrpt-opengl:
  • mrpt::opengl::CMyGLCanvasBase (affects all 3D rendering classes): better handling of internal timers for smoother updates while rendering in multithreading apps.
  • mrpt-srba:
  • New method to recover the global coordinates graph-slam problem for a RBA map: mrpt::srba::RbaEngine::get_global_graphslam_problem()
  • BUG FIXES:
  • mrpt:utils:CImage constructor from a matrix crashed.
  • Unit tests: Named semaphores are not tested anymore if it's detected that the kernel version doesn't support them
  • mrpt:synch:CSemaphore [Linux]: didn't call sem_unlink().
  • mrpt:gui:CDisplayWindow3D didn't implement get/set FOV.
  • Valgrind: Fixed potential unaligned memory access warning in point clouds.
  • Fix build error with AppleClang 5.1
  • mrpt:utils:CClientTCPSocket: Use a connection success check that works on all platforms
  • Important bug fixed regarding a missing dynamic_cast in smart pointers casting. See above possible implications in user code. properly

New in Mobile Robot Programming Toolkit 1.2.1 (Jul 11, 2014)

  • Changes in classes:
  • [mrpt-base]
  • All points and poses now have a method setToNaN(), e.g. mrpt::poses::CPose3D::setToNaN()
  • [mrpt-hwdrivers]
  • mrpt::hwdrivers::COpenNI2Sensor now has better support for opening several RGBD cameras
  • Build system:
  • Fix compilation of SRBA with DEBUG_GARBAGE_FILL_ALL_NUMS=1
  • Fix de-serialization error in mrpt::reactivenav::CLogFileRecord (and new unit tests added to avoid regressions).
  • Several Debian bugs closed (see packaging/debian/changelog), including build errors in uncommon platforms (MIPS, kFreeBSD, etc.)

New in Mobile Robot Programming Toolkit 1.2.0 (Jun 27, 2014)

  • Most important changes:
  • Public header files (.h) have undergone a serious refactoring to minimize unnecesary dependencies and reduce compile time and memory as much as possible. As a side effect, user code might need to add new #include lines. This change justifies the new minor version series 1.2.X.
  • MRPT now cleanly builds in clang and OSX.
  • Support for new camera drivers (OpenNI2, DUO3D).
  • Many bug fixes.
  • Detailed list of changes:
  • Changes in apps:
  • rawlog-edit:
  • New operations: –export-odometry-txt, –recalc-odometry
  • New flag: –rectify-centers-coincide
  • New examples:
  • kitti_dataset2rawlog
  • New classes:
  • [mrpt-base]
  • mrpt::math::ContainerType::element_t to allow handling either Eigen or STL containers seamlessly.
  • mrpt::utils::CConfigFilePrefixer
  • [mrpt-hwdrivers]
  • mrpt::hwdrivers::COpenNI2Sensor: Interface to OpenNI2 cameras, capable of reading from an array of OpenNI2 RGBD cameras (By Eduardo Fernandez)
  • mrpt::hwdrivers::CDUO3DCamera: Interface to DUO3D cameras
  • mrpt::hwdrivers::CGPS_NTRIP: A combination of GPS receiver + NTRIP receiver capable of submitting GGA frames to enable RTCM 3.0
  • [mrpt-obs]
  • mrpt::slam::CObservation6DFeatures
  • Changes in classes:
  • [mrpt-base]
  • Robust kernel templates moved from mrpt::vision to mrpt::math. See mrpt::math::RobustKernel. Added unit tests for robust kernels.
  • CPose3D has new SE(3) methods: mrpt::poses::CPose3D::jacob_dexpeD_de(), mrpt::poses::CPose3D::jacob_dAexpeD_de()
  • More efficient mrpt::utils::OctetVectorToObject() (avoid memory copy).
  • Fixed const-correctness of mrpt::utils::CImage::forceLoad() and mrpt::utils::CImage::unload()
  • [mrpt-hwdrivers]
  • mrpt::hwdrivers::CCameraSensor: Added a hook for user code to run before saving external image files: mrpt::hwdrivers::CCameraSensor::addPreSaveHook()
  • mrpt::hwdrivers::CNationalInstrumentsDAQ now supports analog and digital outputs.
  • New method mrpt::hwdrivers::CNTRIPClient::sendBackToServer()
  • [mrpt-srba]
  • Now also implements SE(3) relative graph-slam.
  • [mrpt-vision]
  • mrpt::vision::checkerBoardStereoCalibration: More robust handling of stereo calibration patterns. OpenCV sometimes detects corners in the wrong order between (left/right) images, so we detect the situation and fix it.
  • mrpt::vision::findMultipleChessboardsCorners():
  • Now enforces a consistent counterclockwise XYZ coordinate frame at each detected chessboard.
  • Much more robust in distingishing quads of different sizes.
  • Build system / public API:
  • Fixes to build in OS X - Patch by Randolph Voorhies.
  • Removed most "using namespace" from public headers, as good practice.
  • Refactoring of MRPT headers:
  • has been split into:
  • Deleted methods and functions:
  • mrpt::system::breakpoint()
  • mrpt::vector_float is now mrpt::math::CVectorFloat, mrpt::vector_double is mrpt::math::CVectorDouble, for name consistency. Also, using Eigen::VectorXf is preferred for new code.
  • mrpt::CImage::rectifyImage() with parameters as separate vectors.
  • mrpt::slam::CPointsMap::getPoint() with mrpt::poses::CPoint3D arguments.
  • mrpt::vision::correctDistortion() -> use CImage method instead
  • All previous deprecated functions.
  • Embedded Eigen updated to version 3.2.1 (commit) (commit)
  • BUG FIXES:
  • RawlogViewer app: Fixed abort while converting SF->obs.only datasets when there is no odometry.
  • mrpt::slam::CSensoryFrame: The cached point map is now invalidated with any change to the list of observations so it's rebuild upon next call.
  • New implementation of mrpt::synch::CSemaphore avoids crashes in OS X - by Randolph Voorhies.
  • mrpt::opengl::CArrow was always drawn of normalized length.
  • FlyCapture2 monocular & stereo cameras could return an incorrect timestamp (only in Linux?).
  • mrpt::system::createDirectory() returned false (error) when the directory already existed.
  • mrpt::vision::CStereoRectifyMap::rectify() didn't update the left & right camera poses inside mrpt::slam::CObservationStereoImages objects while rectifying.
  • RawLogViewer: Operation "convert to SF format" didn't take into account odometry observations.
  • Fix build errors with GCC 4.9
  • Fix crash of mrpt::hwdrivers::CIMUXSens_MT4's destructor when it fails to scan and open a device.
  • Fix potential crash in mrpt::slam::data_association_full_covariance with JCBB when no individually compatible matching exists (commit)

New in Mobile Robot Programming Toolkit 1.1.0 (Mar 14, 2014)

  • New apps:
  • DifOdometry-Camera. (By Mariano Jaimez Tarifa)
  • DifOdometry-Datasets. (By Mariano Jaimez Tarifa)
  • New classes:
  • [mrpt-base]
  • mrpt::synch::CPipe: OS-independent pipe support.
  • [mrpt-hwdrivers]
  • mrpt::hwdrivers::CIMUXSens_MT4 : Support for 4th generation xSens MT IMU devices.
  • mrpt::hwdrivers::CNationalInstrumentsDAQ: Support for acquisition boards compatible with National Instruments DAQmx Base - (commit).
  • mrpt::hwdrivers::CImageGrabber_FlyCapture2: Support for Point Grey Research's cameras via the FlyCapture2 libray - (commits).
  • [mrpt-maps]
  • There are now two versions of octomaps (by Mariano Jaimez Tarifa/Jose Luis Blanco) - (commit)
  • mrpt::slam::COctoMap (only occupancy)
  • mrpt::slam::CColouredOctoMap (occupancy + RGB color)
  • [mrpt-obs]
  • mrpt::slam::CObservationRawDAQ, a placeholder for raw and generic measurements from data acquisition devices. - (commit)
  • [mrpt-opengl]
  • mrpt::opengl::CMeshFast, an open gl object that draws a "mesh" as a structured point cloud which is faster to render (by Mariano Jaimez Tarifa). -(commit)
  • mrpt::opengl::CVectorField2D, an opengl object that shows a 2D Vector Field (by Mariano Jaimez Tarifa). - (commit)
  • [mrpt-reactivenav]
  • mrpt::reactivenav::CAbstractPTGBasedReactive, as part of a large code refactoring of these classes: (commit)
  • mrpt::reactivenav::CReactiveNavigationSystem
  • mrpt::reactivenav::CReactiveNavigationSystem3D
  • [mrpt-vision]
  • mrpt::vision::CDifodo, a class which implements visual odometry based on depth images and the "range flow constraint equation". (by Mariano Jaimez Tarifa) - (commit)
  • Changes in classes:
  • Clean up and slight optimization of metric map matching API: - (commit)
  • Methods marked as deprecated:
  • mrpt::slam::CMetricMap::computeMatchingWith2D() –> mrpt::slam::CMetricMap::determineMatching2D()
  • mrpt::slam::CMetricMap::computeMatchingWith3D() –> mrpt::slam::CMetricMap::determineMatching3D()
  • New structures:
  • mrpt::slam::TMatchingParams
  • mrpt::slam::TMatchingExtraResults
  • mrpt::slam::CPointsMap::TInsertionOptions now have methods to save/load from binary streams, making more maintainable the serialization of point maps - (commit)
  • New options in point maps: mrpt::slam::CPointsMap::TInsertionOptions::insertInvalidPoints - (commit)
  • mrpt::slam::CObservationIMU now includes data fields for 3D magnetometers and altimeters. - (commit)
  • Method renamed mrpt::utils::CEnhancedMetaFile::selectVectorTextFont() to avoid shadowing mrpt::utils::CCanvas::selectTextFont()
  • mrpt::reactivenav::CParameterizedTrajectoryGenerator: New methods: mrpt::reactivenav::CParameterizedTrajectoryGenerator::inverseMap_WS2TP() for inverse look-up of WS to TP space - (commit) mrpt::reactivenav::CParameterizedTrajectoryGenerator::renderPathAsSimpleLine() - (commit)
  • Changed the signature of rpt::reactivenav::build_PTG_collision_grids() to become more generic for 2D & 2.5D PTGs - (commit)
  • Deleted classes:
  • mrpt::utils::CEvent, which was actually unimplemented (!)
  • mrpt::hwdrivers::CInterfaceNI845x has been deleted. It didn't offer features enough to justify a class.
  • New examples:
  • [MRPT]/samples/threadsPipe
  • [MRPT]/samples/NIDAQ_test
  • [MRPT]/openNI2_RGBD_demo (by Mariano Jaimez Tarifa)
  • [MRPT]/openNI2_proximity_demo (by Mariano Jaimez Tarifa)
  • Build system:
  • Fixed compilation with clang.
  • Fixed building against OpenCV 3.0.0 (GIT head)
  • Updated to the latest nanoflann 1.1.7.
  • Updated to Eigen 3.2.0 - (commit)
  • Binary packages for Windows now include .pdb files to help debugging with Visual Studio.
  • BUG FIXES:
  • Fixed potential infinity loop in mrpt::math::make_vector()
  • Fixed build error with GCC when experimental parallelization is enabled. (commit)
  • mrpt::reactivenav::CReactiveNavigationSystem complained about missing config variables ROBOTMODEL_TAU & ROBOTMODEL_DELAY, which were removed in MRPT 1.0.2 - (commit)
  • Fixed potential mem alignment errors (Eigen's UnalignedArrayAssert) in SRBA for 32bit builds. (commit)
  • mrpt::topography::geodeticToENU_WGS84() and related functions used a local +Z axis aligned to the line towards the Earth center; now the Z axis points normally to the ellipsoid surface. The difference with the previous behavior is small but may be of a few millimeters for each meter from the reference point. (commit)
  • Potential crash when setting mpPolygon::setPoints() with empty vectors - (commit)
  • mrpt::reactivenav::CReactiveNavigationSystem and mrpt::reactivenav::CReactiveNavigationSystem3D didn't obey the "enableConsoleOutput" constructor flag - (commit)
  • mrpt::synch::CSemaphore::waitForSignal() : Fixed error when thread got an external signal (commit)

New in Mobile Robot Programming Toolkit 1.0.2 (Sep 17, 2013)

  • New apps:
  • ReactiveNav3D-Demo (By Mariano Jaimez Tarifa)
  • Changes in apps:
  • rawlog-edit:
  • New operations: –list-timestamps, –remap-timestamps, –export-2d-scans-txt, –export-imu-txt
  • New classes:
  • [mrpt-base]:
  • mrpt::poses::CPose3DRotVec is now fully implemented (By Francisco Angel Moreno).
  • [mrpt-opengl]:
  • mrpt::opengl::CLight - OpenGL scenes now allow customization of OpenGL lighting. See also new lighting methods in mrpt::opengl::COpenGLViewport - r3409
  • [mrpt-reactivenav];
  • mrpt::reactivenav::CReactiveNavigationSystem3D - By Mariano Jaimez Tarifa - r3389
  • New functions:
  • [mrpt-opengl]:
  • mrpt::opengl::stock_objects::RobotRhodon()
  • Changes in classes:
  • [mrpt-base]:
  • Generic particle filter classes now allow directly resampling to a dynamic number of particles. Affected methods: - r3381
  • mrpt::bayes::CParticleFilterCapable::performResampling()
  • mrpt::bayes::CParticleFilterCapable::computeResampling()
  • New method: CImage::loadFromXPM() - r3397
  • [mrpt-maps]:
  • mrpt::slam::COctoMap now exposes the inner octomap::OcTree object. See example samples/octomap_simple - r4304
  • [mrpt-openg]:
  • mrpt::opengl::CBox now be also rendered as a solid box + line borders. See mrpt::opengl::CBox::enableBoxBorder()
  • mrpt::opengl::COctoMapVoxels - r4329
  • Fixed calculation of normals (fix shading)
  • Added new coloring scheme to mrpt::opengl::COctoMapVoxels::visualization_mode_t : "FIXED"
  • By default, light effects are disabled in this object, because shadows aren't computed anyway and the effect isn't pleasant.
  • Voxels cubes are sorted in ascending Z order so the visual effect is correct when rendering with transparency.
  • [mrpt-reactivenav]:
  • mrpt::reactivenav::CParameterizedTrajectoryGenerator: The "low pass filter" has been removed since it wasn't practical and was never used; thus, parameters "TAU" and "DELAY" has been removed. - r3395
  • Methods removed since they weren't implemented in any derived class and there are no plans for doing it.
  • mrpt::reactivenav::CReactiveNavigationSystem ::evaluate()
  • mrpt::reactivenav::CReactiveNavigationSystem ::setParams()
  • Build system:
  • Updated to nanoflann 1.1.7: ICP is ~5% faster.
  • More unit tests:
  • [mrpt-base] geometry module.
  • BUG FIXES:
  • CTimeLogger::registerUserMeasure() ignored the enable/disable state of the logger - r3382
  • mrpt-srba: SEGFAULT in 32bit builds due to missing EIGEN_MAKE_ALIGNED_OPERATOR_NEW - r3429

New in Mobile Robot Programming Toolkit 1.0.1 (May 14, 2013)

  • Changes in apps:
  • RawLogViewer:
  • Better description of the "too much memory used" warning while loading large datasets.
  • robotic-arm-kinematics:
  • Now allows changing the orientation of the first DOF (X,Y,Z).
  • New classes:
  • [mrpt-hwdrivers]
  • mrpt::hwdrivers::CInterfaceNI845x: An interface for this USB SPI/I2C data acquisition board.
  • mrpt::hwdrivers::CCANBusReader: A class to record CAN bus frames with a CAN232 converter.
  • [mrpt-obs]
  • mrpt::slam::CObservationCANBusJ1939
  • New functions:
  • New opengl_stock objects:
  • mrpt::opengl::stock_objects::Hokuyo_URG()
  • mrpt::opengl::stock_objects::Hokuyo_UTM()
  • mrpt::opengl::stock_objects::Househam_Sprayer()
  • mrpt::math::saveEigenSparseTripletsToFile()
  • New examples:
  • gmrf_map_demo
  • Changes in classes:
  • [mrpt-maps]
  • mrpt::slam::COccupancyGridMap2D now also evalutes likelihoods for sonar-like observations (mrpt::slam::CObservationRange), allowing particle-filter localization with these sensors
  • New method:
  • mrpt::slam::CRandomFieldGridMap2D::insertIndividualReading()
  • [mrpt-kinematics]
  • mrpt::kinematics::CKinematicChain: Now allows changing the orientation of the first DOF (X,Y,Z).
  • Removed stuff:
  • Backwards-compatibility typedef mrpt::vision::TKLTFeatureStatus has been removed. Replace with mrpt::vision::TFeatureTrackStatus
  • KLT-specific values for mrpt::vision::TFeatureTrackStatus has been removed, since they were not used in detected features anyway.
  • Build system:
  • Fixed a potential build error if including FFMPEG's instead of the standard header
  • Fixed determination of GCC version for all GCC builds
  • Updated to Eigen 3.1.3
  • Updated to nanoflann 1.1.5
  • Bug fixes:
  • Unit tests "SchurTests" for mrpt-srba incorrectly reported errors due to an improperly initialized reference to a local variable

New in Mobile Robot Programming Toolkit 0.9.5 (Oct 17, 2011)

  • Most important changes:
  • Tons of performance optimizations, mostly in: point clouds, feature detection, opengl rendering and icp-slam (which is now with default params ~4 times faster).
  • Doxygen documentation is now organized around modules, such as the page for each class or namespace indicates to which mrpt-* library it belongs to.
  • New libraries: mrpt-graphs and mrpt-graphslam, including two associated namespaces mrpt::graphs and mrpt::graphslam. Read more below on this change and its reasons.
  • Detailed list of changes:
  • Changes in applications:
  • navlog-viewer: Now allows exporting the global navigation map as a MATLAB script for generating vector plots.
  • rawlog-edit: New operations:
  • "--generate-3d-pointclouds
  • "--generate-pcd": Creates one PointCloud Library (PCL) PCD file for each laser or 3D camera (Kinect) observation in a rawlog
  • 2d-slam-demo: New menus:
  • "Tools"->"Save last data association state" for saving observation predictions and the innovation covariance S_k for debugging or didactic purposes.
  • "Tools"->"Enable save rawlog..." for grabbing simulated range-bearing SLAM data sets
  • Now shows missing running total of true positives/negatives in data association
  • Added a new graph with number of JCBB iterations.
  • track-video-features: New optional argument --save-video.
  • RawLogViewer:
  • Now generates 3D point clouds on-the-fly for 3D camera data sets if the points weren't saved (obviously, only if range information is present).
  • The "scan animation" window has become a 3D viewer which is now capable of visualizing 2D laser scans and 3D point clouds from Kinect and other 3D cameras.
  • Refactoring of code around the two new libraries/modules mrpt-graphs and mrpt-graphslam: r2632, r2633
  • Now all graphs abstract datatypes and algorithms are in mrpt::graphs (they were previously part of mrpt-base).
  • And graphslam algorithms are into mrpt::graphslam, in its own library mrpt-graphslam (it was previously part of mrpt-slam).
  • This change responds to a convenience of having these two libraries as being (almost entirely) header-only libs, to allow a maximum of freedom in the definition of graph data types by users.
  • The most important new feature available after these changes is the possibility of working with nodes and edges with arbitrarily-complex "annotations", defined as structs via template arguments, and which augment the "poses" of global poses (in nodes) and constraints (edges). See: mrpt::graphs::CDirectedGraph and mrpt::graphs::CNetworkOfPoses
  • For the sake of maintainability of future classes, the following changes will be required in user code (only when explicitly including/using these classes):
  • mrpt::math::CDijkstra --> mrpt::graphs::CDijkstra , that is, CDijstra now accepts as template argument the entire description of a graph (this is much more versatile).
  • include --> #include
  • include --> #include
  • include --> #include
  • include --> #include & #include
  • include --> #include
  • New classes:
  • [mrpt-base] Missing PDF for 3D poses with quaternions and information matrix: in mrpt::poses::CPose3DQuatPDFGaussianInf
  • [mrpt-base & others] mrpt::utils::PointCloudAdapter: An adapter pattern for point clouds.
  • A batch of changes to introduce WiFi signal strength receivers and building maps out of such observations
  • [mrpt-obs] mrpt::slam::CObservationWirelessPower
  • [mrpt-maps] mrpt::slam::CWirelessPowerGridMap2D
  • [mrpt-hwdrivers] mrpt::hwdrivers::CWirelessPower
  • [mrpt-maps] New class mrpt::slam::CRandomFieldGridMap2D to generalize previous WiFi and GasConcentration grid mapping - r2577
  • [mrpt-maps] New map type mrpt::slam::CWeightedPointsMap which is equivalent to the old mrpt::slam::CSimplePointsMap (which now does not have weights). Read more on the code refactoring in point-cloud maps below.
  • [mrpt-opengl] mrpt::opengl::CText3D, a new way to display texts using OpenGL primitives instead of bitmaps.
  • [mrpt-vision] mrpt::vision::CImagePyramid, a tool for managing pyramids of images in different octaves (each being half the size of the previous one)
  • [mrpt-vision] New "lightweight" image feature classes: mrpt::vision::TSimpleFeature, mrpt::vision::TSimpleFeatureList
  • New functions:
  • [mrpt-base] mrpt::utils::vector_strong_clear()
  • [mrpt-base] mrpt::system::filePathSeparatorsToNative()
  • [mrpt-base] mrpt::system::copyFile()
  • Changes in classes:
  • [mrpt-maps] mrpt::slam::CPointsMap (and all derived point-cloud maps) have undergone a big code refactoring and optimizations:
  • New method mrpt::slam::CPointsMap::addFrom() and an "operator +=" to add the points from another point map
  • Now mrpt::slam::CSimplePointsMap no longer has weights associated to each point. If users want weights (mainly for ::fuseWith()) please use the newly created class mrpt::slam::CWeightedPointsMap
  • Filter by height is now available in all point maps, not only in mrpt::slam::CColourPointMap.
  • mrpt::slam::CColouredPointsMap no longer has a the "m_min_dist" field.
  • Many optimizations for SSE2
  • [mrpt-maps] Basic support for PCL library (version 1.0.0+): ( r2560, r2562 )
  • mrpt::slam::CPointsMap::savePCDFile()
  • mrpt::slam::CPointsMap::getPCLPointCloud()
  • mrpt::slam::CColouredPointsMap::savePCDFile()
  • [mrpt-maps] mrpt::opengl::CPlanarLaserScan no longer has its fields m_enable_points, m_enable_line, m_enable_surface exposed as public, since that breaks the OpenGL display-lists update mechanism. Instead, use the methods enablePoints(), enableLine(), enableSurface().
  • [mrpt-slam] New configuration parameters in ICP:
  • mrpt::slam::CICP::TConfigParams::corresponding_points_decimation to speed-up ICP with dense point clouds that can be safely decimated.
  • Configurable "smallest step" termination critera (which was fixed in previous MRPT versions): mrpt::slam::CICP::TConfigParams::minAbsStep_trans, mrpt::slam::CICP::TConfigParams::minAbsStep_rot
  • [mrpt-slam] Data association: JCBB implementation in mrpt::slam::data_association_full_covariance() is now more efficient by skipping some unnecesary B&B iterations
  • [mrpt-obs] In mrpt::slam::CObservation3DRangeScan
  • New data field: mrpt::slam::CObservation3DRangeScan::range_is_depth
  • Method mrpt::slam::CObservation3DRangeScan::project3DPointsFromDepthImage() can now also recover 3D point clouds from 3D range scans not in the "Kinect" depth format.
  • New method: CObservation3DRangeScan::doDepthAndIntensityCamerasCoincide()
  • New field CObservation3DRangeScan::intensityImageChannel
  • [mrpt-obs] New method mrpt::slam::CObservation3DRangeScan::project3DPointsFromDepthImageInto() which allows avoiding all the old twisted pathways for rendering 3D RGB+D point clouds from Kinect.
  • [mrpt-hwdrivers] mrpt::hwdrivers::CKinect:
  • Now reports the selected channel (visible/IR) into the field CObservation3DRangeScan::intensityImageChannel of grabbed objects.
  • [mrpt-base] All classes derived from mrpt::utils::CObjectPtr now have a proper "value_type" typedef with the most specific data type of the class being pointed by the smart pointer, overriding the inherited, too generic, mrpt::utils::CObject.
  • [mrpt-base] mrpt::utils::CImage:
  • New method mrpt::utils::CImage::getRowStride()
  • mrpt::utils::CImage::KLT_response() has been optimized for time.
  • [mrpt-base] mrpt::utils::CCanvas (which includes mrpt::utils::CImage):
  • New bitmapped font: "5x7". See mrpt::utils::CCanvas::selectTextFont()
  • [mrpt-base] MRPT moves from ANN to FLANN for kd-tree library, such as:
  • New namespace nanoflann, holding a modified version of FLANN.
  • A modified FLANN class has been created, nanoflann::KDTreeSingleIndexAdaptor, to allow building a kd-tree index and performing search without duplicating all the dataset within the KD-tree index.
  • FLANN has been also changed to avoid virtual functions in inner loops (mostly around nanoflann::ResultSet).
  • mrpt::math::KDTreeCapable maintains its API, so the change is backward compatible
  • The nanoflann project has been released separately: http://code.google.com/p/nanoflann/
  • [mrpt-base] templates mrpt::poses::getPoseMean() have been replaced by methods within each pose class, e.g: mrpt::poses::CPose2D::getPoseMean(), mrpt::poses::CPose3DPDFGaussianInf::getPoseMean(), etc.
  • [mrpt-base] Refactoring in pose PDF classes: The jacobiansPoseComposition() static method now lives in their base classes:
  • mrpt::poses::CPosePDF::jacobiansPoseComposition()
  • mrpt::poses::CPose3DPDF::jacobiansPoseComposition()
  • mrpt::poses::CPose3DQuatPDF::jacobiansPoseComposition()
  • [mrpt-base] Quaternions now also have Lie group exp() and ln() maps. See mrpt::math::CQuaternion
  • [mrpt-reactivenav] mrpt::reactivenav::CLogFileRecord has a new field "timestamp".
  • [mrpt-opengl & mrpt-gui] All text labels in 3D rendering windows are now drawn as OpenGL primitives instead of bitmaps, which are ~10x faster to draw. See mrpt::opengl::CTextMessageCapable
  • [mrpt-opengl & mrpt-gui] mrpt::opengl::CTextMessageCapable and mrpt::gui::CDisplayWindow3D now have an overloaded ::addTextMessage() method with many more font size/style options.
  • [mrpt-opengl] A new namespace with utility functions for rendering opengl stuff. See mrpt::opengl::gl_utils
  • mrpt::opengl::gl_utils::renderMessageBox(): Draws message boxes in OpenGL viewports
  • [mrpt-opengl] mrpt::opengl::CRenderizable (and all derived classes) now store colors as 4 u8 numbers instead of 4 doubles. All double-based APIs are maintained for backward compatibility.
  • [mrpt-opengl] mrpt::opengl::COpenGLViewport:
  • The "image display mode" is now based on glDrawPixels(), which is ~40 times faster than the old method.
  • It now emits pre/post rendering events (via the mrpt::utils::CObservable pattern), for the user to customize the rendering process. See example display3d_custom_render
  • [mrpt-opengl] mrpt::opengl::CTexturedObject now loads textures faster (not building mipmaps)
  • [mrpt-opengl] Removal of function mrpt::opengl::stock_objects::SICKLaser(), since it was seldom used, its rendering was too slow; so it does not make sense to deserve ~3Mb of source code to it
  • [mrpt-gui] New method CDisplayWindow3D::getDefaultViewport()
  • [mrpt-vision] New feature detectors: SSE2 optimized FASTER (-9,-10,-12), from libcvd
  • mrpt::vision::CFeatureExtraction
  • mrpt::vision::TFeatureType
  • [mrpt-vision] The feature tracker system in mrpt::vision::CGenericFeatureTracker has new parameters and functionality: automatic deletion of OOB features, more tunable params,...
  • [mrpt-vision] Field "IDSourceImage" renamed mrpt::vision::CFeature::user_flags to better reflect its intention.
  • Build system/external libs:
  • All the CMakeLists.txt of examples are now included into SVN and in source packages. These are now scripts ready for the user to copy them and start a new independent program, out of the MRPT source tree.
  • Update of Eigen3 to a more recent version (11-Jul-2011), which avoids warnings in MSVC x64
  • Automatic check for existence of system "libgtest-dev" not to build embedded version of Google unit testing library and link to system lib instead
  • Support for Intel threading blocks library (TBB). Enable it from the CMake option "MRPT_HAS_TBB"
  • Removal of old deprecated APIs:
  • Header has been removed (it was emitting a warning about deprecation since 0.9.0 - Jun 2010)
  • mrpt::vision ::trackFeatures() methods -> replace with mrpt::vision::CGenericFeatureTracker
  • mrpt::topography ::coordinatesTransformation_WGS84(), mrpt::topography::coordinatesTransformation_WGS84_geocentric() -> replace with mrpt::topography::geodeticToENU_WGS84()
  • mrpt::poses::CProbabilityDensityFunction ::getEstimatedCovariance() -> replace with mrpt::poses::CProbabilityDensityFunction::getCovariance()
  • mrpt::poses::CPose3DPDF ::getEstimatedPose() -> mrpt::poses::CPose3DPDF::getMean()
  • mrpt::poses::CPosePDF ::getEstimatedPose() -> mrpt::poses::CPosePDF::getMean()
  • mrpt::poses::CPointPDF ::getEstimatedPoint() -> mrpt::poses::CPointPDF::getMean()
  • mrpt::poses::CPoint2DPDF ::getEstimatedPoint() -> mrpt::poses::CPoint2DPDF::getMean()
  • mrpt::poses::CPose3DPDFGaussian constructor from CMatrixD -> Use constructor from fixed-size matrix.
  • mrpt::random global functions -> replace with method of object mrpt::random::randomGenerator or instantiate your own mrpt::random::CRandomGenerator
  • New examples:
  • offscreen-render - A demo program to load a 3D scene and render it off-screen (in memory) at any arbitrary size, even larger than the screen - r2575.
  • display3d_custom_render
  • captureVideoAndBuildPyr - A GUI live demo to test the effects of the options while building an image pyramid.
  • rgbd_dataset2rawlog - A tool for convering RGB+D TUM datasets to rawlogs.
  • kinect_online_offline_demo - See http://www.mrpt.org/Switching_between_reading_live_Kinect_RGBD_dataset_for_debugging
  • New datasets:
  • malaga-cs-fac-building.simplemap.gz - A new prebuilt simplemap of the ground floor of one Computer Science building (Malaga University) - r2575.
  • test_rtk_path.rawlog - A short sequence of 3 RTK GPS readings, for usage within unit tests of mrpt-topography
  • Build error FIXES:
  • Build error in platforms that don't support SSE2
  • Build error when OpenCV exists but is not used.
  • Build error in mrpt-hwdrivers with latest OpenCV 2.3
  • Linking error with MinGW around the mrpt::opengl::posePDF2opengl() templates - r2567
  • Error compiling against wxWidgets 2.9.2 (wrong usage of wxDECLARE_CLASS instead of wxDECLARE_DYNAMIC_CLASS)
  • BUG FIXES:
  • [mrpt-obs] Wrong usage of focal distances "fx""fy" when generating the 3D point clouds from Kinect observations with the method mrpt::slam::CObservation3DRangeScan::project3DPointsFromDepthImage()
  • [mrpt-hwdrivers], [mrpt-obs] Gyroscopic rotation rates in yaw and roll were stored in the wrong order in mrpt::hwdrivers::CIMUXSens and mrpt::slam::CObservationIMU. It has been fixed so new grabbed data is saved correctly but also such as old datasets are automatically fixed when loading them.
  • [mrpt-topography] Fixed an old bug in mrpt::topography::path_from_rtk_gps() (and added new unit tests to avoid the same happening in the future)
  • Example: samples/bayesianTracking: Fixed an incorrect reset of all particles weight at each iteration
  • Fixed memory leak when using SURF descriptors. Thanks "hochdorfer" for detecting and reporting the solution.
  • RawLogViewer: Wrong depth to grayscale conversion while displaying 3D range observations.

New in Mobile Robot Programming Toolkit 0.9.4 (Oct 11, 2011)

  • Changes in applications:
  • kf-slam: Now supports two implementations 2D and 3D EKF-SLAM (it was always 3D SLAM previously).
  • rawlog-grabber: Added "hokuyo_UXM.ini" to support HOKUYO UXM laser series.
  • mrpt-performance has been refactored into several smaller .cpp files. Having all in one big file lead to memory depletion when building in small machines (e.g. Debian MIPS & S390 autobuilders).
  • New application: kinect-3d-view . It was formerly an example, now it's an application so it's much easier for everyone to try it without compile manually.
  • SceneViewer3D: Support for Stanford's PLY file format. See http://www.mrpt.org/Support_for_the_Stanford_3D_models_file_format_PLY
  • d-slam-demo can now simulate spurious readings.
  • ReactiveNavigationDemo: New checkbox to enable generating navigation logs, viewable with navlog-viewer.
  • rawlog-edit: New operation "--list-images".
  • MRPT libraries or "modules":
  • mrpt-detectors is no longer marked as "experimental".
  • mrpt-monoslam is no longer shown in the graph of libraries since it's unmaintained.
  • Build system:
  • Embedded Eigen version updated to release Eigen 3.0.1 (May 30th 2011).
  • Linux/Mac: Don't enable BUILD_KINECT by default if libusb1-dev is not present.
  • Win64: Fixed building warnings and errors with MSVC9
  • MinGW: Fixed building.
  • Fixed compiling with MSVC 2005 (Patch by Z.P.Gaal)
  • Fixed compiling under MIPS/SPARC/S930/... due to a bug in Eigen3-beta (patch sent upstream and fixed in local copy).
  • Fixed new warnings detected by GCC 4.6.
  • Fixed build errors against latest changes in eigen3-beta4 (before their release version).
  • MSVC 2010: MRPT now uses standard "stdint.h" if provided by the compiler, instead of pstdint.h
  • OSX: Fixed all build errors (Thanks to JÃrôme Monceaux, http://www.mrpt.org/node/618 )
  • Automatic detection of SSE2 and SSE3 support in the CMake script.
  • Faster build with GCC thanks to changes in precompiled headers (build time cut by 25-50%)
  • New classes:
  • [mrpt-base] mrpt::math::ModelSearch: A RANSAC + Genetic model fitter (by Zoltan Gaal)
  • [mrpt-base] mrpt::utils::PLY_Importer & mrpt::utils::PLY_Exporter: Support for Stanford's PLY file format in different 3D point cloud classes. See also: http://www.mrpt.org/Support_for_the_Stanford_3D_models_file_format_PLY
  • [mrpt-obs] mrpt::slam::CSinCosLookUpTableFor2DScans: A cache of sin/cos values. It's used in points maps and now inserting laser scans in a point cloud is ~3 times faster.
  • [mrpt-opengl] mrpt::opengl::CTextMessageCapable: A refactoring of the capability to display text messages on opengl views.
  • [mrpt-hwdrivers] mrpt::hwdrivers::CIbeoLuxETH a driver for Ibeo Lux laser scanners through Ethernet. Contributed by Jan Girlich, University of Hamburg.
  • Support for "reflectivity" maps and observations:
  • [mrpt-obs] mrpt::slam::CObservationReflectivity
  • [mrpt-maps] mrpt::slam::CReflectivityGridMap2D
  • [mrpt-maps] mrpt::slam::CLogOddsGridMap2D, a new class due to a refactoring of mrpt::slam::COccupancyGridMap2D.
  • Changes in classes:
  • [mrpt-bases] mrpt::utils::CImage changes:
  • Some methods have been optimized for use of SSE2/SSE3 functions, falling back to the (slowerOpenCV functions when it's not possible.
  • Implementation separated into different CImage_*.cpp files.
  • More tolerant dealing with builds without OpenCV: don't launch an exception until something really important can't be done.
  • [mrpt-base] mrpt::poses::CPose3D was too strict in checking that the rotation matrix is orthogonal: admisible threshold is now 1 (plus/minus)3e-3.
  • [mrpt-base] New method: mrpt::utils::CThreadSafeQueue::get_lastest_purge_old()
  • [mrpt-base] mrpt::synch::CSemaphore now supports named semaphores in Linux too.
  • [mrpt-base] Graph-SLAM maps (mrpt::poses::CNetworkOfPoseshave a new field "edges_store_inverse_poses", taken into account in mrpt::poses::CNetworkOfPoses::dijkstra_nodes_estimate()
  • [mrpt-base] mrpt::poses::CPose3DQuat constructor from a mrpt::poses::CPose3D is not explicit to avoid unintentional conversions.
  • [mrpt-hwdrivers] mrpt::hwdrivers::CKinect changes:
  • mrpt::hwdrivers::CKinect::setVideoChannel(): New method (and .ini parameterfor switching between the RGB and IR channels for the intensity images.
  • The posibility of grabbing the IR channel is also now available in mrpt::hwdrivers::prepareVideoSourceFromUserSelection(, the camera-calib application, etc...
  • libfreenect is now also supported in Windows.
  • An embedded version of libfreenect is used for both Linux/Windows, so it's not required anymore to download and build that project separately. Read http://www.mrpt.org/Kinect_and_MRPT
  • Improved robustness and efficiency in grabbing.
  • [mrpt-hwdrivers] Improvement in Kinect Linux driver (libfreenect), avoiding intensive usage of critical sections (Thanks, "Gonzales" - see: http://www.mrpt.org/node/491 )
  • [mrpt-hwdrivers] Kinect: Embedded libfreenect library updated to latest GIT revision (31/MAY/2011).
  • [mrpt-hwdrivers] mrpt::hwdrivers::CHokuyoURG now support ethernet connection (tested in HOKUYO UXM series)[JRRS].
  • [mrpt-gui] mrpt::gui::CDisplayWindow3D now emits a new event. See mrpt::gui::mrptEvent3DWindowGrabImageFile
  • [mrpt-gui] Creation and destruction of windows have a timeout, which is not configurable via an optional environment variable "MRPT_WXSUBSYS_TIMEOUT_MS" (milliseconds). This is useful to increase that timeout if debugging with valgrind.
  • [mrpt-maps] mrpt::slam::CPointsMaps: Inserting 2D laser scans is now ~3 times faster (thanks to mrpt::slam::CSinCosLookUpTableFor2DScans).
  • [mrpt-obs] mrpt::slam::CObservation3DRangeScan::project3DPointsFromDepthImage:
  • Now uses by default a LUT to speed up (~10%the conversion of range images to 3D point clouds in Kinect.
  • Addition of SSE-optimized code for point cloud proyection when using the LUT.
  • [mrpt-opengl] mrpt::opengl::COpenGLViewport now has a special "image mode" which makes very easy to render images to opengl windows efficiently. See the example "opengl_video_viewport_demo".
  • [mrpt-opengl] mrpt::opengl::CTexturedObject (+derived classesnow are more efficient creating OpenGL's texture mipmaps.
  • [mrpt-slam] mrpt::slam::CICP has a new option: skip_cov_calculation that can save some time in some cases.
  • [mrpt-vision] mrpt::slam::CLandmarksMap::simulateRangeBearingReadings(now also simulates spurious readings.
  • [mrpt-vision] mrpt::slam::CLandmarksMap now has new fields in the insertionOptions and likelihoodOptions to allow users control the exact parameters of SIFT detectors/descriptors.
  • [mrpt-vision] Added missing rbegin(and rend(methods to mrpt::vision::CFeatureList
  • [mrpt-vision] Backward incompatible change in the ABI/API of mrpt::vision::CFeatureExtraction::detectFeatures(): The optional mask is now passed as a pointer instead of a const ref to avoid linking errors in MSVC.
  • [mrpt-reactivenav] Clean up of code and smarter detection of mismatches in precomputed collision grid files.
  • [mrpt-bayes] Kalman filter: If the prediction heuristics in mrpt::bayes::CKalmanFilterCapable::OnPreComputingPredictions(fails it doesn't raise an exception anymore but recompute all the required matrices, sending a performance warning to console.
  • Changes in examples:
  • hokuyo_laser_test. Now it's possible to choose between USB and Ethernet connection.
  • New examples:
  • opengl_video_demo: A demo of opengl textures from a video stream.
  • opengl_video_viewport_demo: A demonstration of the new viewport "image mode".
  • BUG FIXES:
  • [mrpt-opengl] Fixed wrong normalization of proyected coordinates in mrpt::opengl::CRenderizable::TRenderInfo::projectPoint()
  • [mrpt-reactivenav] Fixed an ancient bug in mrpt::reactivenav::CParameterizedTrajectoryGenerator::lambdaFunction(that degraded the use of some PTGs.
  • [mrpt-gui] Fixed an old bug that lead to SEGFAULTs in the wxWidgets thread if an exception suddenly closed the program without that thread having time to clean exit.
  • Fixed behavior of mrpt::system::os::kbhit(in Linux.
  • Fixed a kind of memory-leak in OpenGL due to the particular way of reserving texture names (seem to only affect some OpenGL implementations, but it's fixed now).
  • Fixed another OpenGL memory-leak happening when destructors of display lists were called from a different thread than the rendering thread (where they were created).
  • Octree-based rendering of point cloud didn't discard all invisible nodes, not doing an optimal rendering.
  • Fixed situations were RTTI registrations were not updated before usage, leading to "uregistered class?" exceptions.
  • [mrpt-bayes] Kalman filter: Fixed wrong use of use_analytic_transition_jacobian instead of use_analytic_observation_jacobian (thanks "bgrigorian"!)
  • [mrpt-base] Fixed out of buffer access in mrpt::math::CSparseMatrix::cs2dense(when the sparse matrix still is in the triplet format.
  • pf-localization: Fixed wrong execution of batchs of experiments when "experimentRepetitions" >

New in Mobile Robot Programming Toolkit 0.9.3 (Oct 11, 2011)

  • Most important changes:
  • MRPT now relies entirely on Eigen (version 3for matrix and vector classes.
  • Support for Microsoft Xbox Kinect. See mrpt::hwdrivers::CKinect and this page: http://www.mrpt.org/Kinect_and_MRPT
  • Many new functions in mrpt::vision
  • More efficient rendering of all mrpt::opengl classes thru automatic caching of OpenGL display lists.
  • Detailed list of changes:
  • Changes related to mathematics, matrices and containers and the port to Eigen:
  • All is now based on the Eigen library, v3. See this page for a more complete description of all the changes and the reasons of this big change.
  • Matrices constructors from poses (TPose2D,...now are explicit. Example: Previous code "CMatrixDouble31 m = myPose2D;" won't build now, should be: "CMatrixDouble31 m = CMatrixDouble31(myPose2D);"
  • CVectorFloat and CVectorDouble are not synonymous with mrpt::vector_float and mrpt::vector_double.
  • mrpt::math::meanAndCov(overloads have been separated into: meanAndCovVec(and meanAndCovMat()
  • method unit(in matrices was inconsistent between fixed and dynamic sized matrices. It's now unified (see Eigen::Matrix::unit)
  • Types mrpt::vector_float and std::vector (or the "double" versionsare not interchangeable any more. Read more on this in the link above.
  • These examples have been removed: benchmark-matrix, math_iterators_test, matrix_views
  • New application:
  • kinect-3d-slam.
  • Changes in applications:
  • SceneViewer3D: Now has new options to visualize and tune the octree structures of point clouds.
  • GridmapNavSimul: Now can load a custom grid map and save rawlogs in the two existing formats.
  • pf-localization: Now can also handle observations-only rawlogs.
  • Deleted classes:
  • mrpt::slam::CConsistentObservationAlignment: It implemented the Lu & Milios algorithm, now superseded by graph-slam methods. See the mrpt::graphslam namespace.
  • mrpt::utils::CImageFloat: For real images with float pixels, it's better to directly use OpenCV. For matrices, there're many other matrix classes better suited for that. There is now also a new explicit constructor in mrpt::utils::CImage able of converting matrices into images, covering the possibly unique utility of the deleted class.
  • Changes in classes:
  • mrpt::gui::CDisplayWindow::showImageAndPoints(now also displays the index of the feature (if required).
  • mrpt::vision::CFeature now has new members:
  • nTimesSeen, nTimesNotSeen, nTimesLastSeen. Counters for performing tracking of the feature visibility.
  • initialDepth. The computed 3D distance from the camera to the 3D real feature the first time it was seen.
  • detph. The computed 3D distance from the camera to the 3D real feature.
  • p3D. The 3D coordinates of this feature when projected into 3D space.
  • multiScales. A vector containing the set of different scales at which the SIFT-like descriptor must be computed.
  • multiOrientations. For each scale in multiScales there is a vector containing the main orientations of the feature.
  • descriptors.multiSIFTDescriptors. For each scale and orientation there is a SIFT-like descriptor.
  • multiHashCoeffs. For each descriptor, a 3-d vector containing its Hash coefficients computed through the Haar wavelets.
  • hasDescriptorMultiSIFT(). Indicates if the multi-resolution SIFT-like descriptor has been computed for this feature.
  • New method mrpt::gui::CDisplayWindow3D::getRenderingFPS()
  • Both mrpt::opengl::CPointCloud and mrpt::opengl::CPointCloudColoured are now much more optimized to render huge point clouds:
  • Smart rendering based on Octrees to determine which volumes are within the frustum.
  • For each octree volume, smart decimation of the points from the points-to-eye distance: why rendering 1e6 points that will all be seen in a 10x10 pixel area?
  • New method mrpt::utils::CClientTCPSocket::getReadPendingBytes()
  • New method mrpt::opengl::COpenGLScene::visitAllObjects()
  • Many mrpt::opengl classes now are derived from a display-list-cached base class (mrpt::opengl::CRenderizableDisplayList)
  • mrpt::utils::CStream now has two new methods (mrpt::utils::CStream::ReadBufferFixEndianness & mrpt::utils::CStream::WriteBufferFixEndiannessto correctly handle arrays of elemental data types so they are saved in MRPT endianness standard (see http://www.mrpt.org/Serialization).
  • Changes in functions:
  • mrpt::vision::matchFeatures(). Implemented a new method for managing ambiguous matches, now taking into account which of the conflicting matches is the most probable.
  • New structures/classes:
  • mrpt::hwdrivers::CKinect: Support for grabbing XBox Kinect. Read the class documentation for more details.
  • TMultiResDescMatchOptions. Struct containing the options when matching multi-resolution SIFT-like descriptors.
  • TMultiResDescOptions. Struct containing the options when computing the multi-resolution SIFT-like descriptors.
  • mrpt::aligned_containers: A helper template to ease the declaration of STL containers with the correct Eigen aligned allocators.
  • mrpt::opengl::CRenderizable::TRenderInfo: Helper struct to help OpenGL objects to render more efficiently by predicting their rendering conditions
  • mrpt::opengl::CRenderizableDisplayList, a class to automate the caching of OpenGL objects via Display Lists.
  • New functions:
  • mrpt::vision::computeGradient(). Computes the gradient of certain pixel within the image.
  • mrpt::vision::computeMainOrientations(). Computes the main orientations (within 80% of the peak value of orientation histogramof a certain point within an image (for using in SIFT-based algorithms)
  • mrpt::vision::computeHistogramOfOrientations(). Computes the SIFT-like descriptor of a certain point within an image at the base scale, i.e. its rotated orientation histogram.
  • mrpt::vision::interpolateHistEntry(). Inserts the orientation value of a certain pixel within the keypoint neighbourhood into the histogram of orientations.
  • mrpt::vision::computeMultiResolutionDescriptors(). Computes the multi-resolution SIFT-like descriptor of a set of matched features
  • mrpt::vision::matchMultiResolutionFeatures(). Matches two CFeatureList containing mulit-resolution descriptors.
  • mrpt::vision::setProperScales(). Computes the initial and final scales where to look when finding a match between multi-resolution features.
  • mrpt::vision::computeSAD(). Calculates the Sum of Absolutes Differences (range [0,1]between two patches.
  • mrpt::vision::computeMoreDescriptors(). Computes and adds more multi-resolution descriptor to certain feature at lower or upper scales.
  • mrpt::vision::setProperScales(). Determines the range of scales where to look according to the depth of the involved features.
  • mrpt::system::createThread now also has overloaded versions for the thread functions having arguments passed by reference.
  • New examples:
  • keypoint_matching. It contains three different methods:
  • Feature extraction and stereo matching process from a pair of images. It show stadistics about the number of detected and matched features for each method.
  • Feature extraction, stereo matching and re-projection to 3D from a pair of images.
  • Feature extraction and computation of the matching score for each feature in list1 and for each in list2 with four different methods: FAST, NCC, SIFT and SURF. Graphical results are shown.
  • octree_render_huge_pointcloud
  • BUG FIXES:
  • Serialization dumps of many objects (observations, maps,...should be now compatible between big and little endian architectures.
  • Doing a clear(on mrpt::slam::CColouredPointsMap didn't actually clear the internal vectors for RGB+Distance values.
  • mrpt::utils::net::DNS_resolve_async didn't work properly.
  • RawlogViewer, module "Raw-map": It didn't display or save the robot path for observations-only rawlogs.
  • Fixed exception when rendering a mrpt::opengl::CPointCloud with no points in it.
  • Fixed bad computation of SAD in mrpt::vision::matchFeatures(because bad usage of IplImage fields width and widthstep.
  • Fixed vision::CImage::update_patch(). Row and column checkings of the patch position were wrongly related to image width and height, respectively.
  • Fixed CVE-2010-0280: Array index error in Jan Eric Kyprianidis lib3ds 1.x, as used in Google SketchUp 7.x before 7.1 M2, allows remote attackers to cause a denial of service (memory corruptionor possibly execute arbitrary code via crafted structures in a 3DS file, probably related to mesh.c.

New in Mobile Robot Programming Toolkit 0.9.2 (Oct 11, 2011)

  • Most important changes:
  • Basic support for Graph-SLAM. Among others, see mrpt::poses::CNetworkOfPoses, the new namespace mrpt::graphslam and the program graph-slam
  • First working version of Sparse Bundle-Adjustment (see mrpt::vision::bundle_adj_full).
  • New hardware supported: Phidget kits & Fiber Optic Gyro KVH DSP3000 (both contributed by Adrien Barral, Robopec).
  • Tons of performance optimizations, mostly in geometry classes.
  • Backward incompatible changes:

New in Mobile Robot Programming Toolkit 0.9.1 (Oct 11, 2011)

  • Most important changes:
  • CRITICAL REGRESION FIXED: The program rbpf-slam did always crash at start-up in MRPT 0.9.0.
  • Changes in libraries:
  • Further factorization: New libraries: mrpt-detectors, mrpt-bayes and mrpt-scanmatching .
  • Dependencies simplified - most notably, mrpt-gui is now not included by many libraries that did in previous versions (check the deps graph ).
  • Important: Due to this last change, you may need to add a #include when using mrpt::gui classes in places where formerly a #include was enough.
  • Many new stuff and improvements in mrpt-vision, e.g. mrpt::vision::CGenericFeatureTracker, mrpt::vision::CFeatureList, etc.
  • Support for Videre Stereo cameras (By Cyril Gerber, thanks!)
  • New command-line dataset manipulation tool: rawlog-edit.
  • Fixed support for pkg-config with a new set of libmrpt-*.pc files (see new example MRPT/doc/mrpt_example1-with-Makefile and this page).
  • Detailed list of changes:
  • Changes in build system:
  • Fixed support for pkg-config with a new set of libmrpt-*.pc files (see new example MRPT/doc/mrpt_example1-with-Makefile and this page).
  • Further factorization: New libraries: mrpt-detectors, mrpt-bayes and mrpt-scanmatching .
  • Dependencies simplified - most notably, mrpt-gui is now not included by many libraries that did in previous versions (check the deps graph ).
  • New CMake switch: "MRPT_BACKCOMPATIB_08X": Enabled by default; if disabled, some backward compatibility definitions are not declared. Useful to prepare code for future MRPT versions where deprecated definitions and names will be removed.
  • Changes in applications:
  • camera-calib can now open SwissRangers 3D cameras as well for real-time calibration.
  • rawlog-grabber: New config file optional argument: "rawlog_GZ_compress_level" to settle the desired GZ-compression level of rawlogs.
  • Changes in classes:
  • mrpt::utils::CImage:
  • It now has a new method (setFromImageReadOnlyand a new constructor as UNINITIALIZED_IMAGE.
  • New alternative checkerboard detector algorithm (by Scaramuzza et al.). See mrpt::utils::CImage::findChessboardCorners for references and more details.
  • findChessboardCorners(is no longer a method of CImage, but a function in mrpt::vision (see mrpt::vision::findChessboardCorners).
  • New method to compute KLT response at any given position: mrpt::utils::CImage::KLT_response
  • New efficient constructor to build a grayscale version of another image, or a fast "link" if it was already grayscale. See CImage::CImage( img, FAST_REF_OR_CONVERT_TO_GRAY )
  • Many classes: UNINITIALIZED_* which were #defines have been transformed into enums to keep all that stuff into MRPT namespaces.
  • mrpt::reactivenav::CReactiveNavigationSystem does not have any longer the "debugWindows" option. This is done to remove the dependecy of mrpt-reactivenav on mrpt-gui.
  • mrpt::vision::CFeatureExtraction has a new option FASTOptions.use_KLT_response.
  • mrpt::slam::CObservation now has virtual load(and unload(method to manually invoke delayed-load (actually only needed by 3D camera observations).
  • stlplus::smart_ptr templates now have an extra template argument "COUNTER" which defaults to an thread-safe atomic counter but can be set to a plain "unsigned int" in time-critical apps which are known to work in a single thread.
  • mrpt::utils::CStream now handles sizes as uint64_t instead of size_t, to allow files larger than 4Gb in 32bit systems.
  • mrpt::hwdrivers::prepareVideoSourceFromUserSelection(now also displays as an option to grab images from SwissRanger 3D cameras.
  • mrpt::hwdrivers::CCameraSensor can now open SwissRanger 3D cameras.
  • mrpt::vision::CFeatureList now has KD-tree-based search.
  • mrpt::slam::CColouredPointsMap:
  • Added a few new methods to modify and retrieve the color of points already in the map.
  • mrpt::hwdrivers::CGenericSensor:
  • Now has a generic interface for external image directories (it was only in CCameraSensor before), so more sensors can use this feature.
  • The sensor label member is now "m_sensorLabel" in this base class, instead of replicating it in all children classes.
  • mrpt::slam::CObservation3DRangeScan:
  • The confidence channel is stored as an image instead of a matrix to optimize memory and disk space.
  • New "auto-calibration" method: CObservation3DRangeScan::recoverCameraCalibrationParameters
  • mrpt::hwdrivers::CSwissRanger3DCamera is now prepared to store intensity & confidence channels to external image files to save rawlog storage size.
  • mrpt::utils::CStream now has methods for sending/receiving messages in a predefined frame format. See mrpt::utils::CStream::receiveMessage, mrpt::utils::CStream::sendMessage.
  • mrpt::utils::CConfigFileMemory has a new method getContent().
  • Template mrpt::utils::TParameters now has typedefs mrpt::utils::TParametersDouble, mrpt::utils::TParametersString and many new methods. See the example params-by-name.
  • New method TCamera::scaleToResolution(for scale camera calibration params for different resolutions.
  • In mrpt::slam::CMetricMap
  • New method loadFromSimpleMap((fast inline call to loadFromProbabilisticPosesAndObservations, with a better name!).
  • The method alignBylikelihoodHillClimbing(has been removed, since it didn't make sense there and was a pretty old and unefficient implementation.
  • In mrpt::slam::CSimpleMap:
  • New methods loadFromFile(and saveToFile().
  • Added STL-like iterators and such.
  • mrpt::slam::CObservationGPS: Fixed const'ness of the getAsStruct(methods.
  • Absolute pixel coordinates are now permited where previously there were only factors over width/height. See:
  • mrpt::opengl::COpenGLViewport::setViewportPosition and mrpt::opengl::COpenGLViewport::getViewportPosition.
  • mrpt::gui::CDisplayWindow3D::addTextMessage.
  • CMyGLCanvasBase::renderTextBitmap (now accepts negative pixel coords as well, meaning to wrap).
  • mrpt::hwdrivers::CGenericSensor::registerClass is now public.
  • All MRPT containers (mrpt::vector_double, all kind of matrices, arrays, etcnow have two new methods for saving to and loading from text files "as vectors", i.e. even for matrices, all the elements are saved/loaded as a simple sequence:
  • loadFromTextFileAsVector
  • saveToTextFileAsVector
  • mrpt::hwdrivers::CActivMediaRobotBase can now transparently open serial ports >COM4 in Windows without the prefix "\\.\" (it's added automatically if needed).
  • The ANN library has been moved from mrpt-maps to mrpt-base (still can be reached at the same path under . This is to allow more code to use KD-trees without depending on mrpt-maps.
  • mrpt::vision::TPixelCoordf now holds "float" coordinates instead of "double" since: it's enough for pixels, to save memory, and for consistency in name suffixes "f".
  • mrpt::utils::CCanvas now uses TColor as color data type, instead of "int"s (finally!).
  • New functions:
  • mrpt::math::kmeans, mrpt::math::kmeanspp: Efficient implementations of k-means and k-means++ algorithms. By David Arthur (Standford, USA(See http://www.stanford.edu/~darthur/kmpp.zip ).
  • mrpt::vision::findMultipleChessboardsCorners
  • mrpt::vision::camera_calib_ba is a new method based on Bundle-Adjustment to calibrate a camera from the tracking of a set of random points.
  • Added > operators to mrpt::math::CArrayNumeric classes to dump/read them with MRPT's mrpt::utils::CStream streams.
  • mrpt::topography::ENUToGeocentric
  • mrpt::gui::CMyGLCanvasBase::textBitmapWidth, a new function to compute the width of a bitmap string.
  • New classes:
  • mrpt::hwdrivers::CStereoGrabber_SVS: New class to grab from a Videre Stereo camera (By Cyril Gerber, thanks!). Support has been also built into mrpt::hwdrivers::CCameraSensor.
  • New hierarchy of computer vision detectors/detectable objects. See new namespace mrpt::detectors for the new library mrpt-detectors.
  • mrpt::math::CSparseMatrix for efficient sparse matrix computations (based on code from robotvision & the CSparse library - see the class doc for more details and credits).
  • New generalized KD-tree pattern class: mrpt::math::KDTreeCapable, previously used only for points of maps, now used in more places.
  • Feature tracking for images now has a set of different implementations. See mrpt::vision::CGenericFeatureTracker
  • mrpt::slam::CObservationStereoImagesFeatures to hold the minimum information needed by a stereo SLAM back-end algorithm.
  • New applications:
  • track-video-features: A demonstration of robust feature detection and tracking on a video/live camera stream. See http://www.mrpt.org/Application:track-video-features
  • New examples:
  • kmeans
  • params-by-name
  • checkerboardDetectors
  • multipleCheckerboards
  • face-detector
  • Global settings:
  • New global variable mrpt::global_settings::POINTSMAPS_3DOBJECT_POINTSIZE
  • BUGFIXES:
  • CRITICAL REGRESION FIXED: The program rbpf-slam did always crash at start-up in MRPT 0.9.0.
  • Fixed annoying JavaScript error in CHM documentation.
  • Fixed bug when accessing matrixes in CKalmanFilterCapable.h if the OBS_SIZE and the FEAT_SIZE parameters are different.
  • Fixed crash (on non Win32when calling mrpt::system::joinThread on an empty thread handle.
  • Error in CStream-classes handling files larger than 4Gb.
  • Fixed build with BUILD_SHARED_LIBS=OFF under Visual Studio.
  • Fixed: RANSAC won't use the last input data point (Thanks "Stephane" for reporting!)
  • mrpt::slam::COccupancyGridMap2D::TLikelihoodOptions::loadFromConfigFile ignored the "section" name for loading "likelihoodMethod" (reported by Thomas Ciarfuglia, Università di Perugia).
  • Fixed build error when compiling without OpenGL/GLUT support.
  • The method mrpt::slam::CColouredPointsMap::insertPoint( float x, float y, float z, float R, float G, float B was declared but not defined.
  • Fixed ignoring the first time ALT+ENTER is pressed in mrpt::gui::CDisplayWindow3D
  • Fixed compilation against older OpenCV versions 1.1.0 and 2.0.0.

New in Mobile Robot Programming Toolkit 0.9.0 (Oct 11, 2011)

  • Most relevant changes:
  • New minor version number started (0.9.0due to incompatible changes in the ABI and in some parts of the API (read below for "Important changes in the API").
  • The previous "mrpt-core" library has been split into several smaller libs for better modularity, less dependencies of user programs and faster recompiling.
  • Compile/build: Support for MSVC 2010.
  • Support for the 3D cameras SR3000/SR4000. See mrpt::hwdrivers::CSwissRanger3DCamera and this example.
  • The library mrpt-htmslam is now part of public MRPT releases (I tried to also release hmt-slam-gui but it would delay for too long... still in SVN only for now).
  • The program 'icp-slam', and mrpt::slam::CMetricMapBuilderICP, are now capable of handling two kinds of rawlogs: based on CSensoryFrame's (as usual), and the newest only containing CObservation's. Note however that ICP-SLAM now requires all odometry actions/observations to have a valid timestamp (very old datasets

New in Mobile Robot Programming Toolkit 0.8.1 (Oct 11, 2011)

  • A very large reorganization and improvement of "mrpt::math". Thanks to Pablo Moreno for his big work here.
  • Added a forward declarations header
  • New header with general arithmetic operations applicable to vectors, arrays and matrices of any kind.
  • Most matrix template implementations moved to . User code that already included will need no change to keep compiling OK.
  • More small functions marked as inline.
  • Fixed some specializations that weren't actually called due to issues with forward declarations.
  • Clean up of the mrpt::math namespace by moving auxiliary functions to mrpt::math::detail.
  • All kind of matrices now have dozens of common methods (multiply, leftDivide, rightDivide, inverse, det, eigenValues,...); this includes matrix views.
  • Added md5 cryptographic hash function to utils.
  • MRPT can be now built in Win64.
  • Sonar observations are now processed in point maps. See CSimplePointsMap::insertObservation for arguments of type mrpt::slam::CObservationRange.
  • More robust wxSubsystem in mrpt::gui classes.
  • Occupancy grid maps now have a method to simulate sonar sensors. See COccupancyGridMap2D::sonarSimulator.
  • All 3D objects in mrpt::opengl now have a visible/invisible property. See mrpt::opengl::CRenderizable::setVisibility
  • D views (mrpt::gui::CDisplayWindow3D and mrpt::gui::CMyGLCanvasBasenow have:
  • Functions to determine the 3D rays for coordinates picked by the user with the mouse. See the example "display3D".
  • A way to obtain the camera pose as a CPose3D object (see COpenGLViewport::getCurrentCameraPose).
  • New application: navlog-viewer. A GUI tool to reproduce and examine navigation logs. See the applications wiki for more details.
  • mrpt::opengl::CTexturedObject, a new base class to factor code for all mrpt::opengl classes loading/unloading texture images.
  • Particle filters now have new options: verbose, pfAuxFilterOptimal_MLE.
  • read_bool(for INI-like files now accepts "yes/no" and "true/false" apart from "1/0".
  • mrpt::utils::CTimeLogger now can export all the timing data to a CSV file.
  • mrpt::math::CQuaternion has been "modernized": it now inherits from CArray and many methods are inline and templates.
  • An important refactoring of code in all Particle Filters, both for localization and RBPF-mapping. As a result, with thousands lines of code less, many more algorithms and applications are now supported:
  • The following classes: mrpt::poses::CPosePDFParticles, mrpt::slam::CMultiMetricMapPDF now support any combination of these algorithms:
  • pfStandardProposal (SIR), sample size: fixed OR KLD-based dynamic size, different resampling strategies (mrpt::bayes::CParticleFilter::TParticleResamplingAlgorithm).
  • pfAuxiliaryPFStandard (APF), sample size: fixed OR KLD-based dynamic size.
  • pfAuxiliaryPFOptimal (Blanco et al.), sample size: fixed OR KLD-based dynamic size.
  • mrpt::system::aligned_malloc and family now work on all OS's and are used to align the memory of rows in dynamic matrices.
  • Due to many enhancements in the "template-fication" of MRPT, it's no longer equivalent to use std::vector or vector_double, etc... The later form is the only one supported.
  • New set of classes to allow operating on a transformation of a matrix without building the auxiliary matrix, e.g. transpose, submatrices, etc... See mrpt::math::CMatrixView
  • The following classes have fully STL-like iterators, reverse_iterators and container-like methods (begin(),end(),...):
  • mrpt::math::CMatrixFixedNumeric (and derived classes)
  • mrpt::math::CMatrixTemplate (and derived classes)
  • mrpt::math::CArray (and derived classes)
  • Application 2d-slam-demo:
  • It now supports command-line arguments. Try "2d-slam-demo --help"
  • Several improvements in the GUI.
  • Functions modified as templates to allow its usage with a wider variety of parameter types:
  • mrpt::math::estimateJacobian, mrpt::math::homogeneousMatrixInverse
  • New "STL extension" class: mrpt::utils::bimap, a bidirectional equivalent of std::map.
  • Reorganization of header : it now actually includes a few new headers, one for each important class.
  • News in Kalman Filter implementation:
  • New option to compute custom "new landmark"'s covariance, which is needed by, eg. MonoSLAM. The old version of "OnInverseObservationModel" still exists for backward-compatibility. See the new mrpt::bayes::OnInverseObservationModel.
  • Implementing the Jacobians is now optional. If the corresponding virtual methods are not implemented, it will be automatically detected and numeric approximation of the Jacobians will be estimated.
  • All plots based on wxMathPlot now has a new entry in the popup menu for printing the plot to PS/PDF.
  • wxMathPlot updated to version 0.1.2 (Dec-2009).
  • Poses and point classes in mrpt::poses now have the operator[], usable in the new template constructor of mrpt::math::CArrayNumeric
  • mrpt::utils::CLoadableOptions now also allows writting the configuration to files, not only reading.
  • Build system:
  • Fixed the detection of some standard functions (erfc,lrint,...under GCC for defining the HAVE_XXX's in config.h
  • New small functions:
  • mrpt::math::chi2PDF, mrpt::math::chi2CDF, mrpt::math::noncentralChi2CDF (adapted from code in the Vigra project).
  • trace((in all matrices), mrpt::math::KLD_Gaussians, mrpt::math::condidenceIntervals
  • mrpt::random::random_generator_for_STL
  • New examples:
  • math_iterators_test
  • BUGFIXES:
  • mrpt::hwdrivers::CBoardSonars was not automatically registered as CGenericSensor.
  • Fixed compiling with ARIA disabled.
  • mrpt::utils::CSimpleDataBase: fixed crash when loading a record with an empty string in any field.
  • Linux only: Fixed errors compiling with glut.h instead of freeglut.h (Thanks rhn for reporting).
  • Fixed crash if mrpt::gui windows are created, all destroyed, then some created again.
  • Linux only: Fixed ignored argument in CSemaphore::release()
  • Fixed wrong serialization of CSetOfTexturedTriangles.
  • Fixed compile errors for latest OpenCV versions due to need to include (By Vicente Arevalo).
  • CStream::printf would crash on very large strings. It now supports arbitrarily long strings, just like mrpt::format.
  • Fixed an error compiling against OpenCV 1.1 (mainly for Fedora repositories).
  • Fixed crash if serializing a CObservation2DRangeScan or a CObservation3DRangeScan with zero scan points (will not happen in real situations, but it's safer now).
  • fixed a conceptual error in mrpt::slam::data_association: The observations do NOT have a covariance matrix! Formulas corrected accordingly.
  • data_association with JCBB only worked with Mahalanobis distance. Fixed for ML.
  • Error loading some parameters from a config file in mrpt::hwdrivers::CSickLaserSerial

New in Mobile Robot Programming Toolkit 0.8.0 (Oct 11, 2011)

  • Important changes:
  • New minor version number due to a few incompatible changes in the API. The affected classes are:
  • mrpt::bayes::CKalmanFilterCapable
  • mrpt::reactivenav::CReactiveInterfaceImplementation
  • Headers for namespace mrpt::system have been factored in a number of smaller files.
  • rbpf-slam now builds maps of points.
  • Data association implemented as a generic algorithm and demonstrated in the program 2d-slam-demo.
  • The interface of Kalman filters has been greatly redesigned for a better factoring of code and to explote fixed-size matrices.
  • Hardware and sensors:
  • PointGrey Research (PGRBumblebee & Bumblebee2 cameras: Better support in Win32 and supported for the first time in Linux as well. See mrpt::vision::CStereoGrabber_Bumblebee and mrpt::hwdrivers::CCameraSensor.
  • New interface to SICK LMS100 via ethernet. Contributed by Adrien Barral (Robopec). See mrpt::hwdrivers::CLMS100Eth and new example "SICK_lms100eth_test".
  • Support for advanced GPS devices: NTRIP client + emitter, RTK GPS, etc.
  • New class for accessing SICK LMS laser scanners with a standard serial port or USB-to-serial RS-232 or RS-424, working for Windows and Linux, up to 75 scans/sec.
  • New algorithms (e.g. A*), many new methods in existing classes and several bug fixes.
  • Detailed list of all changes. New stuff and enhancements:
  • MRPT can be now completely built under MinGW (GCCif wxWidgets and OpenCV are also built with that compiler first. See the instructions in the Wiki.
  • Fixed size matrices can be declared with one or both of the dimensions equal to zero and that wouldn't lead to an error - until an element is tried to be accessed.
  • The observation mrpt::slam::CRangeBearingKFSLAM now has independent covariance matrices for each sensor point and also the field-of-view have been separated for yaw and pitch.
  • Added a simple profiler class mrpt::utils::CTimeLogger.
  • Added a new option in CMake: MRPT_ENABLE_EMBEDDED_GLOBAL_PROFILER that transform all MRPT_START/MRPT_END macros into calls to the embedded profiler, dumping the results to std::cout (and MSVC output tabat the end of each execution.
  • mrpt::gui windows now have a method CBaseGUIWindow::getPushedKey, which also returns the key modifiers (shift, alt, etc...).
  • CCameraSensor can now display a preview of the captured images with a "preview_reduction" factor to make them smaller.
  • Great improvements in creating threads by allowing arbitrary function parameters and non-static member methods. See the different signatures of mrpt::system::createThread and mrpt::system::createThreadFromObjectMethod (By Pablo Moreno, small adds by JLBC).
  • mrpt::utils::CImage::saveToFile now has a parameter to select the desired quality of JPEG files.
  • mrpt::hwdrivers::CCameraSensor can now span several worker threads to save the grabbed images to disk, avoiding the CPU bottleneck when capturing high rate video.
  • mrpt::math::CArray: A STL-like container for C fixed-size arrays.
  • New method in CImageGrabber_dc1394 to enumerate all existing Firewire classes. See mrpt::vision::CImageGrabber_dc1394::enumerateCameras.
  • mrpt::hwdrivers::CGPSInterface now can send initialization commands to Javad/TopCon GPS units to setup RTK sources.
  • mrpt::gui window classes now have a static class factory "::Create(...)" similar to their constructor but returning smart pointers.
  • CPointsMap now has a proper observation likelihood method, similar to Sebastian Thrun's "Likelihood Field" for grids, but using points and KD-trees for the look-ups. See CPointsMap::TLikelihoodOptions
  • rbpf-slam:
  • Many improvements to rbpf-slam, especially it now supports map building with maps of points.
  • ICP parameters of rbpf-slam can be now configured via the .ini file.
  • See the example file shared/mrpt/config_files/rbpf-slam/gridmapping_ICPbased.ini
  • The application 2d-slam-demo now shows and computes stats on data association.
  • mrpt::hwdrivers::CHokuyoURG:
  • Now has methods setSerialPort/getSerialPort instead of the public-access variable "m_serial_port".
  • Added mrpt::hwdrivers::CHokuyoURG::setReducedFOV.
  • ReactiveNavigation: All functors are finally replaced by the new virtual class mrpt::reactivenav::CReactiveInterfaceImplementation.
  • Data association is now correctly implemented and integrated into mrpt::slam::CRangeBearingKFSLAM2D.
  • mrpt::slam::CColouredPointsMap: It can be now selected different schemes for coloring (new: cmFromHeightRelativeToSensorGray).
  • Added missing loadFromTextFile method to fixed-size matrices.
  • Poses and points have new methods: asString, fromString. See mrpt::poses::CPoseOrPoint
  • getByName in mrpt::opengl classes now is recursive when there are CSetOfObjects objects.
  • New class mrpt::utils::CLog, by Vicente Arevalo.
  • mrpt::utils::CClientTCPSocket: Connect and DNS look-up now have a configurable timeout.
  • For all classes that inherit from mrpt::utils::CDebugOutputCapable, calling printf_debug now also sends the strings to the Visual Studio output window.
  • mrpt::hwdrivers::CGenericSensor:
  • The class now implements "loadConfig" and the old virtual "loadConfig" has been renamed to "loadConfig_sensorSpecific". The former calls the latter automatically.
  • New generic parameter "grab_decimation" that enable decimating any source of observations.
  • New class: mrpt::utils::circular_buffer. Used to enhance the reception buffers of these hardware drivers:
  • mrpt::hwdrivers::CHokuyoURG
  • mrpt::hwdrivers::CInterfaceFTDI
  • Utilities for multithread programming (See mrpt::synch)
  • Added a pattern class for creating thread-safe variables protected by a critical section. See mrpt::synch::CThreadSafeVariable.
  • Macro THREADSAFE_OPERATION(critsect, operation).
  • Added serialization of missing std::vector for T=std::string, int8_t, int16_t.
  • New methods to read & write the settings of a generic CCameraSensor object from/to a MRPT-provided wxPanel for GUI applications. See mrpt::hwdrivers::writeConfigFromVideoSourcePanel, mrpt::hwdrivers::readConfigIntoVideoSourcePanel
  • COpenGLViewport now has settable min/max clipping values. See mrpt::opengl::COpenGLViewport::setViewportClipDistances.
  • mrpt::utils::CConfigFile now can be created without specifying the associated file and do the association later with a new method.
  • Apart from 2D exclusion areas in laser scanners, 3D prism zones are now supported as well. C2DRangeFinderAbstract::loadExclusionAreas
  • A* algorithm implemented in mrpt::math::CAStarAlgorithm. (By Pablo Moreno)
  • The central registry of MRPT classes (derived from CSerializablerewritten as a proper Singleton.
  • New interface to SICK LMS100 via ethernet. Contributed by Adrien Barral (Robopec). See mrpt::hwdrivers::CLMS100Eth and new example "SICK_lms100eth_test".
  • mrpt::utils::CClientTCPSocket now gives a textual description of the error reasons (win32).
  • New namespace with small utilities for networking. See mrpt::utils::net.
  • New class for downloading differential GPS corrections from a NTRIP server. See mrpt::hwdrivers::CNTRIPClient and the example "ntrip-client".
  • Change in mrpt::bayes::CKalmanFilterCapable: The functionality to be implemented in the virtual method OnInverseObservationModel has been splitted in two parts: the same method, and the new OnNewLandmarkAddedToMap. This factorization allows more code reutilization.
  • Data association is now fully implemented in mrpt::slam::data_association_full_covariance and related methods.
  • New class for accessing SICK LMS laser scanners with a standard serial port or USB-to-serial RS-232 or RS-424, working for Windows and Linux, up to 75 scans/sec. See mrpt::hwdrivers::CSickLaserSerial, or the program rawlog-grabber. See also the new example configuration file "SICK_LMS_serial.ini".
  • New generic function for CRC16 computation. See mrpt::utils::compute_CRC16
  • mrpt::math::CQuaternion now has methods for fixed size matrices.
  • Assembler optimized versions of small functions (mrpt::utils::round,...).
  • Changes in the build process:
  • Clean up of options in cmake-gui. Many options are now "advanced" so they are hidden in the "simple view".
  • Better detection of wxWidgets libraries (static/dynamic libs), through a patch submitted to CMake. You'll need to update CMake to enjoy this feature.
  • Fixed building errors with wxWidgets 2.9.0
  • Fixed compilation of MRPT without opencv (in MSVC it reported an error: library 'mrpt-sifthess' missing).
  • Boost is not required anymore. boost-program-options has been replaced by the STL-based TCLAP library.
  • New small functions:
  • mrpt::system::getNumberOfProcessors
  • mrpt::poses::CPose3D::isHorizontal
  • mrpt::math::meanAndCov and mrpt::math::cov now also accept matrices as inputs (just like in MATLAB).
  • mrpt::utils::ObjectToRawString and mrpt::utils::RawStringToObject
  • mrpt::topography::ENU_axes_from_WGS84
  • mrpt::system::os::timegm
  • mrpt::math::CMatrixTemplate::extractSubmatrixSymmetricalBlocks
  • mrpt::utils::keep_max and mrpt::utils::keep_min
  • mrpt::math::make_vector
  • New examples:
  • SICK_laser_serial_test
  • setOfTexturedTrianglesTest
  • ntrip-client
  • http_tests
  • SICK_lms100eth_test
  • a_starAlgorithm
  • cameraCampureAskDialog
  • BUG FIXES:
  • CDisplayWindow3D won't process char key events (Thanks to Miyamoto Musashi for reporting a tested fix).
  • Linking errors due to missing template instantiations of some mrpt::math functions (Thanks to Diego for reporting).
  • Fixed data association routines.
  • Fixed error when deserializing objects of type mrpt::opengl::CPointCloudColoured
  • Fixed potential crash in mrpt::system::dateTimeLocalToString and other time functions when passed an invalid timestamp value.
  • mrpt::system::formatTimeInterval won't show the decimal part of seconds.
  • Win32-MSVC only: Removed the "-D_SECURE_SCL=0" flag in user code that uses MRPT through CMake, since it may lead to increadibly-hard-to-debug crashes.
  • Duplicated landmarkIDs in range-bearing observations are now detected as errors.
  • mrpt::opengl::CTexturedPlane didn't reflect the change of texture after the first time it was rendered.
  • CCameraSensor::setPathForExternalImages didn't work for saving; it was neccesary to also set CImage::IMAGES_PATH_BASE, which is NOT the expected behavior by the user.
  • Fixed linking errors in user programs linked to MRPT thru CMake, when MRPT is compiled as static libs and ffmpeg support is enabled.
  • mrpt::utils::CConfigFileMemory::write may raise an exception even if there was no error.
  • Linux: Fixed mrpt::hwdrivers::CSerialPort won't write the whole data block on Write().
  • Fixed OpenGLCanvas not creating a depth buffer in some platforms/systems.
  • (Win32 onlymrpt::hwdrivers::CInterfaceFTDI won't neither close the USB link or unload the FT2XX.DLL at destruction.
  • C locales changed by default in wxWidgets >=2.9.0 will mess up reading from config files. Fixed by forcing "C" numerics locale in all GUI applications.
  • Fixed potential random crash in mrpt::system::buildTimestampFromParts when used in multi-threaded applications.
  • lib3ds: Won't render scenes with small scales (LIB3DS_EPSILON has been reduced).
  • GUI apps: Many errors in wxWidgets wxFlexSizers fixed, as detected by the recent wx2.9.0 in Debug mode.
  • The following functions (in mrpt::systemdid crash when a malformed TTimeStamp was passed as argument: timestampToParts, dateTimeToString, extractDayTimeFromTimestamp, timeToString, dateToString.
  • mrpt::utils::CClientTCPSocket::connect won't resolve server names.
  • Fixed hardcoded type "double" in a method of the generic template mrpt::utils::TParameters.
  • Fixed random crashes when opening several CDisplayWindow*'s at the same time.
  • Fixed infinite recursion (stack overflowwhen deleting an arc in a mrpt::hmtslam::CHierarchicalMHMap.
  • Potential crash when freeing OpenGL textures from CTexturedPlane due to incorrect call to "glDeleteTextures".
  • Potential error in mrpt::system::getCurrentThreadTimes with modern MSVC compilers.
  • Fixed Debian bug #543621.
  • Fixed a minor error in mrpt::math::computeAverageLogLik, giving a constant offset.

New in Mobile Robot Programming Toolkit 0.7.1 (Oct 11, 2011)

  • New methods in mrpt::math to compute the covariance from a list of samples (See mrpt::math::cov,...)
  • Small optimizations to random generation of samples from multivariate Gaussians.
  • RBPF-SLAM: all observations are not processed now, but only those after a given minimum increment in odometry (like in GMapping). See mrpt::slam::CMetricMapBuilderRBPF
  • New efficient operators "+=" to compose CPose2D and CPose3D objects.
  • New methods in matrix classes:
  • add_Ac
  • substract_Ac
  • Slightly more efficient and more correct computation of covariance matrix in mrpt::scanmatching::leastSquareErrorRigidTransformation.
  • Fixed the internal detection of OpenCV version according to the newest convention used in OpenCV SVN. This should fix compiling errors in some Linux distributions.
  • Reduction in the number of MRPT libraries: "mrpt-ann" and "mrpt-3ds" have disappeared (for all platforms), since their code is now integrated in "mrpt-core".
  • The following classes have been renamed (and their corresponding header files as well). Note that typedefs with the old names will be maintained, but they are now deprecated and will disappear in future releases.
  • CMRPTImage --> CImage
  • CMRPTImageFloat --> CImageFloat
  • CMRPTCanvas --> CCanvas
  • CMRPTMessage --> CMessage
  • New wrapper class added for rendering a scene off-screen using framebuffer object extension (see mrpt::opengl::CFBORender class and example fbo_render_test(By Vicente Arevalo).
  • Embedded lib3ds 1.3, for use in all platforms.
  • PTGs can be created through a class factory. See mrpt::reactivenav::CParameterizedTrajectoryGenerator::CreatePTG.
  • PTG classes rewritten and greatly simplified by using standard STL containers.
  • New utility mrpt::utils::TParameters.
  • mrpt::math::CPolygon is now a wrapper around a mrpt::math::TPolygon2D, implementing serialization, backwards compatible with old code.
  • Added new header "mrpt/reactivenav/motion_planning_utils.h" with global utility functions for reactive navigation and motion planning. See mrpt::reactivenav.
  • New methods in mrpt::slam::CPointsMap classes to set all the points at once (setAllPoints).
  • (UNCOMPLETED!!New robot navigation algorithm in the mrpt-reactivenav library: PTG-based Rapidly-exploring Random Tree (PRRTmethod. See mrpt::reactivenav::CPRRTNavigator
  • Smart pointers are now thread safe through atomic increment/decrement operations.
  • New class for atomic operations. See mrpt::synch::CAtomicCounter
  • Support for custom menu entries in the popup menu of mrpt::gui::CDisplayWindowPlots. See example displayPlots and class CDisplayWindowPlots.
  • Compilation under MinGW completely fixed and tested, including OpenCV and wxWidgets.
  • Added == operator to fixed-size matrices and some CPosePDF* classes.
  • Added STL containers utility "erase_return_next" to stl_extensions.h
  • Implemented missing converter from SOG PDFs in CPose3DPDF::createFrom2D.
  • Windows Installer: Added missing links for some GUI applications.
  • Added several insertion-related methods in some mrpt::opengl classes.
  • (UNCOMPLETED!!): Recovered "mono-slam" as a GUI application for both off-line and real-time monocular camera SLAM.
  • New examples:
  • fbo_render_test
  • New programs:
  • mono-slam: Monocular SLAM (experimental state, UNCOMPLETED!).
  • prrt-navigator-demo: A GUI to experiment with the new PTG-based Rapidly-exploring Random Tree (PRRTmethod (UNCOMPLETED!).
  • BUG FIXES:
  • D ellipses won't render properly in mrpt::opengl::CEllipsoid.
  • Potential static/dynamic library errors when linking against Boost.
  • CColouredPointsMap will contain inconsistent data after calling insertPoint(or many other methods.
  • CPose3D might accept angle values out of the range ]-pi,pi]. Thanks to Philipp Robbel for noticing!
  • COccupancyGridMap2D::laserScanSimulator: Simulation of scan rays ending in free space were not marked as invalid.
  • Only the header files for mrpt-core were installed in Linux with "make install" (this also affected each Linux distribution packages!). (Closes SF #2807979 , thanks Joel).
  • ransac_detect_2D_lines (and probably all RANSAC methodsmay raise exceptions for some degenerate cases. Thanks to Joel Mckay for reporting and debugging.
  • Compile errors when using automatic serialization of the STL containers "set" and "multiset".
  • NULL pointer access when de-serializing an object of a non-registered class.
  • rbpf-slam: The program did get stuck when used in "fixed number of samples" and one particle has a likelihood >20 orders of magnitud than the others.
  • rbpf-slam: Images "mapping_i.png" files were vertically flipped.
  • Won't fuse two point maps due to an error in CSimplePointsMap::fuseWith. Thanks to Wilian França Costa for the patch.
  • Fixed a little bug in mrpt::opengl::CEllipsoid ray tracing.
  • Wrong computation of ICP covariance. Thanks to Wilian França Costa for the patch.

New in Mobile Robot Programming Toolkit 0.7.0 (Oct 11, 2011)

  • IMPORTANT CHANGES:
  • Old deprecated methods removed.
  • Changes which may require modifications in user's code:
  • Interface of all probability density functions (PDFchanged for efficiency: getEstimatedMean -> getMean, getEstimatedCov -> getCovarianceAndMean or getCovariance ; and objects returned by referenced instead of returning a copy. Old PDF interface methods marked as deprecated (and will dissapear in future releases).
  • Members x y z (and phi yaw pitch roll where applicablefrom mrpt::poses::CPoseOrPoint and derived classes are not public anymore. They must be read out with inline members x(), y(and so on, and written with x(newval), y(newval), etc... This change is needed to assure that the internal state, e.g. in mrpt::poses::CPose3D, is always consistent.
  • A few matrix arithmetic methods renamed for consistency: Now all start with "multiply_XXX", "add_XXX", etc...
  • Some constructors in poses,points & matrices marked as "explicit" to avoid unintended conversions.
  • Random number generators marked as deprecated. New programs should use the new object mrpt::random::randomGenerator or instance objects of the class mrpt::random::CRandomGenerator for thread-safety.
  • All covariance matrices passed to a new matrix class with compile time fixed-size, with dramatic speed ups.
  • Data declarations in geometry.h have been moved to lightweight_geom_data, although TPolygons and TObjects are not really lightweight (Pablo).
  • mrpt::vision now integrates SURF features (Requires OpenCV 1.1.0, integrated by Francisco-Angel Moreno), and new interest point descriptors.
  • New hardware supported:
  • IP cameras via rtsp:// protocol (due to support of FFmpeg libraries).
  • xSens IMU, MTi devices (Built-in version of XSens library).
  • Win32 only: .lib and .dll files now have a postfix with the MRPT version, that is, "libmrpt-core070.lib" instead of "libmrpt-core.lib", etc...
  • New algorithms: A generic and applied RANSAC, Dijkstra for graphs, an optimizer for networks of relative poses and data association algorithms. See the list of changes below.
  • Efficient geometry structures and dozens of new geomtry methods (mainly by Pablo Moreno).
  • Geometry methods improved, corrected and expanded in mrpt::math (by Pablo Moreno). See the list of changes below.
  • A more powerful serialization engine capable of handling arbitrarily complex data types built with STL containers and MRPT classes. See the wiki page.
  • Several bug fixes.
  • New programs:
  • camera-calib: A new GUI program (fused of old "camera-calib" & "camera-calib-gui"for camera calibration with live camera capture.
  • features-matching: A new computer vision demo application.
  • d-slam-demo: A GUI application which allows the user to run a Extended Kalman Filter (EKFimplementation of range-bearing 2D SLAM in step-by-step or continuous mode.
  • Many new examples:
  • createVideoFile.
  • data-association-demo
  • dijkstra-example
  • gauss_img_filtering
  • grab_camera_ffmpeg
  • optimize_pose_network
  • polyhedronIntersection: Demonstration of the capabilities of polygon intersection in 3D (Pablo).
  • polygonSplit: Polygon split (Pablo).
  • ransac-demo-applications
  • ransac-demo-plane3D
  • smart_pointers_test
  • stl_containers_serialize
  • tuMicos
  • type_name
  • Detailed list of changes:
  • New methods in CPolyhedron to apply common operations to polyhedra. As a corollary, a lot of new polyhedra are now available. polyhedronIntersection demo now includes four times more polyhedra.
  • New powerful method in CPolyhedron to create different types of polyhedra using a regular base. Many existing methods have been adapted to this interface.
  • Added support for base64 encoding & decoding. See mrpt::system::decodeBase64, mrpt::system::encodeBase64
  • Polyhedra intersection demo improved with twelve additional pairs of polyhedra, including a random one (Pablo).
  • Ray tracing now works with CEllipsoid (Pablo).
  • Ray tracing now works with CCylinder (Pablo).
  • mrpt::utils::CSimpleDatabase interface converted to smart pointers.
  • Added "hold_on" and "hold_off" to mrpt::gui::CDisplayWindowPlots.
  • New class for 2D range-bearing SLAM. See mrpt::slam::CRangeBearingKFSLAM2D
  • CGeneralizedCylinder now works internally using CPose3D instead of TPoint3D.
  • Fixed a bug in the calculation of the distance between TPoints3D.
  • XSens Technology has granted us permission to ship the Xsens CMT library along MRPT, thus MRPT now has out-of-the-box support for XSENS MTi devices. See rawlog-grabber and mrpt::hwdrivers::CIMUXSens
  • rawlog-grabber can now save odometry and sonar data from an ARIA-compatible robot (Pioneers 3-DX, AT, etc...). See the new configuration file "share/config_files/rawlog-grabber/activmedia_robot.ini".
  • rawlog-grabber can record video from IP-cameras thru FFMpeg via the common camera class mrpt::hwdrivers::CCameraSensor.
  • (pacoBumblebee stereo camera interface mrpt::vision::CStereoGrabber_Bumblebee updates to the lattest vendor's API for Win32 (Francisco Angel Moreno).
  • mrpt::hwdrivers::CActivMediaRobotBase extended to read sonar data, bumpers and enable the guidance of the robot through a joystick attached to the computer.
  • Ray tracing has been considerably sped up.
  • New methods to mrpt::math::CHistogram to ease the computation of PDFs.
  • New methods to control section visibility in mrpt::opengl::CGeneralizedCylinder.
  • CDisplayWindowPlots now have templatized methods.
  • Added missing 2D point PDF. See mrpt::poses::CPoint2DPDF.
  • Fixed-size matrices (see mrpt::math::CMatrixFixedNumericused in many places now where the size can be known at compile-time, representing a dramatic sped up.
  • CGeneralizedCylinder now supports ray tracing (Pablo).
  • Added a non-optimal method to split polygons in theirs convex components, including a simple demo (Pablo).
  • Matrices now have hard-coded optimized implementations for some 2x2 and 3x3 operations (eg. determinant, inverse)
  • (experimental!!A new generic method, mrpt::slam::data_association, which implements NN (nearest neightborand JCBB (Joint Compatibility Branch & Bound).
  • Additional methods to retrieve data from mrpt::opengl::CGeneralizedCylinder (Pablo).
  • Added some methods to mrpt::math::CMatrixTemplate (Pablo).
  • New methods in the geometric classes and in mrpt::opengl::CPolyhedron (Pablo).
  • New methods in mrpt::utils::CImage: scaleImage, rotateImage, ...
  • Added new malloc/realloc/free equivalents for aligned memory. See mrpt::system::os::aligned_malloc
  • New application: features-matching, for demonstrating and evaluating the performance of several image feature detectors & descriptors. See its wiki page.
  • mrpt::registerAllClasses mustn't be called manually anymore: it's always automatically executed at startup.
  • Added a generic mechanism to obtain the (compiler independant, unlike typeidname of a type. See mrpt::utils::TTypeName, and the documentation on the wiki.
  • Now all STL containers are serialized automatically via template > operators, thus the old classes vector_serializable, etc.. are not needed anymore and has been removed. See utils/stl_extensions.h
  • Small changes in polyhedron intersection demo (Pablo).
  • Added methods to agglutinate vectors of mrpt::math::TSegment3D into vectors of (probably skewmrpt::math::TPolygon3D. Due to their similarities, this code may evolve into a template in the future, so that it's suitable for both 2D and 3D objects (Pablo).
  • Added methods to extract vectors of mrpt::math::TObject2D and mrpt::math::TObject3D by type (Pablo).
  • More mrpt::opengl classes adapted to mrpt::math::TPoint3D and other geometric lightweight types (Pablo).
  • Maps of landmarks now reuse the feature descriptors defined in mrpt::vision::CFeature. See mrpt::slam::CLandmarksMap
  • Geometric lightweight types have been serialized (JL/Pablo).
  • CSetOfLines class has been almost completely redone, although mantaining its former interface (Pablo).
  • mrpt::opengl::CPolyhedron::rayTrace now works properly (Pablo).
  • mrpt::vision::CFeatureExtraction now has a more uniform interface which separates interest point detectors and descriptors (Francisco-Angel Moreno & Jose Luis)
  • New feature detector: Intensity-domain spin images (SpinImage). See mrpt::vision::CFeatureExtractor
  • Safer constructors of smart pointers from base to derived classes since classes are now always checked at runtime (unless ASSERT_'s are disabled from CMake).
  • Added a CSparseMatrix template, which relies on std::map (Pablo).
  • Added support for intersections in vectors and generic objects (Pablo).
  • Minor change in mrpt::poses::CPose3D::composePoint for efficiency purposes (Pablo).
  • Added methods to estimate lines and planes using linear regression (Pablo).
  • Added method mrpt::math::covariancesAndMean to get covariances and mean of any set of points in N-dimensions (Pablo).
  • The Levenberg-Marquardt implementation now has a second template parameter for the type of the "user parameter" passed to the evaluation functor. Instead of forcing it being a numeric vector, it can now be any arbitrary object. See mrpt::math::CLevenbergMarquardtTempl
  • New consistent pose-network optimizers (Experimental!):
  • Based on Levenberg-Marquardt. See mrpt::slam::optimizePoseGraph_levmarq
  • A new generic implementation of Dijkstra algorithm for shortest paths on a directed, possibly weighted, graph. See mrpt::math::CDijkstra
  • New centralized class for random number generators: mrpt::random::CRandomGenerator . Old methods marked as deprecated.
  • Random Generators rewritten as a class for thread-safety: Each object has its own internal state for the PRNG.
  • New base class mrpt::utils::CProbabilityDensityFunction for all PDF classes.
  • Added bi-directional conversions between 3D poses and quaternion. See mrpt::math::CQuaternion and mrpt::poses::CPose3D::getAsQuaternion
  • A new common base class for all GUI windows. See mrpt::gui::CBaseGUIWindow
  • Matrix constructors from poses and points moved from CMatrix & CMatrixD to CMatrixTemplateNumeric for greater utility.
  • Added unary "-" operators to mrpt::poses::CPose3D and mrpt::poses::CPose2D for obtaining the inverse poses quickly.
  • Removed deprecated methods:
  • From mrpt::utils::CImage: loadFromBMP, loadFromJPEG, saveToBMP, saveToJPEG. Replaced by saveToFile and loadFromFile.
  • From mrpt::slam::CRawlog and its iterators: isAction. Replace by getType
  • Integration of ffmpeg libraries for frame-by-frame access to any kind of video or streams, like IP cameras via rtsp:// protocol. See mrpt::hwdrivers::CFFMPEG_InputStream
  • D windows has a method to obtain the rendered image for user processing as desired. See mrpt::gui::CDisplayWindow3D::captureImagesStart
  • Added copy constructors for mrpt::math::TObject2D and mrpt::math::TObject3D to allow use in containers (Pablo).
  • mrpt::opengl::CPolyhedron and mrpt::opengl::CGeneralizedCylinder classes accustomed to the new geometric methods (Pablo).
  • Added non-secure methods to access geometric object's coordinates (like in mrpt::math::TPoint2Das an array (Pablo).
  • Intersections in mrpt::math now work properly in almost every case (Pablo).
  • Added a signWithZero function in utils_defs (Pablo).
  • Added methods in mrpt::opengl::CPolyhedron to work with sets of mrpt::math::TPolygon3D (Pablo).
  • Added a new test for pragma pack (Pablo).
  • Added a video file writer from a sequence of images. See mrpt::vision::CVideoFileWriter
  • Deleted old obsolete classes from mrpt::vision: CGaussianConvolutionKernel, CImageConvolution
  • New utilities added to mrpt::utils::metaprogramming
  • Applied uses of RANSAC added in ransac_applications.h. See mrpt::math::ransac_detect_3D_planes, mrpt::math::ransac_detect_2D_lines and examples.
  • Fonts used in mrpt::utils::CCanvas are now internally saved as gz-compressed data streams, automatically decompressed on first use. This saves ~1Mb in the .DLL/.so file for mrpt-core when compiled with Asian fonts.
  • Two new gz-compression methods: mrpt::compress::zip::compress_gz_data_block and mrpt::compress::zip::decompress_gz_data_block
  • Load/Save of matrices as text files moved from mrpt::math::CMatrixTemplateNumeric to mrpt::math::CMatrixTemplate.
  • mrpt::scanmatching::robustRigidTransformation (and the program grid-matchingdynamically determine the number of RANSAC iterations by default.
  • Exceptions now show a more detailed stack trace. See mrpt::system::stack_trace (requires wxWidgets and building in "Debug").
  • Added methods to retrieve polygons (as defined in geometry.hfor some graphical classes.
  • Added constructors to transparently swap between heavy and lightweight pose classes (heavy poses are intended to stop being used in some classes in the near future).
  • Geometry methods improved, although still not fully functional.
  • Added generic RANSAC implementation. See mrpt::math::RANSAC_Template, and examples.
  • Edit CPtuHokuyo rawlog-grabber profile to work with CTuMicos.
  • New classes for Micos Tu DT-80. See class mrpt::hwdrivers::CTuMicos.
  • mrpt::system::deleteFilesInDirectory now has a uniform behavior in all platforms, and do not raise "consoles" in Windows GUI applications.
  • lightweight_geom_data (.h and .cppadded to store some 3D types which require little storage (Pablo Moreno).
  • mrpt::math::geometry methods heavily improved (not fully implemented(Pablo Moreno).
  • COpenGLStandardObject now includes some new methods (Pablo Moreno).
  • Minor changes in other OpenGL classes (Pablo Moreno).
  • Fixed a bug which caused CMyOpenGLCanvasBase to crash in some cases.
  • BUG FIXES:
  • RawLogViewer didn't change the label of sensors when multiple observations of the same name were in one Sensory Frame.
  • Visual Leak Detector didn't work for multi-threaded applications.
  • Fixed failing mrpt::system::directoryExists when using a trailing "/"
  • Fixed dealing with image assignments when the source is externally stored in mrpt::utils::CImage.
  • CMetricMapBuilder::loadCurrentMapFromFile won't load a GZ-compressed .simplemap file (Reported by Zoltan Tuza).
  • Bad serialization of grayscale image origin (Francisco Moreno).
  • rbpf-slam won't show the live 3D view (Thanks Yuan Fang for reporting).
  • There was no way to retrieve the main viewport's camera parameters for CDisplayWindow3D (Thanks Vijay Somers).
  • mrpt::utils::CImage::getAsMatrix didn't return intensity values in the normalized range [0,1] as documented.
  • mrpt::utils::CMemoryStream: won't read the last byte of the memory block; won't assign an external memory block with assignMemoryNotOwn
  • Compile error in Linux with libdc1394 >=2.0.0 but

New in Mobile Robot Programming Toolkit 0.6.5 (Oct 11, 2011)

  • New method for 3D-ICP, aligning pairs of 3D point clouds using a KD-tree for looking for correspondences and Horn's equation for each iteration. See the class mrpt::slam::CICP, mrpt::slam::CMetricMapsAlignmentAlgorithm::Align3D, and the tutorial page.
  • Added class COpenGLStandardObject to render custom objects using OpenGL primitives like GL_TRIANGLES or GL_QUAD_STRIP (Pablo Moreno).
  • CText now accepts color changes (Pablo Moreno).
  • Added "contains" method for CSetOfObjects (Pablo Moreno).
  • Added methods for loading matrices from MATLAB-like strings. See mrpt::math::CMatrixTemplate::fromMatlabStringFormat and mrpt::utils::CConfigFileBase::read_matrix.
  • New method for computing the mahalanobis distance. See mrpt::math::mahalanobisDistance
  • Levenberg-Marquardt and many other functions in mrpt::random converted into templates.
  • Added some minor methods to graphic classes, especially CSetOfLines (Pablo Moreno).
  • Matrix's method to save as plain text has been extended with the possibility of adding user comments and selecting the output format. See mrpt::math::TMatrixTextFileFormat.
  • Added ray trace simulation methods to CRenderizable and every children class except for C3DSScene, CEllipsoid, CCylinder, CGeneralizedCylinder, CPolyhedron and some classes which don't represent any surfaced object (Pablo Moreno).
  • Added some classes to mrpt::opengl namespace (Pablo Moreno):
  • CAngularObservationMesh to represent a 3D world obtained from a set of traced rays.
  • CCylinder to represent a cylinder, cone or truncated cylinder.
  • CGeneralizedCylinder to represent a generalized cylinder with an axis roughly perpendicular to the Z coordinate.
  • CPolyhedron to represent any object without curves. Includes methods to create common polyhedron, although still lacks some geometric methods.
  • CRenderizable::setColor method now works properly (affecting every childwhen used in a CSetOfObjects or CSetOfTriangles (Pablo Moreno).
  • Added method mrpt::CMatrixTemplateNumeric::rank to calculate the rank of a matrix (Pablo Moreno).
  • mrpt::gui windows now correctly detect key-strokes on both the console and the windows themselves. Key codes can be obtained from the method mrpt::gui::CDisplayWindow::waitForKey
  • Header files defining the mrpt fonts (used in mrpt::utils::CCanvashave been removed from the external headers and are internal now.
  • OpenGL objects now have a scale factor. See mrpt::opengl::CRenderizable::setScale
  • Added type mrpt::math::CMatrixLongDouble for matrices of "long double" (becomes "double" if the compiler does not suppor them).
  • New namespaces:
  • mrpt::vision::pinhole with functions related to camera projection models.
  • mrpt::utils::metaprogramming for grouping the metaprogramming classes.
  • Points and poses constructors from other classes that imply a loss of information are defined as explicit, e.g. CPose3D -> CPose2D, etc...
  • Fixed unnecessary link dependencies on 3ds,zlib & ann libs when linking as DLL in Windows.
  • Quick method mrpt::opengl::COpenGLScene::saveToFile to save 3D scenes.
  • New method for automated camera calibration: mrpt::vision::checkerBoardCameraCalibration
  • Important changes to improve the design of mrpt::opengl classes: "render" method is "const", more set/get methods instead of public members, etc.
  • New exception class mrpt::utils::CExceptionEOF, used to distinguish between normal and erroneous EOFs found while de-serializing objects from a stream.
  • Added method for RTK GPS path reconstruction: mrpt::topography::path_from_rtk_gps
  • New math methods: mrpt::math::unwrap2PiSequence, mrpt::math::averageWrap2Pi
  • Added template function mrpt::utils::find_in_vector for searching an element in any std::vector container (like "find" in other containers).
  • New interpolation methods for 1D functions: mrpt::math::interpolate2points, mrpt::math::leastSquareLinearFit.
  • CStream::printf now correctly returns an "int" instead of "void".
  • Types vector_XXX moved from global to "mrpt" namespace.
  • New color types mrpt::utils::TColor & mrpt::utils::TColorf.
  • Added support for exclusion areas to mark sensed point as invalid in laser scanners. See C2DRangeFinderAbstract::loadExclusionAreas
  • New method CPose3D::composePoint for more efficient 3D pose+point composition.
  • New examples:
  • icp3D: Demonstration of usage for 3D-ICP.
  • rayTrace: Demo of 3D ray tracing (Pablo Moreno).
  • leastSquares: Demonstration of linear least squares interpolation.
  • SceneViewer3D:
  • New menu action "Take snapshot" (F2).
  • RawLogViewer:
  • New combo-box for selecting among different, automatically detected paths for external images. For example, this allows quickly changing between rectified and original images.
  • All I/O file operations now support the gz-compressed format.
  • Edit dialog: Support for multiple selections instead of the old combos.
  • Menu "regenerate GPS" timestamps now allows operating over several sensor labels at once.
  • "Raw Map" module: Now builds 3D maps from sequences with 3 RTK GPS.
  • Support for configuration blocks in rawlogs. See mrpt::slam::CRawlog::getCommentTextAsConfigFile
  • Many improvements in the CMake build system for Linux systems, as part of the Fedora package review process (Thanks to Mamoru Tasaka).
  • BUG FIXES:
  • Error when compiling without GL/GLUT under Linux (Thanks to Chun-Wei for reporting).
  • Wrong computation of the likelihood in COccupancyGridMap2D::computeObservationLikelihood_CellsDifference (Thanks to Fabian Menges, SF 2570053).
  • mrpt::utils::ObjectToString won't really save the object as a string.
  • mrpt::utils::format now works for strings of arbitrarily large lengths.
  • Visual Studio: Exception when mrpt::utils::format tries to generate a too long string.
  • Wrong name of mrpt-zlib libs when compiling without wxWidgets and as DLL.
  • Compilation of app grid-matching fails (SF 2490011, Fabian Menges).
  • CPose3DInterpolator: Solved spureous transitions when "yaw" crosses the +-PI threshold.
  • RawLogViewer: Comments text block was lost after some edit operations.
  • Fixed all the warnings: "dpkg-shlibdeps: warning: dependency on ... could be avoided if ... were not uselessly linked against it (they use none of its symbols)".
  • Fixed an issue with architectures with big endiannes. Fixed Debian bug