Change Log
Version 2.11.4: UNRELEASED
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:
-
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.
-
mrpt::math::KDTreeCapable : Add optional argument maximumSearchDistanceSqr in many API methods to exploit the new nanoflann RKNN search method.
-
mrpt::opengl::PLY_Importer : Add support for importing point clouds with the
timestamp
property per point.
-
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).
Version 2.11.3: Released Nov 21st, 2023
Changes in libraries:
-
Add the
[[nodiscard]]
attribute to all functions returning a value in<mrpt/core/bits_math.h>
-
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
New virtual method mrpt::maps::CMetricMap::boundingBox()
mrpt::maps::TMetricMapInitializer now returns
shared_ptr
s instead of plain pointers.mrpt::maps::TSetOfMetricMapInitializers::loadFromConfigFile() now throws if it finds a
*_count
entry with an unknown map class name.
-
New template mrpt::math::confidenceIntervalsFromHistogram()
-
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()
Version 2.11.2: Released Oct 25th, 2023
Changes in libraries:
-
New function mrpt::gui::GetScaledClientSize().
-
Fix typo in data field: mrpt::obs::CObservationRange :
sensorConeApperture
->sensorConeAperture
-
Address the new field
variance
insensor_msgs/Range
(Closes issue #1270).
-
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.
Version 2.11.1: Released Oct 23rd, 2023
Changes in libraries:
-
Fix several build warnings introduced in the last version.
-
Voxel maps: A voxel is considered occupied if its occupancy is larger than
likelihoodOptions.occupiedThreshold
instead of a fixed0.5
.
-
Version 2.11.0: Released Oct 19th, 2023
Changes in libraries:
-
New voxel map containers, based on Faconti’s Bonxai header-only libray (MPL-2.0 license):
-
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.
Version 2.10.2: Released Oct 5th, 2023
Build system:
ROS: fix missing deps in package.xml needed for build via Nix.
MRPT and OpenCV versions were until now exposed as macros with 3 hexadecimal digits (e.g.
2.4.0
->0x240
), with a clear limitation of versions greater than 15. Now, both symbolsMRPT_VERSION
andMRPT_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 usesMRPT_VERSION>=xxx
orMRPT_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.-
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).
Version 2.10.1: Released August 10th, 2023
Build system:
Add cmake flag to disable LTO in pymrpt module.
Add -flto=auto to pymrpt so linking is much faster.
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.
Version 2.10.0: Released July 9th, 2023
Changes in libraries:
-
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
.
Version 2.9.4: Released July 1st, 2023
Python:
pymrpt now ships stub
.pyi
files, for IDEs to autocomplete MRPT Python programs.maps and multimaps are iterable again (Fixes a regression in v2.9.3)
timestamps now has a
__str__
operator andto_double()
method.
Build system:
Fix several modern cmake warnings.
BUG FIXES:
Fix fail to build with libftdi1 v1.4 (Ubuntu Focal).
Version 2.9.3: Released June 22nd, 2023
Python:
New module pymrpt.ros_bridge
Matrices now have proper conversion and accessor methods in the Python API, including conversion from/to numpy.
Reduce build time of pymrpt.
Version 2.9.2: Released June 20th, 2023
Changes in docs:
Update dependency in instructions from
libftdi-dev
tolibftdi1-dev
Changes in libraries:
-
mrpt::comms::CInterfaceFTDI Fix usage of deprecated API in libftdi
-
New static method mrpt::obs::CRawlog::ReadFromArchive() (useful for python bindings)
New overload mrpt::obs::obs_to_viz() for mrpt::obs::CSensoryFrame containers
-
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:
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)
Version 2.9.1: Release June 14th, 2023
Build system:
ROS 2: fix missing explicit dep on rclcpp in package.xml.
Version 2.9.0: Released June 7th, 2023
Changes in apps:
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.
-
Fix use of obsolete header
<cv_bridge.h>
in newer ROS distributions.
Version 2.8.1: Released April 17th, 2023
Changes in libraries:
-
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.
Version 2.8.0: Released April 8th, 2023
Changes in apps:
rosbag2rawlog: Added support for converting nav_msgs/Odometry topics to mrpt::obs::CObservationOdometry
Changes in libraries:
-
New driver for TAObotics IMU sensors. See mrpt::hwdrivers::CTaoboticsIMU and the example Example: hwdrivers_taobotics_imu
-
mrpt::math::getRegressionPlane() return value is not roughly the inverse of the condition number of the regression problem, which gives a stronger quality indicator than the former formula.
-
Header
<mrpt/opengl.h>
has been updated to include the backwards-compatible typemrpt::opengl::COpenGLScene
to smooth transition of existing code bases.mrpt::opengl::CSphere now has a number of divisions property instead of two (one of them was not actually used).
Fixed const correctness of mrpt::opengl::CGeneralizedEllipsoidTemplate::getNumberOfSegments()
-
Removed mrpt::system::setConsoleColor() (Deprecated since MRPT 2.3.3)
-
Build system:
Fix use of obsolete
qt5_use_modules()
.New minimum CMake version required is CMake 3.16.0
BUG FIXES:
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
Version 2.7.0: Released March 4th, 2023
Changes in libraries:
-
All OpenGL viewports: pan is now also achieved by pressing the mouse middle button (wheel) + dragging, for similarity with many other CAD UIs.
-
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):
New class mrpt::opengl::CSkyBox for rendering “3D background” as sky boxes. Refer to example Example: opengl_skybox_example
OpenGL shaders: more rational use of GLSL precision specifiers: highp for positions, lowp for colors.
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).
Version 2.6.0: Released January 12th, 2023
Changes in libraries:
-
Remove unused header:
<mrpt/math/bits_math.h>
-
BUG FIXES:
Fix wrong evaluation of the pivot point for the angular threshold parameters in ICP (Closes #1264)
Version 2.5.8: Released January 7th, 2023
Changes in libraries:
-
Move the
_deg
literal to a new namespace mrpt::literals to allow finer-grainedusing namespace mrpt::literals;
instead ofusing namespace mrpt;
. This change is backwards compatible, no user code change required, but recommended.
-
New mrpt::expr::CRuntimeCompiledExpression::register_function() to allow user-defined functions in runtime-compiled formulas.
-
Version 2.5.7: Released November 25th, 2022
Changes in applications:
navlog-viewer:
It now shows custom visualization artifacts stored in the new field mrpt::nav::CLogFileRecord::visuals.
Changes in libraries:
Upgrade embedded version of nanoflann to current
master
(2022-Nov-18).-
mrpt::math::KDTreeCapable updated to build against nanoflann v1.5.0
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.
Version 2.5.6: Released November 12th, 2022
Changes in libraries:
-
New template class mrpt::containers::PerThreadDataHolder
-
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).
-
mrpt::gui OpenGL canvas windows and components no longer have a background color property. It is now always handled by the mrpt::opengl::Viewport to avoid duplicated functionalities.
-
These functions are now thread-safe if built in a system with the
localtime_r()
variant oflocaltime()
:
-
Build system:
Provide CMAKE_BUILD_TYPES
SanitizeThread
andSanitizeAddress
.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
Version 2.5.5: Released October 19th, 2022
Changes in applications:
ptg-configurator:
A maximum trajectory time can be specified now for rendering PTGs.
New CLI arguments
--ini
,--ini-section
to automate loading custom INI files.
Changes in libraries:
-
mrpt::container::yaml:
Clearer error messages when an invalid type conversion is requested.
It now does not throw internal exceptions when trying to convert strings to bool.
mrpt_imgs_grp
mrpt::img::CImage::filledRectangle() is now implemented using the fast opencv draw function instead of the slow mrpt::img::CCanvas default base implementation.
-
Correct copyright notes for embedded version of the CSparse sources (PR #1255).
-
mrpt::typemeta::TEnumType<> on invalid names, it now prints all valid known enum names in its exception error message.
-
Version 2.5.4: Released September 24th, 2022
Changes in libraries:
-
mrpt::opengl::CFBORender is now faster, using a LUT for converting from logarithmic to linear depth values.
-
Implemented missing mrpt::ros1bridge::toROS() for point clouds.
-
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.
Version 2.5.3: Released September 6th, 2022
Changes in libraries:
-
nanogui::mainloop() (and mrpt::gui::CDisplayWindowGUI()) now allows defining a minimum period for calls to user callback functions via a new second optional parameter.
-
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
)
Version 2.5.2: Released August 30th, 2022
BUG FIXES:
mrpt::math::MatrixBase::eig_symmetric() now is ensured not to return negative eigenvalues due to numerical innacuracies in some platforms (i386).
mrpt::maps::COccupancyGridMap2D::getAsPointCloud() did not return the outermost cells as obstacles.
Fix unit test errors when compiling with LTO (Closes Debian bug #1015550)
Version 2.5.1: Released August 4th, 2022
Changes in applications:
RawLogViewer:
Bold points when selecting a sensor in the timeline UI.
Changes in libraries:
Embedded nanoflann version upgraded to v1.4.3
BUG FIXES:
Fix regression: mrpt::opengl::CAssimpModel may fail to resolve texture relative paths.
mrpt::opengl::CMesh was implementing texture coordinates flipping (u,v) wrt documented behavior.
Fix
static_assert()
failure in CTicTac when building with latest emscripten clang compiler.Fix regression: yaml parsing boolean values may throw an exception inside
std::stoi()
.
Version 2.5.0: Released July 18th, 2022
Changes in applications:
RawLogViewer:
New time-line UI for quickly navigating and selecting observations.
New application:
ros-map-yaml2mrpt: CLI tool to import ROS map_server maps into MRPT formats.
Changes in libraries:
-
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
-
mrpt::Clock::toDouble() now returns 0 for default-constructed (invalid) time_point.
-
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()
-
Add correct displacement covariance calculation between two poses with cross-correlation via new method mrpt::poses::CPose3DQuatPDFGaussian::inverseCompositionCrossCorrelation() (Closes #1242)
-
New funtions mrpt::system::toAbsolutePath(), mrpt::system::pathJoin()
Most functions in Directories, files, and file names ported to C++17 std::filesystem
-
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::Viewport 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.
Version 2.4.10: Relased June 24th, 2022
Changes in applications:
ptg-configurator:
New menu action to export selected path to matlab/octave script.
RawLogViewer:
Visual improvements and display of timestamps in local time too.
Changes in libraries:
-
New set of functions to help visualize observations: customizable_obs_viz_grp
-
Adds covariance mapping to SE(3) for GTSAM (Closes #1229)
-
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.
Version 2.4.9: Released June 7th, 2022
Changes in libraries
-
new method mrpt::math::TPlane::signedDistance()
-
Fixed missing
find_package()
in module config.cmake file.
-
BUG FIXES:
Version 2.4.8: Released May 26th, 2022
Build system:
Fixed various ROS-level public dependencies.
Version 2.4.7: Released May 26th, 2022
Examples:
gui_depth_camera_distortion: Added option to change distortion model.
Build system
Fixed ROS-level public dependency on suitesparse.
Enable tinyxml2 for ROS builds.
Changes in libraries:
-
Method mrpt::maps::CPointsMap::addFrom() removed, it overlapped with mrpt::maps::CPointsMap::insertAnotherMap()
New optional parameter in mrpt::maps::CPointsMap::insertAnotherMap()
-
Version 2.4.6: Released May 24th, 2022
Build system
Fixed ROS-level public dependencies via package.xml
Version 2.4.5: Released May 22nd, 2022
Changes in libraries:
New module [mrpt-ros2bridge] to support conversions to/from ROS2 data types and MRPT classes.
Build system:
Fix detection of dependencies for both ROS1 and ROS2.
Version 2.4.4: Released March 5th, 2022
New web-based applications
All MRPT modules (including [mrpt-opengl] and mrpt-nanogui) are now compatible with Emscripten so they can run as Javascript + wasm on any modern browser.
Changes in applications:
RawlogViewer:
Browse dialog: Smarter coloring of pointclouds; check all & none buttons for sensor layers.
rawlog-edit:
Operation
--camera-params
now also works for mrpt::obs::CObservation3DRangeScan observations.New operation
--describe
.
Changes in libraries:
-
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.If ROS environment variables are detected at CMake configure time, unit tests are disabled by default (to reduce build time in build farms).
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).
Version 2.4.3: Released Feb 22nd, 2022
Changes in applications:
navlog-viewer:
The timestamp is now always shown.
BUG FIXES:
Do not run offscreen rendering unit tests in MIPS arch, since they seem to fail in autobuilders.
mrpt::vision::checkerBoardCameraCalibration() did not return the distortion model (so if parameters are printed, it would look like no distortion at all!).
mrpt::gui::CDisplayWindowGUI::createManagedSubWindow() created the subwindows helper UI on top of the other user windows. It now remains on the back of other windows.
Version 2.4.2: Released Feb 3rd, 2022
Changes in libraries:
-
mrpt::container::yaml::operator(size_t) added, conditionally to
size_t
being a different type thanuint64_t
and such (Fixes build errors on OSX).
-
mrpt::callStackBackTrace() (and exception backtraces) now only use BFD to solve for line numbers in DEBUG builds, to avoid the large delay in processing each exception.
New method mrpt::WorkerThreadsPool::size().
-
ExprTk updated to latest version.
-
GUI windows can now have custom icons via mrpt::gui::CDisplayWindowGUI::setIcon() or mrpt::gui::CDisplayWindowGUI::setIconFromData()
-
New static method mrpt::img::CImage::LoadFromFile()
-
Vector and matrix classes: add [[nodiscard]] to static “constructor” methods to avoid mistakes.
-
mrpt::opengl::CFBORender now does not rely on GLUT to create opengl contexts, but on EGL.
-
Add syntactic sugar function mrpt::typemeta::str2enum<>().
-
BUG FIXES:
mrpt::opengl::CFBORender did only render the
main
viewport, it now processes all of them.Fix FTBFS with ffmpeg 5.0 (Debian Bug # 1004585)
Version 2.4.1: Released Jan 5th, 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:
-
Remove unused header
<mrpt/3rdparty/llvm/propagate_const.h>
.
-
mrpt::graphs::CDijkstra now has an optional maximum topological search range.
-
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.).
Version 2.4.0: Released Dec 12th, 2021
Changes in build system:
Most important CMake variables now are prefixed with
MRPT_
to avoid name collisions if using MRPT as a git submodule in a larger project.GNUInstallDirs
directories are now always honored when installing.
Changes in acpplications:
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:
-
Application rawlog-edit is now available as the C++ class mrpt::apps::RawlogEditApp
-
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()
andpush_back()
for a smoother transition from STL containers.mrpt::containers::yaml and libfyaml updated to latest version (more memory efficient parser).
-
New base virtual interface class mrpt::Stringifyable unifying the asString() method already offered by many MRPT classes.
-
[API change] mrpt::img::TCamera methods changed to allow defining fish-eye camera models too.
-
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.
-
New function mrpt::math::xcorr()
New header
<mrpt/math/gtsam_wrappers.h>
, see mrpt_gtsam_wrappersNew method mrpt::math::TBoundingBox::containsPoint()
-
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.
-
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.
-
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<>
.
-
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::FrameBuffer, used to refactor mrpt::opengl::CFBORender
New methods to control face culling:
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: Example: opengl_custom_shaders_demo
-
New function mrpt::poses::sensor_poses_from_yaml()
New header
<mrpt/poses/gtsam_wrappers.h>
, see mrpt_gtsam_wrappers
-
New function mrpt::random::partial_shuffle()
New function mrpt::random::portable_uniform_distribution()
-
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.
-
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”).
-
[API change] mrpt::tfest::TMatchingPair members are now called “local” vs “global” instead of the former, more confusing, “this” vs “other”.
-
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()
Image-mode was not serialized in mrpt::opengl::Viewport
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::Viewport
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.
Version 2.3.2: Released Jul 14, 2021
Changes in applications:
RawLogViewer:
More tree view icons.
“Play video” window now also shows timestamps.
SceneViewer3D:
New command-line flag
--imgdir
to define the base path for lazy-load images.
rawlog-edit:
New operation
--export-txt
exploiting the new export-to-txt API in mrpt::obs::CObservation
navlog-viewer:
New UI tools to manually pick and export selected PTG selections to a training YAML file.
Changes in libraries:
-
YAML macros
MCP_LOAD_OPT()
,MCP_LOAD_REQ()
, andMCP_SAVE()
now also support reading and writing enums directly as YAML, transparently converting numerical values to/from their symbolic names.
-
Added C++14 helper templates mrpt::uint_select_by_bytecount_t and mrpt::int_select_by_bytecount_t
-
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.
-
mrpt::img::CImage::loadFromFile() now avoids memory allocations if there was already an image in memory with the same size.
-
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.
-
New methods mrpt::math::TTwist2D::rotated() and mrpt::math::TTwist3D::rotated()
-
-
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.
Version 2.3.1: Released May 26th, 2021
General cmake scripts:
find_package(mrpt-xxx)
is now much faster.
Changes in applications:
RawLogViewer:
Browse scans window now has a check-box list to show/hide individual sensors.
SceneViewer3D:
Graceful failure when loading a corrupted 3Dscene file.
Changes in libraries:
-
Removed mrpt::reverseBytesInPlace(long double) for it not being portable.
-
New environment variable MRPT_YAML_PARSER_VERBOSE controlling mrpt::containers::yaml
-
New argument to pass custom ffmpeg options to mrpt::hwdrivers::CFFMPEG_InputStream::openURL(). New default is to prefer stream over TCP for more reliable IP cameras reading.
mrpt::hwdrivers::CHokuyoURG now has a parameter for between-data communications timeout (
comms_between_timeout_ms
).
-
mrpt::gui::CDisplayWindowGUI new methods to minimize/restore subwindows.
-
New method mrpt::math::TLine3D::closestPointTo()
New methods mrpt::math::TPose3D::translation(), mrpt::math::TPose2D::translation().
-
New mrpt::obs::CActionCollection::insert() overload for smart pointers.
New method mrpt::obs::CObservation2DRangeScan::getScanAngle() and clarify docs on class members.
New class mrpt::obs::CObservation3DScene.
mrpt::obs::CObservationIMU now uses std::array instead of std::vector (faster due to less dynamic memory).
-
Deprecate mrpt::opengl::Scene::dumpListOfObjects() in favor of new mrpt::opengl::Scene::asYAML()
New method mrpt::opengl::CSimpleLine::setLineCoords() accepting mrpt::math::TPoint3D (older signature deprecated).
-
New return-by-value signature for mrpt::system::CDirectoryExplorer::explore(), older version deprecated.
mrpt::system::extractFileDirectory() returns
"."
instead of an empty string for filenames without any explicit full path.
-
BUG FIXES:
Fix wrong formatting of empty string values (not null values) in mrpt::containers::yaml.
Fix exception loading old datasets with stereo observations, via a new argument in mrpt::img::CImage::makeSureImageIsLoaded()
Fix unhandled deserialization of v2 of mrpt::opengl::CPlanarLaserScan
Fix build errors with MinGW.
Version 2.3.0: Released April 25th, 2021
General build changes:
CMake >=3.8.0 is now required to ensure proper handling of dependencies compile options.
Changes in applications:
ptg-configurator: target now also comprises a heading angle.
RawLogViewer:
New tab with CObservation3DRangeScan visualization options.
All icons have been updated for a more modern look.
Changes in libraries:
-
add method mrpt::containers::map_as_vector::at()
-
-
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
-
-
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()
-
mrpt::opengl::CAssimpModel now uses a texture cache to speed up and reduce RAM usage if loading the same textures in different objects.
-
New function mrpt::system::progress()
-
BUG FIXES:
ptg-configurator: Fix failure to list existing PTGs, due to RTTI unregistered name “CParameterizedTrajectoryGenerator”.
mrpt::opengl::Viewport::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 inz
. Fixed to load zeros instead.Fixed crash in mrpt::vision::checkerBoardCameraCalibration() causing segfault in the camera-calib app.
Version 2.2.0: Released March 10th, 2021
Changes in libraries:
-
Remove all obsolete
SIFTOptions.implementation
values.OpenCV
is now the only possibility.
-
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.
Version 2.1.8: Released Feb 23rd, 2021
Changes in applications:
RawLogViewer:
“Scan animation” window: now also shows the timestamp of observations.
camera-calib and kinect-stereo-calib:
New option to save camera calibration results as YAML files.
navlog-viewer:
New option to enable orthogonal view.
General build changes:
Fix excessive alignment in aarch64 (32->16 bytes).
clang-format: enforce and upgraded to use clang-format-10.
Fix building against the non-legacy GL library (Linux).
nanoflann source code is no longer included as a copy: it will be used as the system library libnanoflann-dev, or as a git submodule if the former is not found.
Changes in libraries:
-
New YAML to/from matrix methods: mrpt::containers::yaml::FromMatrix(), mrpt::containers::yaml::toMatrix()
-
New CMake build flags
MRPT_EXCEPTIONS_WITH_CALL_STACK
to optionally disable reporting call stacks upon exceptions andMRPT_EXCEPTIONS_CALL_STACK_MAX_DEPTH
to set their maximum depth.
-
mrpt::hwdrivers::CHokuyoURG now has a parameter for communications timeout (
comms_timeout_ms
).
-
New class mrpt::math::TBoundingBox
-
Const correctness fixed in all mrpt::maps::CMetricMap classes.
-
mrpt::opengl::CFrustum() new constructor from mrpt::img::TCamera()
-
mrpt::poses::CPose3D : Add more syntactic sugger static constructors.
-
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”.
Version 2.1.7: Released Jan 2nd, 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
Version 2.1.6: Released Dec 14th, 2020
Changes in libraries:
-
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.
Version 2.1.5: Released Dec 6th, 2020
Changes in libraries:
-
Both mrpt::containers::CDynamicGrid and mrpt::containers::CDynamicGrid3D are now compatible with range-based for loops, and also have a data() method.
-
Added mrpt::Clock::nowDouble()
New method mrpt::WorkerThreadsPool::name()
Function mrpt::system::callStackBackTrace() moved to mrpt::callStackBackTrace()
mrpt::callStackBackTrace() now uses BFD to find out line numbers if debug info (at least -g1) is available.
Stacked exceptions changes:
Line numbers will be now shown if built with debug info (>= -g1).
Exceptions in STL or any other 3rd-party library will be also reported with exact call point line number, as long as MRPT_START/MRPT_END is used in the user function.
No further need to call mrpt::exception_to_str(), just calling what() will return a detailed stack backtrace.
New function mrpt::winerror2str()
-
Added missing method for consistent API across pose classes: mrpt::math::TPose3D::operator+()
-
mrpt::system::COutputLogger::writeLogToFile() will now save all messages despite the runtime log verbosity level.
-
BUG FIXES:
Fix error rendering an opengl scene with mrpt::opengl::CCamera objects in it.
rawlog-edit silently ignored when more than one operation was requested.
Fix FTBFS against libjsoncpp 1.9.4 (Closes #1118)
Fix AppStream errors and warnings in Debian Tracker.
Version 2.1.4: Released Nov 8th, 2020
Changes in libraries:
-
mrpt::format() is no longer a template but a function, to use GCC automated printf-format warnings.
-
mrpt::containers::yaml avoids throwing internal exceptions as part of regular valid conversions, and better support and report of out-of-range integers.
-
mrpt::math::linspace() added overload returning by value.
-
mrpt::random::CRandomGenerator::permuteVector() added overload returning by value.
-
mrpt::tfest::TMatchingPairListTempl<T>::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
Version 2.1.3: Released Oct 21st, 2020
Changes in libraries:
-
Refactor parsing functionality as new exposed method mrpt::config::config_parser()
-
mrpt::gui::CDisplayWindowGUI subwindows control UI automatically keep tracks of focused subwindows.
-
Build system:
Support for ccache, enabled by default if found.
Fix build with system libsimpleini-dev.
BUG FIXES:
Fix mrpt::opengl::CFBORender requiring images with origin at the bottom-left corner.
Version 2.1.2: Released Oct 20th, 2020
BUG FIXES:
Fix wrong coloring of graph edges in mrpt::opengl::graph_visualize() (Closes #1111).
Fix Debian Lintian error: exporting copyrighted sources as part of simpleini submodule.
Version 2.1.1: Released Oct 19th, 2020
Changes in applications:
SceneViewer3D:
Command-line argument is now interpreted as ASSIMP model to open if it is not a 3Dscene.
New menu: “File -> Import -> Show image” useful to test image-mode viewport rendering.
Changes in libraries:
-
mrpt::Clock now has a simulated time mode. See mrpt::Clock::setSimulatedTime()
-
Useless nanogui_win() converted into mrpt::gui::CDisplayWindowGUI::nanogui_screen()
nanogui: New methods: nanogui::Screen::mouseState(), nanogui::Screen::mouseModifiers()
Managed subwindows with minimize/restore capability. See mrpt::gui::CDisplayWindowGUI::createManagedSubWindow()
-
New method mrpt::img::CImage::channelCount()
-
New load flags in mrpt::opengl::CAssimpModel::loadScene()
-
BUG FIXES:
navlog-viewer: Crash when clicking “play” (Closes #1103).
RawLogViewer: Fix wrong indices in tree view. Fix freezed progress bar loading a second rawlog.
RawLogViewer: Fix wrong rendering if font is missing in the system (Ubuntu 20.04)
rawlog-edit: Fix cut operation leaving empty sensory frames/action collections.
mrpt::opengl::CCylinder::setHasBases() was ignored since last OpenGL3 refactor.
Fix building against OpenCV 4.4
Correct texture loading in mrpt::opengl::CAssimpModel.
Fix wrong aspect ratio of image-mode opengl viewports (Closes #1101).
Version 2.1.0: Released Aug 31st, 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:
-
New class mrpt::containers::yaml for nested, YAML-like data structures.
-
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.
-
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
-
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.
Version 2.0.4: Released Jun 20, 2020
Changes in applications:
rawlog-edit, rawlog-grabber: Now allows loading external “plugin” modules (.so) with user-defined types.
RawLogViewer, navlog-viewer, ptg-configurator allows more than one “plugin” modules to be loaded.
Changes in libraries:
-
New semantically-rich named static methods:
-
CObservation3DRangeScan::points3D_convertToExternalStorage() stores point clouds with points as rows (vs as columns as it did before).
-
Emit warnings to std::cerr whenever opengl memory is leaked due to OpenGL buffers being created and destroyed in different threads.
Overlaid text messages are now also (de)serialized in mrpt::opengl::Viewport, and hence in 3D scenes in general.
All opengl shader base classes now expose their internal buffers as const ref. See children of mrpt::opengl::CRenderizable
-
New class: mrpt::system::CControlledRateTimer (+ associated example)
New functions: mrpt::system::loadPluginModule(), mrpt::system::loadPluginModules()
mrpt::system::CRateTimer : enforce use of high-resolution monothonic clock.
mrpt::system::CTicTac : enforce use of nanosecond monothonic clock.
Misplaced functions moved to their proper namespace: mrpt::io::vectorToTextFile()
New functions: mrpt::system::thread_name() to get and set thread names for debuggers.
mrpt::system::setConsoleColor(): Do not change color if stdout/stderr are not real terminals.
-
mrpt::nav::PlannerSimple2D does not throw an exception if goal/source is out of map bounds.
-
BUG FIXES:
mrpt::obs::CObservation3DRangeScan would try to (incorrectly) “autofix” camera resolution if loading an externally-stored observation.
mrpt::maps::CPointsMap::determineMatching2D() : avoid potential multi-thread problems with a vector::swap()
Fix build against opencv <3.4.4
Fix potential pointer to local returned in CParticleFilterData
Fix: mrpt::maps::CPointsMapXYZI::setFromPCLPointCloudXYZI() was using a non-existing method.
Fix: mrpt::nav::PlannerSimple2D did not honored maximum path length correctly.
Fix race condition in CGenericCamera_AVI unit test.
Version 2.0.3: Released May 13, 2020
Changes in applications:
navlog-viewer: Can now navigate with keyboard arrows too.
RawLogViewer: better 3D pointcloud coloring in observation view and in “scan animation” view.
Changes in libraries:
-
Point cloud classes mrpt::maps::CPointsMap : New methods:
load2D_from_text_stream()
load3D_from_text_stream()
save2D_to_text_stream()
save3D_to_text_stream()
-
More accurate analytical Jacobians for CPose3DQuatPDFGaussian::inverse() (Closes #1053)
BUG FIXES:
Incorrect number of points loaded when trying to load point clouds from incorrectly-formatted text files.
Fix build error in riscv64 (gcc doesn’t know mtune=native for that arch)
Fix spurious unit test failures in mrpt::apps::RawlogGrabberApp due to system load.
-
Version 2.0.2: Released May 4th, 2020
Changes in applications:
navlog-viewer: Ported to the new nanogui UI system (fixes random OpenGL context errors in former version).
Changes in libraries:
mrpt_containers_grp
mrpt::containers::vector_with_small_size_optimization : Get rid of potential uninitialized usage GCC warnings.
mrtp_hwdrivers_grp
Remove support for obsolete XSens MTi 3rd generation devices. Removed class mrpt::hwdrivers::CIMUXSens. 4th+ generation still supported.
mrpt_gui_grp
Fix mouse-motion rotation glitches if clicking inside a nanogui control.
Fix cmake errors building user programs in Windows (missing glfw dependency).
mrpt_math_grp
mrpt::math::RANSAC_Template made more generic to support custom dataset and model types.
mrpt_opengl_grp
Fix displaying of uninitialized textured in mrpt::opengl::CTexturedPlane. It now uses the default solid color of the object.
mrpt_ros1bridge_grp
Narrower build and run time dependencies: rosbag -> rosbag_storage
Version 2.0.1: Released April 3rd, 2020
Changes in applications:
RawLogViewer: new “-l xxx.so” flag to load datasets with types defined in external projects.
Changes in libraries:
mrpt_obs_grp
mrpt::obs::CObservationRobotPose : Fixed missing serialization of sensorPose
Version 2.0.0: Released March 29th, 2020
Most important changes:
MRPT now requires C++17 to build and use. See this page for a guide to port existing code to MRPT 2.0: Porting code from MRPT 1.{3,4,5} to MRPT 2.*
Support for old namespaces
mrpt-scanmatching
,mrpt-reactivenav
is over.Backwards compatible headers for “maps” and “observations” in mrpt::slam are removed. They moved to their own namespaces in MRPT v1.3.0 (Jan 2015).
All pointer typedefs are now in their respective classes: FooPtr -> Foo::Ptr
Add support for serialization with std::variant
PbMap has been factored out into its own repository
XML-based database C++ classes have been removed from MRPT.
Changes in applications:
RawLogViewer:
The ICP module now supports Velodyne 3D scans.
rawlog-edit:
New operation:
--de-externalize
pf-localization:
Odometry is now used also for observation-only rawlogs.
Changes in libraries:
All
otherlibs
subdirectories have been renamed to3rdparty
since it is a widespread name used in most projects.mrpt_base_grp => Refactored into several smaller libraries, one per namespace.
Removed class std::vector<std::string>. Replace by STL containers of
std::string
and functions mrpt::system::stringListAsString() in String management and utilities.
[mrpt-core] [NEW IN MRPT 2.0.0]
Memory alignment of aligned_allocator_cpp11<> is set to 16,32 or 64 depending on whether AVX optimizations are enabled, to be compatible with Eigen.
mrpt::cpu::supports() : a new cross-OS CPU feature detection function.
mrpt::Clock allows users to select between Realtime or Monotonic sources.
Removed custom macro MRPT_UNUSED_PARAM (replaced by c++17 attribute).
Add syntactic suggar mrpt::lockHelper()
[mrpt-math] [NEW IN MRPT 2.0.0]
Removed functions (replaced by C++11/14 standard library):
mrpt::math::erf, mrpt::math::erfc, std::isfinite, mrpt::math::std::isnan
mrpt::math::make_vector<>
=>std::vector<>{...}
braced initializator
Removed the include file:
<mrpt/math/jacobians.h>
. Replace by<mrpt/math/num_jacobian.h>
or individual methods in [mrpt-poses] classes.
[mrpt-config] [NEW IN MRPT 2.0.0]
mrpt::config::CConfigFileBase::write() now supports enum types.
-
New class mrpt::gui::CDisplayWindowGUI exposing powerful GUI possibilities via the nanogui project.
[mrpt-img] [NEW IN MRPT 2.0.0]
mrpt::img::TCamera distortion parameters now also supports the extra K4,K5,K6 distortion parameters.
[mrpt-serialization] [NEW IN MRPT 2.0.0]
New method mrpt::serialization::CArchive::ReadPOD() and macro
MRPT_READ_POD()
for reading unaligned POD variables.-Add support for
$env{}
syntax to evaluate environment variables.
-
rbpf-slam: Add support for simplemap continuation.
CICP: parameter
onlyClosestCorrespondences
deleted (always true now).mrpt::slam::CICP API: Simplified and modernized to use only one output parameter, using std::optional.
-
functions to get timestamp as local time were removed, since they don’t make sense. All timestamps in MRPT are UTC, and they can be formated as dates in either UTC or local time frames.
[mrpt-rtti] [NEW IN MRPT 2.0.0]
All classes are now registered (and de/serialized) with their full name including namespaces. A backwards-compatible flag has been added to mrpt::rtti::findRegisteredClass().
CLASS_INIT() macro for automatic registration of classes has been removed, since it is not well-defined in which order global objects will be initialized. Therefore, manual registration (as already done in registerAllClasses.cpp files) is left as the unique registration system. This fixes warning messages “[mrpt::rtti::registerClass] Warning: Invoked with a nullptr”.
-
Removed deprecated mrpt::nav::THolonomicMethod.
mrpt::nav::CAbstractNavigator : callbacks in mrpt::nav::CRobot2NavInterface are now invoked after
navigationStep()
to avoid problems if user code invokes the navigator API to change its state.Added methods to load/save mrpt::nav::TWaypointSequence to configuration files.
Waypoints now have a field
speed_ratio
which is directly forwarded to the low-level reactive navigator.
[mrpt-comms] [NEW IN MRPT 2.0.0]
This new module has been created to hold all serial devices & networking classes, with minimal dependencies.
-
mrpt::maps::CMultiMetricMap has been greatly simplified and now it is actually defined in the mrpt-maps library.
New map type: mrpt::maps::CPointsMapXYZI for pointclouds with an intensity channel.
New observation class: mrpt::obs::CObservationPointCloud
Added optional “channel” attribute to CReflectivityGridMap2D and CObservationReflectivity to support different colors of light.
-
COpenNI2Generic: is safer in multithreading apps.
CHokuyoURG:
Rewrite driver to be safer and reduce mem allocs.
New parameter
scan_interval
to decimate scans.
VelodyneCalibration: Can now load YAML files, in addition to XML.
New sensor state enum value: mrpt::hwdrivers::CGenericSensor::ssUninitialized
NMEA GPS parser: now also recognizes all existing talker IDs (GP, GN, GA, etc.)
-
Update Assimp lib version 4.0.1 -> 4.1.0 (when built as ExternalProject)
Rendering engine rewritten to work using OpenGL Core (GLSL 3.3) instead of Legacy fixed functions.
-
mrpt::obs::CObservation2DRangeScan : Deprecated access to scan data via proxy objects
obs->scan[i]
,obs->validRange[i]
,obs->intensity[i]
has been deleted. Please use the alternative getters/setters:obs->getScanRange(i)
, etc.mrpt::obs::T3DPointsProjectionParams and mrpt::obs::CObservation3DRangeScan::unprojectInto now together support organized PCL point clouds.
New method: mrpt::obs::CObservation3DRangeScan::rangeImage_getAsImage()
Support for multiple-return sensors in mrpt::obs::CObservation3DRangeScan.
New NMEA frame class: Message_NMEA_GSA
[mrpt-poses] [NEW IN MRPT 2.0.0]
Reorganized all Lie Algebra methods into Lie Algebra methods for SO(2),SO(3),SE(2),SE(3)
Removed CPose3DRotVec, since its conceptual design is identical to Lie tangent space vectors.
-
Removed FASTER methods, and the libCVD 3rd party dependency.
BUG FIXES:
Fix reactive navigator inconsistent state if navigation API is called from within rnav callbacks.
Fix incorrect evaluation of “ASSERT” formulas in mrpt::nav::CMultiObjectiveMotionOptimizerBase
Fix aborting reading from LMS111 scanner on first error.
Fix == operator on CPose3D: it now uses an epsilon for comparing the rotation matrices.
Fix accessing unaligned POD variables deserializing CObservationGPS (via the new
MRPT_READ_POD()
macro).Fix segfault in CMetricMap::loadFromSimpleMap() if the provided CMetricMap has empty smart pointers.
Fix crash in CGPSInterface when not setting an external mutex.
Fix potential crashes in RawLogViewer while editing list of observations.
Fix incorrect conversion from quaternion to CPose3D.
Version 1.5.7: Released 24/APR/2019
Detailed list of changes:
mrpt_base_grp
The following features have been finally ported to C++11. User code now requires, at least, C++11 enabled:
stlplus-based smart pointers replaced by std::shared_ptr. Backwards compatibility API is maintained.
mrpt::system::TThreadHandle now is a wrapper around std::thread.
Atomic counters now based on std::atomic. Custom implementation has been removed.
stlplus source code has been removed.
mrpt::utils::COutputLogger: change log str format from “[name|type|time]” to “[time|type|name]”.
-
levenberg-Marquardt graphslam modified to use more stable SE(2) Jacobians.
CNetworkOfPoses: read/write format made compatible with G2O EDGE_SE2 types.
-
Add virtual method CAbstractPTGBasedReactive::getHoloMethod()
New method CAbstractPTGBasedReactive::enableRethrowNavExceptions() to rethrow exceptions during navigation.
Waypoints now have a field
speed_ratio
which is directly forwarded to the low-level reactive navigator.
BUG FIXES:
Fix missing “-ldl” linker flag.
Fix building against wxWidgets 3.1.1 in Windows (zlib link error).
Fix potential segfault in 3D reactive navigator.
Version 1.5.6: Released 24/APR/2018
Applications:
pf-localization:
Odometry is now used also for observation-only rawlogs.
-
mrpt::hwdrivers::COpenNI2Generic : added mutexes for safer multi-threading operation.
mrpt::hwdrivers::CHokuyoURG : Added a new parameter to skip scans. Driver clean up to be safer and perform less memory allocs.
-
COccupancyGridMap2D: New LIDAR insertion parameters: maxFreenessUpdateCertainty, maxFreenessInvalidRanges.
mrpt_reactivenav_grp
CAbstractPTGBasedReactive: Added new score
holo_stage_eval
.
BUG FIXES:
circular_buffer: exception made state preserving
Version 1.5.5: (Under development)
Detailed list of changes:
-
mrpt::nav::CHolonomicFullEval now uses an internal sin/cos LUT cache for improved performance.
-
A new class for SICK TIM561(TIM55x/TIM56x) lidar:
A new source file named
CSICKTim561Eth_2050101.cpp
, which supports SICK TIM series lidar including Tim55x, Tim56x
A new test sample for SICK TIM561(TIM55x/TIM56x) lidar:
sample/SICK_tim561eth_test/test.cpp
BUG FIXES:
Fix likelihood computation in mrpt::maps::CReflectivityGridMap2D (which led to crash)
Fixed regression in particle resampling affecting RBPF-SLAM methods. Introduced in Dec. 2016 with this commit.
-
Version 1.5.4: Released 31/OCT/2017
Detailed list of changes:
mrpt_base_grp
Fix potential uninitialized value in CRobot2DPoseEstimator::getLatestRobotPose()
MRPT_getCompilationDate() returns time as well
-
mrpt::gui::mrptEventMouseMove : Added new mrpt::gui windows event type.
Build system:
Fix MRPTConfig.cmake for system octomap libraries.
Fix package-contains-vcs-control-file (.gitingore) Lintian error.
Fix compiling without liboctomap-dev in Ubuntu PPA.
BUG FIXES:
Fix waypoint reactive navigator edge case in which “end event” won’t be issued.
Fix waypoint reactive navigator error while doing final aligning (missing and dupplicated nav-end events).
Fix aborting reading from LMS111 scanner on first error.
Fix waypoint reactive navigator edge case in which “end event” won’t be issued.
Fix corrupted pointers in CNetworkOfPoses after copy or move operations.
Fix invalid TP-targets generated during reactive navigation.
Fix memory leak in reactivenav engine.
Fix potential out-of-range access in CObservation3DRangeScan::convertTo2DScan()
Version 1.5.3: Released 13/AUG/2017
Detailed list of changes:
CMake >=3.1 is now required for use of ExternalProjects.
Scripts
packaging/prepare_{debian,release}.sh
have been refactored and simplified.Removed embedded source code versions of Eigen, assimp and octomap. Downloaded and built as ExternalProjects if not present in the system.
Releases will be signed with PGP from now on and posted as binary attachments to GitHub releases.
Version 1.5.2: Released 6/AUG/2017
Detailed list of changes:
Changes in libraries:
mrpt_base_grp
Added methods:
mrpt::synch::CCriticalSection::try_enter()
mrpt::synch::CCriticalSectionRecursive::try_enter()
-
mrpt::nav::CAbstractNavigator : callbacks in mrpt::nav::CRobot2NavInterface are now invoked after
navigationStep()
to avoid problems if user code invokes the navigator API to change its state.Added methods to load/save mrpt::nav::TWaypointSequence to configuration files.
-
rbpf-slam: Add support for simplemap continuation.
BUG FIXES:
Fix reactive navigator inconsistent state if navigation API is called from within rnav callbacks.
Fix incorrect evaluation of “ASSERT” formulas in mrpt::nav::CMultiObjectiveMotionOptimizerBase
Version 1.5.1: Released 21/JUN/2017
Detailed list of changes:
Changes in libraries:
Version 1.5.0: Released 10-JUN-2018
Changes in apps:
New app PTG-configurator
ReactiveNavigationDemo has been totally rebuilt as a 3D visualizer capable of testing different navigation algorithms and robot kinematics.
-
Now displays a textual and graphical representation of all observation timestamps, useful to quickly detect sensor “shortages” or temporary failures.
New menu operation: “Edit” -> “Rename selected observation”
mrpt::obs::CObservation3DRangeScan pointclouds are now shown in local coordinates wrt to the vehicle/robot, not to the sensor.
rawlog-edit : New flag: --txt-externals
Changes in libraries:
mrpt_base_grp
New API to interface ZeroMQ: noncstream_serialization_zmq
Deprecated function (since 1.3.0) deleted: mrpt::system::registerFatalExceptionHandlers()
New method mrpt::poses::CPosePDFParticles::resetAroundSetOfPoses()
Class mrpt::utils::CRobotSimulator renamed ==> mrpt::kinematics::CVehicleSimul_DiffDriven
New twist (linear + angular velocity state) classes: mrpt::math::TTwist2D, mrpt::math::TTwist3D
New template method: mrpt::utils::CStream::ReadAsAndCastTo
Added missing method mrpt::poses::CPose2D::inverseComposePoint() for consistency with CPose3D
New class std::recursive_mutex
New class mrpt::system::COutputLogger replaces the classes mrpt::utils::CDebugOutputCapable (deprecated) and mrpt::utils::CLog (removed).
New macros for much more versatily logging:
MRPT_LOG_DEBUG(), MRPT_LOG_INFO(), MRPT_LOG_WARN(), MRPT_LOG_ERROR()
MRPT_LOG_DEBUG_STREAM, MRPT_LOG_INFO_STREAM, MRPT_LOG_WARN_STREAM, MRPT_LOG_ERROR_STREAM
New functions for polynomial roots: see Find polynomial roots (
New functions for signal filtering: see Filtering algorithms
New functions for Fresnel integrals: see fresnel_integrals_grp
New classes mrpt::math::CAtan2LookUpTable, mrpt::math::CAtan2LookUpTableMultiRes
[API change] The following functions are no longer static methods: (since their classes are now derived from the state-aware mrpt::system::COutputLogger)
Deleted methods in Eigen-extensions: leftDivideSquare(), rightDivideSquare()
Removed support for named semaphores in mrpt::synch::CSemaphore
new method mrpt::system::CTimeLogger::getLastTime()
Removed mrpt::utils::CStartUpClassesRegister, replaced by the new macro MRPT_INITIALIZER()
New class mrpt::utils::CRateTimer
mrpt::poses::CRobot2DPoseEstimator now uses a more generic odometry-based velocity model (vx,vy,omega).
New template mrpt::utils::ts_hash_map<> for thread-safe, std::map-like containers based on hash functions.
Included exprtk header-only library to runtime compile & evaluation of mathematical expressions, under
<mrpt/3rdparty/exprtk.hpp>
New smart pointer templates:
mrpt::utils::copy_ptr<>
,mrpt::utils::poly_ptr<>
.New colormap: mrpt::utils::hot2rgb()
New function mrpt::system::find_mrpt_shared_dir()
New class mrpt::containers::CDynamicGrid3D<>
New function mrpt::comms::net::http_request()
New function mrpt::system::now_double()
New function mrpt::rtti::getAllRegisteredClassesChildrenOf()
Safer CClassRegistry: detect and warn on attempts to duplicated class registration.
New class mrpt::expr::CRuntimeCompiledExpression
mrpt::config::CConfigFile and mrpt::config::CConfigFileMemory now can parse config files with end-of-line backslash to split long strings into several lines.
New class mrpt::poses::FrameTransformer
mrpt::poses classes now have all their constructors from mrpt::math types marked as explicit, to avoid potential ambiguities and unnoticed conversions.
Sophus is now used internally for some Lie Algebra methods, and also exposed to the user as
#include <mrpt/3rdparty/sophus/so3.hpp>
, etc. as part of mrpt-base
-
[API change]
verbose
is no longer a field of mrpt::bayes::CParticleFilter::TParticleFilterOptions. Use the setVerbosityLevel() method of the CParticleFilter class itself.[API change] mrpt::bayes::CProbabilityParticle (which affects all PF-based classes in MRPT) has been greatly simplified via usage of the new mrpt::utils::copy_ptr<> pointee-copy-semantics smart pointer.
-
New class mrpt::graphs::ScalarFactorGraph, a simple but extensible linear GMRF solver. Refactored from mrpt::maps::CGasConcentrationGridMap2D, etc.
-
mrpt::gui::CWxGLCanvasBase is now derived from mrpt::opengl::CTextMessageCapable so they can draw text labels
New class mrpt::gui::CDisplayWindow3DLocker for exception-safe 3D scene lock in 3D windows.
-
Using rplidar newest SDK 1.5.6 instead of 1.4.3, which support rplidar A1 and rplidar A2
mrpt::hwdrivers::CNTRIPEmitter can now also dump raw NTRIP data to a file
-
New classes for 2D robot simulation:
New classes for 2D robot kinematic motion commands. See children of mrpt::kinematics::CVehicleVelCmd
-
mrpt::maps::COccupancyGridMap2D::loadFromBitmapFile() correct description of
yCentralPixel
parameter.mrpt::maps::CPointsMap
liblas
import/export methods are now in a separate header. See libLAS interface for CPointsMap (in and dep-liblasNew class mrpt::maps::CRandomFieldGridMap3D
New class mrpt::maps::CPointCloudFilterByDistance
-
[ABI change] mrpt::obs::CObservation2DRangeScan
range scan vectors are now protected for safety.
New getter/setter methods.
backwards-compatible proxies added for read-only from range scan members.
[ABI change] mrpt::obs::CObservation3DRangeScan :
Now uses more SSE2 optimized code
Depth filters are now available for mrpt::obs::CObservation3DRangeScan::unprojectInto() and mrpt::obs::CObservation3DRangeScan::convertTo2DScan()
New switch mrpt::obs::CObservation3DRangeScan::EXTERNALS_AS_TEXT for runtime selection of externals format.
mrpt::obs::CObservation2DRangeScan now has an optional field for intensity.
mrpt::obs::CRawLog can now holds objects of arbitrary type, not only actions/observations. This may be useful for richer logs aimed at debugging.
mrpt::obs::CObservationVelodyneScan::generatePointCloud() can now generate the microseconds-precise timestamp for each individual point (new param
generatePerPointTimestamp
).
-
[ABI change] mrpt::opengl::CAxis now has many new options exposed to configure its look.
mrpt::opengl::CSetOfLines can now optionally show vertices as dots.
lib3DS is no longer shipped as an embedded version. A system library in Linux is required to use mrpt::opengl::C3DSScene. Use mrpt::opengl::CAssimpModel as a more powerful alternative.
-
[API change] mrpt::slam::CMetricMapBuilder::TOptions does not have a
verbose
field anymore. It’s supersedded now by the verbosity level of the CMetricMapBuilder class itself.[API change] getCurrentMetricMapEstimation() renamed mrpt::slam::CMultiMetricMapPDF::getAveragedMetricMapEstimation() to avoid confusions.
-
mrpt::hwdrivers::CGenericSensor : external image format is now
png
by default instead ofjpg
to avoid losses.[ABI change] mrpt::hwdrivers::COpenNI2Generic :
refactored to expose more methods and allow changing parameters via its constructor.
Now supports reading from an IR, RGB and Depth channels independenty.
mrpt::hwdrivers::CHokuyoURG now can optionally return intensity values.
Deleted old, unused classes:
mrpt::hwdrivers::CBoardIR
mrpt::hwdrivers::CBoardDLMS
mrpt::hwdrivers::CPtuHokuyo
mrpt::hwdrivers::CHokuyoURG no longer as a “verbose” field. It’s superseded now by the COutputLogger interface.
mrpt::hwdrivers::CActivMediaRobotBase and the embedded ARIA library have been removed. Nowadays, one can access to ARIA robots via ROS packages more easily than via MRPT.
-
mrpt::maps::CMultiMetricMapPDF added method CMultiMetricMapPDF::prediction_and_update_pfAuxiliaryPFStandard().
-
New mrpt::nav::CWaypointsNavigator interface for waypoint list-based navigation.
[ABI & API change] PTG classes refactored (see new virtual base class mrpt::nav::CParameterizedTrajectoryGenerator and its derived classes):
Old classes
CPTGd
have been renamed to describe each path type. Old PTGs #6 and #7 have been removed for lack of practical use.New separate classes for PTGs based on numerically-integrated paths and on closed-form formulations.
Old deprecated method of PTGs
lambdaFunction()
removed.Parameters are no longer passed via a mrpt::system::TParameters class, but via a mrpt::config::CConfigFileBase which makes parameter passing to PTGs much more maintainable and consistent.
PTGs now have a score_priority field to manually set hints about preferences for path planning.
PTGs are now mrpt::config::CLoadableOptions classes
New classes:
-
Extend mrpt-graphslam lib to execute simulated/real-time graphSLAM. mrpt-graphslam supports 2D/3D execution of graphSLAM, utilizing LaserScans, odometry information.
Develop application
graphslam-engine
that executes graphSLAM via the mrpt-graphslam libmrpt::grpahslam::CGraphSlamEngine as the generic object that manages graphSLAM, Node/Edge registration decider classes under the mrpt::graphslam::deciders namesapce, optimizer wrapper classes under mrpt::graphslam::optimizers
Changes in build system:
[Windows only]
DLL
s/LIB
s now have the signaturelib-${name}${2-digits-version}${compiler-name}_{x32|x64}.{dll/lib}
, allowing several MRPT versions to coexist in the system PATH.[Visual Studio only] There are no longer
pragma comment(lib...)
in any MRPT header, so it is the user responsibility to correctly tell user projects to link against MRPT libraries. Normally, this is done with the standard commandTARGET_LINK_LIBRARIES(MYTARGET ${MRPT_LIBS})
.Debian package: depends on libopenni-dev
Optional dependency
liblas
: minimum required version is now 1.6.0 (Ubuntu Trusty or above).Update of embedded copy of nanoflann to version 1.2.0.
New script for automated dumping stack traces on unit tests failures (
tests/run_all_tests_gdb.sh
)Fix build against wxWidgets 3.1.*
Embedded version of gtest upgraded to 1.8.0
BUG FIXES:
Fix inconsistent state after calling mrpt::obs::CObservation3DRangeScan::swap()
Fix SEGFAULT in mrpt::obs::CObservation3DRangeScan if trying to build a pointcloud in an external container (mrpt::opengl, mrpt::maps)
Fix mrpt::hwdrivers::CHokuyoURG can return invalid ray returns as valid ranges.
Fix PTG look-up-tables will always fail to load from cache files and will re-generate (Closes GitHub #243)
Fix mrpt::maps::COccupancyGridMap2D::simulateScanRay() fails to mark out-of-range ranges as “invalid”.
Fix mrpt::io::CMemoryStream::Clear() after assigning read-only memory blocks.
Fix point into polygon checking not working for concave polygons. Now, mrpt::math::TPolygon2D::contains() uses the winding number test which works for any geometry.
Fix inconsistent internal state after externalizing mrpt::obs::CObservation3DRangeScan
Fix a long outstanding bug regarding losing of keystroke events in CDisplayWindow3D windows (Closes #13 again)
Fix wrong units for negative numbers in mrpt::system::unitsFormat()
Fix potential thread-unsafe conditions while inserting a mrpt::obs::CObservation2DRangeScan into a pointmap with SSE2 optimizations enabled.
CStream: Fix memory leak if an exception (e.g. EOF) is found during object deserialization.
Fix a bug in the
onlyUniqueRobust
option for point cloud matching (affecting CICP, etc.). Thanks Shuo!
Version 1.4.0: Released 22-APR-2016
Most important changes:
Support for Velodyne LIDAR sensors.
New minor version number due to changes in the API of these classes (read details below): mrpt::obs::CObservationGPS, mrpt::hwdrivers::CGPSInterface
Python bindings added for a subset of MRPT functionality (Thanks Peter Rudolph and Nikolaus Demmel!)
Detailed list of changes:
New apps:
gps2rawlog : Application to parse raw dumps of a GPS (GNSS) receiver output.
image2gridmap : Small tool to import any image as an MRPT gridmap object file (
*.gridmap
).velodyne-view : Application to test, visualize and grab data from a live Velodyne sensor or from a PCAP record.
Changes in apps:
rawlog-grabber : Now does not show GPS and IMU debug data in console, unless
MRPT_HWDRIVERS_VERBOSE
environment variable is set.rawlog-edit : New operation:
--export-gps-all
Changes in libraries:
mrpt_base_grp
[ABI change] mrpt::system::tokenize() new parameter
skipBlankTokens
mrpt::utils::circular_buffer now has peek() methods
Eigen::MatrixBase<Derived>::loadFromTextFile() now also accepts
,
as column separator.New functions:
mrpt::containers::CDynamicGrid<> now uses
double
instead offloat
for all dimensions and coordinate computations.Priority with these functions now work properly in GNU/Linux; though, see the notes in their documentation for required permissions:
mrpt::system::changeThreadPriority()
New classes/structures:
-
New class mrpt::hwdrivers::CVelodyneScanner
mrpt::hwdrivers::CNTRIPEmitter now has a parameter to enable/disable sending back the data from the serial port to the NTRIP caster.
[API changed] mrpt::hwdrivers::CGPSInterface API clean-up and made more generic so any stream can be used to parse GNSS messages, not only serial ports.
New class mrpt::hwdrivers::CStereoGrabber_Bumblebee_libdc1394 for capturing without PGR Flycapture but directly through libdc1394.
Removed class mrpt::hwdrivers::CStereoGrabber_Bumblebee , superseded by mrpt::hwdrivers::CImageGrabber_FlyCapture2 which is capable of both monocular and stereo grabbing.
-
New class mrpt::maps::CHeightGridMap2D_MRF
New base class mrpt::maps::CHeightGridMap2D_Base
mrpt::maps::COccupancyGridMap2D :
New method mrpt::maps::COccupancyGridMap2D::copyMapContentFrom()
New likelihood parameter
LF_useSquareDist
New parameter mrpt::maps::COccupancyGridMap2D::RAYTRACE_STEP_SIZE_IN_CELL_UNITS
mrpt::maps::COccupancyGridMap2D::simulateScanRay() is now ~40% (GCC) to ~250% (MSVC) faster by default.
New method mrpt::maps::COccupancyGridMap2D::laserScanSimulatorWithUncertainty()
New method mrpt::maps::CHeightGridMap2D::insertIndividualPoint()
mrpt::maps::CMetricMap::compute3DMatchingRatio() has a simplified API now
-
New class mrpt::obs::CObservationVelodyneScan
mrpt::obs::CSinCosLookUpTableFor2DScans now can build a table from a mrpt::obs::T2DScanProperties structure, which now also has its separate header file for better modularity.
[API changed] mrpt::obs::CObservationGPS now stores only one message per objects. API clean-up and extended so the number of GNSS message types is larger and more scalable.
mrpt::obs::gnss : A new namespace with many new data structures for GPS-related messages
mrpt::obs::CObservation3DRangeScan : projection of RGBD images to 3D points now correctly filters out invalid points, which were in previous versions mapped as (0,0,0) points (relative to the sensor). In turn, this leads to point clouds of a dynamic number of points. In case of needing the (u,v) pixel coordinates of projected points, checkout the new fields
points3D_idxs_x
&points3D_idxs_y
.
-
New class mrpt::opengl::CMesh3D to render 3D models/meshes
New method mrpt::opengl::CPointCloudColoured::recolorizeByCoordinate()
-
Small clean up of mrpt::slam::CICP API, add separate variable to select covariance estimation method.
-
New function mrpt::topography::geocentricToENU_WGS84()
-
Removed the old GPL-licensed Hess SIFT implementation.
mrpt::vision::CDifOdo has been refactored and now does faster image pyramid computation (By Mariano Jaimez)
mrpt::maps::CLandmarksMap changes:
beaconMaxRange
&alphaRatio
parameters have been removed since they were not used.New likelihood parameter
beaconRangesUseObservationStd
to allow using different uncertainty values with each observation.
Changes in build system:
Python bindings added for a subset of MRPT functionality (Thanks Peter Rudolph!)
Code ported to support the new libftdi1-dev (Fixes Debian bug #810368, GitHub issue #176)
Fix building with gcc 6.0 (Closes Debian bug #811812)
CMake new option:
DISABLE_MRPT_AUTO_CLASS_REGISTRATION
to reduce the footprint of MRPT statically-linked programs.Fix building against wxWidgets 3.1
BUG FIXES:
mrpt::math::CQuaternion<> did not check for unit norm in Release builds.
Fix build errors against OpenCV 3.0.0+ without opencv_contrib modules.
mrpt::hwdrivers::CHokuyoURG now correctly handles opening both USB and Ethernet Hokuyo devices (Closes Github issue #180)
Fixed mrpt::comms::net::DNS_resolve_async() may SIGSEGV in slow networks.
mrpt::opengl::CMesh::updateColorsMatrix() did not ignore cells masked out.
Wrong weights used in mrpt::poses::CPosePDFSOG::getMean()
Removed ad-hoc bias addition in range-only predictions in landmarks maps.
Error loading height map count in mrpt::maps::TSetOfMetricMapInitializers (Closes GitHub issue #205.
Fix “gray images” grabbed in Windows when capturing the render output of 3D windows (Thanks Mariano J.T. & Christian Kerl from TUM!)
Fix typos and wxWidgets align errors in RawLogViewer GUI (Closes #219)
mrpt::nav::CHolonomicND & mrpt::nav::CHolonomicVFF didn’t use the full range of output velocities.
mrpt::img::CImage::loadFromFile() now does not leave the image in undefined state if the load operation fails.
mrpt::hwdrivers::CLMS100Eth failed to load “pose_yaw” parameter from config file.
mrpt::obs::CObservation3DRangeScan::doDepthAndIntensityCamerasCoincide() did not correctly return
false
for negative offsets between the camera poses.
Version 1.3.2: Released 3-NOV-2015
Changes in Apps:
New operation:
--list-poses
--list-images
now also works with 3D range scans
Changes in libraries:
The library mrpt-srba has been moved out of MRPT and now is an independent project: https://github.com/MRPT/srba
mrpt_base_grp
mrpt::math::KDTreeCapable::TKDTreeSearchParams : Removed parameter nChecks, which was ignored by nanoflann anyway.
-
mrpt::hwdrivers::CCameraSensor : Implemented OpenNI2 support for CCameraSensor
-
mrpt::nav::CAbstractPTGBasedReactive : Maximum acceleration filter (SPEEDFILTER_TAU) now follows paths better (Thanks to Steven Butner, UCSB/ECE)
Changes in build system:
FIND_PACKAGE(MRPT)
will return libraries in the varMRPT_LIBRARIES
, following the CMake convention. The old variable nameMRPT_LIBS
will be also returned for backward compatibility.
BUG FIXES:
Fix excessive width of paths drawn by CMetricMapBuilderRBPF::drawCurrentEstimationToImage()
Fix image distortion: k3 may be ignored. (Thanks to CBaiz)
Fix Debian bugs.
Version 1.3.1: Released 18-JUL-2015
Changes in apps:
navlog-viewer : Now shows more information on navigation logs.
New app icp-slam-live : Real-time ICP-SLAM with a LIDAR sensor.
Changes in libraries:
mrpt_base_grp
New helper templates: mrpt::utils::int_select_by_bytecount<>, mrpt::uint_select_by_bytecount<>
New methods to evaluate SO(2), SO(3), SE(2) and SE(3) averages and weighted averages. See:
Header <
mrpt/poses/SO_SE_average.h
>
-
New sensors supported:
New parameter mrpt::hwdrivers::CHokuyoURG::m_disable_firmware_timestamp to override faulty Hokuyo timestamps with PC time.
mrpt::hwdrivers::CRoboPeakLidar::turnOn() and turnOff() now really implement turning on/off the RPLidar motor.
-
Removed old base class CPathPlanningMethod
CPathPlanningCircularRobot => mrpt::nav::PlannerSimple2D : Class renamed (and better described) for consistency with other planners
mrpt::nav::CReactiveNavigationSystem :
Documentation has been added about all existing parameters, and template config files provided as starting points.
The loadConfigFile() method with 2 config files has been deprecated favoring the newer, simpler single config file.
The “ROBOT_NAME” parameter is no longer employed. A minor side effect (probably affecting no one) is that PTG cache files are no longer named differently for different robots.
mrpt::nav::CParameterizedTrajectoryGenerator : New methods to save and load trajectories to binary streams. Used to debug in navlog-viewer.
-
mrpt::obs::CObservation3DRangeScan now supports pixel labels (semantic mapping, etc.)
New class mrpt::obs::CObservationSkeleton to hold body tracking information (by Francisco Angel Moreno)
mrpt::obs::CObservationIMU has new data fields and fields are better documented to reflect whether they refer to local/global coordinate frames
-
mrpt::vision::CImageGrabber_dc1394: Changed default Bayer filter from NEAREST to HQLINEAR
BUG FIXES:
Fix ocasional (false) failure of RANSAC unit tests due to their non-deterministic nature.
Fix build error with MSVC 2010 in mrpt-hmtslam (Closes #127).
Fixed potential wrong bounding box results in mrpt::maps::CPointsMap::boundingBox() when SSE2 optimization is enabled.
mrpt::obs::CObservation6DFeatures : Fixed random crashes related to non-aligned memory in 32bit builds (Fixes #141)
Fix Debian bug #786349 on Eigen2 support.
mrpt::hwdrivers::CIMUXSens_MT4 : Fix crash in destructor of objects not attached to a physical device.
Fix wrong quaternion cross product when target variable is one of the operands. Also affected the += operator of mrpt::poses::CPose3DQuat (Fixes #148)
mrpt::hwdrivers::CKinect with libfreenect driver: Fix potential memory corruption.
Fix a bug in mrpt::tfest::se3_l2_robust() that led to it returning without trying to find a good consensus solution. It affected the demo app kinect-3d-slam (Fixes #156)
Fix wrong feature points in CFeatureExtraction::extractFeaturesKLT() (Fixes #138)
Version 1.3.0: Released 12-JAN-2015
Most important changes:
Classes in libraries [mrpt-obs] and [mrpt-maps] now belong to new namespaces (mrpt::obs, mrpt::maps) instead of the old mrpt::slam
No more
using namespace
s polute MRPT headers. Errors in user projects missingusing namespace XXX
that might be formerly masked will now reveal. This is a good thing, though admitedly annoying…New library [mrpt-nav], subsumming the old mrpt_reactivenav_grp.
New library [mrpt-tfest], a refactor of the old mrpt_scanmatching_grp.
Backwards compatible headers have been provided to ease the transition of user code for all those library changes. Warning messages will be shown recommending deprecated replacements.
Detailed list of changes:
Lib changes:
Clean up of the bad practice of
using namespace
in public scopes of headers. May lead to user code failing for missingusing namespace
s which were previously masked.Namespace “slam” deprecated in libraries mrpt-obs and mrpt-maps (used for historical reasons):
New namespaces [mrpt-obs] and [mrpt-maps].
#include files moved from old paths <mrpt/slam/…> => <mrpt/{obs,maps}/…>
Backward compatible headers added in <mrpt/slam/…> until mrpt 2.0.0
New library [mrpt-nav], subsumming the old mrpt-reactivenav (mrpt_reactivenav_grp).
mrpt_reactivenav_grp is now a meta-library, depending on [mrpt-nav].
[mrpt-tfest] : Old library mrpt-scanmatching (mrpt_scanmatching_grp) has been refactored, its API clean-up, and renamed [mrpt-tfest]
mrpt_scanmatching_grp is now a meta-library, depending on [mrpt-tfest].
These classes have been moved between libs for a more sensible organization:
mrpt::slam::CDetectorDoorCrossing ==> mrpt::detectors::CDetectorDoorCrossing
mrpt::slam::CPathPlanningMethod & CPathPlanningCircularRobot: [mrpt-slam] ==> [mrpt-nav]
Build System / General changes:
Many optimizations in function arguments (value vs ref). Forces ABI incompatibility with previous versions, hence the change to a new minor version number.
Updated embedded version of Eigen to 3.2.3
Kinect: Dropped support for the CL NUI API, which seems discontinued. Alternatives in use are libfreenect and OpenNI2.
libfreenect is now detected in the system and used instead of compiling the embedded copy of it.
Embedded copy of libfreenect has been updated to (23/oct/2014). It now supports “Kinect for Windows”.
More selective linking of .so files to avoid useless dependencies (Fixes #52).
(Windows only) MRPT can now be safely built with libusb support (Freenect, Kinect,…) and it will run on systems without libusb installed, by means of /DELAYLOAD linking flags.
More unit tests.
Changes in classes:
[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::TMetricMapInitializerIntroduced 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)
Version 1.2.2: Released 12-SEP-2014
Changes in apps:
-
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::img::CImage::loadTGA()
IMPORTANT : Changed behavior of CSerializable/CObject macros (see bugfix below), introducing the new macros DEFINE_SERIALIZABLE_POST_*. May require changes in user code if serializable classes are defined:
Previous version:
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]
[mrpt-opengl]
mrpt::opengl::CWxGLCanvasBase (affects all 3D rendering classes): better handling of internal timers for smoother updates while rendering in multithreading apps.
[mrpt-srba]
New method to recover the global coordinates graph-slam problem for a RBA map: mrpt::srba::RbaEngine::get_global_graphslam_problem() (see example [MRPT]samplessrba-examplessrba-tutorialstutorial-srba-how-to-recover-global-map.cpp)
BUG FIXES:
mrpt::img::CImage constructor from a matrix crashed.
Unit tests: Named semaphores are not tested anymore if it’s detected that the kernel version doesn’t support them (Fix Debian 758725).
mrpt::synch::CSemaphore [Linux]: didn’t call sem_unlink().
mrpt::gui::CDisplayWindow3D didn’t implement get/set FOV.
Valgrind: Fixed potential unaligned memory access warning in point clouds.
Fix build error with AppleClang 5.1 (Closes #71).
mrpt::utils::CClientTCPSocket: Use a connection success check that works on all platforms
Important bug fixed regarding a missing dynamic_cast<> in smart pointers casting. See above possible implications in user code. properly (Patch by Joe Burmeister).
Version 1.2.1: Released 10-JUL-2014
Changes in classes:
[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 (by Kenzaburo Miyawaki & Eduardo Fernandez)
Build system:
Fix compilation of SRBA with DEBUG_GARBAGE_FILL_ALL_NUMS=1
Fix de-serialization error in mrpt::reactivenav::CLogFileRecord (and new unit tests added to avoid regressions).
Several Debian bugs closed (see packaging/debian/changelog), including build errors in uncommon platforms (MIPS, kFreeBSD, etc.)
Version 1.2.0: Released 25-JUN-2014
Most important changes:
Public header files (.h) have undergone a serious refactoring to minimize unnecesary dependencies and reduce compile time and memory as much as possible. As a side effect, user code might need to add new #include<> lines. This change justifies the new minor version series 1.2.X.
MRPT now cleanly builds in clang and OSX.
Support for new camera drivers (OpenNI2, DUO3D).
Many bug fixes.
Detailed list of changes:
Changes in apps:
-
New operations: export-odometry-txt, recalc-odometry
New flag: rectify-centers-coincide
-
New examples:
kitti_dataset2rawlog
New classes:
[mrpt-base]
mrpt::math::ContainerType<CONTAINER>::element_t to allow handling either Eigen or STL containers seamlessly.
[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 (By Francisco Angel Moreno)
mrpt::hwdrivers::CGPS_NTRIP : A combination of GPS receiver + NTRIP receiver capable of submitting GGA frames to enable RTCM 3.0
[mrpt-obs]
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.
mrpt::poses::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::img::CImage::forceLoad() and mrpt::img::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.
<mrpt/utils/stl_extensions.h> has been split into:
<
mrpt/serialization/stl_serialization.h
><
mrpt/containers/circular_buffer.h
><mrpt/utils/list_searchable.h>
<
mrpt/containers/bimap.h
><mrpt/utils/map_as_vector.h>
<
mrpt/containers/traits_map.h
><
mrpt/serialization/stl_serialization.h
><
mrpt/containers/printf_vector.h
><
mrpt/containers/stl_containers_utils.h
><mrpt/utils/ci_less.h>
Deleted methods and functions:
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::maps::CPointsMap::getPoint() with mrpt::poses::CPoint3D arguments.
mrpt::vision::correctDistortion() -> use CImage method instead
All previous deprecated functions.
BUG FIXES:
RawlogViewer app: Fixed abort while converting SF->obs.only datasets when there is no odometry.
mrpt::obs::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::obs::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)
Version 1.1.0: Released 22-FEB-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::maps::COctoMap (only occupancy)
mrpt::maps::CColouredOctoMap (occupancy + RGB color)
[mrpt-obs]
mrpt::obs::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::maps::CMetricMap::computeMatchingWith2D() –> mrpt::maps::CMetricMap::determineMatching2D()
mrpt::maps::CMetricMap::computeMatchingWith3D() –> mrpt::maps::CMetricMap::determineMatching3D()
New structures:
mrpt::slam::TMatchingParams
mrpt::slam::TMatchingExtraResults
mrpt::maps::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::maps::CPointsMap::TInsertionOptions::insertInvalidPoints - (commit)
mrpt::obs::CObservationIMU now includes data fields for 3D magnetometers and altimeters. - (commit)
Method renamed mrpt::utils::CEnhancedMetaFile::selectVectorTextFont() to avoid shadowing mrpt::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 mrpt::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<1,T>()
Fixed build error with GCC when experimental parallelization is enabled. (commit)
mrpt::reactivenav::CReactiveNavigationSystem complained about missing config variables ROBOTMODEL_TAU & ROBOTMODEL_DELAY, which were removed in MRPT 1.0.2 - (commit)
Fixed potential mem alignment errors (Eigen’s UnalignedArrayAssert) in SRBA for 32bit builds. (commit)
mrpt::topography::geodeticToENU_WGS84() and related functions used a local +Z axis aligned to the line towards the Earth center; now the Z axis points normally to the ellipsoid surface. The difference with the previous behavior is small but may be of a few millimeters for each meter from the reference point. (commit)
Potential crash when setting mpPolygon::setPoints() with empty vectors
mrpt::reactivenav::CReactiveNavigationSystem and mrpt::reactivenav::CReactiveNavigationSystem3D didn’t obey the “enableConsoleOutput” constructor flag - (commit)
mrpt::synch::CSemaphore::waitForSignal() : Fixed error when thread got an external signal (commit)
Version 1.0.2: Released 2-AUG-2013 (SVN 3435)
New apps:
ReactiveNav3D-Demo (By Mariano Jaimez Tarifa)
Changes in apps:
-
New operations: list-timestamps, remap-timestamps, export-2d-scans-txt, export-imu-txt
-
New classes:
[mrpt-base]
mrpt::poses::CPose3DRotVec is now fully implemented (By Francisco Angel Moreno).
[mrpt-opengl]
mrpt::opengl::CLight - OpenGL scenes now allow customization of OpenGL lighting. See also new lighting methods in mrpt::opengl::Viewport
[mrpt-reactivenav]
mrpt::reactivenav::CReactiveNavigationSystem3D - By Mariano Jaimez Tarifa - r3389
New functions:
[mrpt-opengl]
Changes in classes:
[mrpt-base]
[mrpt-maps]
mrpt::maps::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
Version 1.0.1: Released 12-MAY-2013 (SVN 3370)
Changes in apps:
-
Better description of the “too much memory used” warning while loading large datasets.
-
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]
New functions:
New examples:
gmrf_map_demo
Changes in classes:
[mrpt-maps]
mrpt::maps::COccupancyGridMap2D now also evalutes likelihoods for sonar-like observations (mrpt::obs::CObservationRange), allowing particle-filter localization with these sensors - r3330
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:
BUG FIXES:
Version 1.0.0: Released 1-MAR-2013 (SVN 3287)
Most important changes:
New library with a flexible implementation of Sparser Relative Bundle Adjustment (RBA), as presented in ICRA 2013: mrpt-srba.
New library for Plane-based Maps: mrpt-pbmap (also presented in ICRA 2013).
Some MRPT modules are now header-only libraries.
Support for a new Octomap metric map, via the octomap library. See mrpt::maps::COctoMap and detailed changes below.
Support for importing/exporting point clouds in the standard LAS format (Look for liblas below).
Better support for custom builds of MRPT (selective building of individual apps and libs, etc.)
Ready for Visual Studio 2012 and GCC 4.7
From now on, MRPT is released under the “New BSD” license.
Many bug fixes.
Detailed list of changes:
New apps:
srba-slam : A command-line frontend for the Relative Bundle Adjustment engine in mrpt-srba.
robotic-arm-kinematics : A GUI for experimenting with Denavit-Hartenberg parameters.
Changes in apps:
-
Fixed some minor visualization errors.
-
The default holonomic navigation method is now the VFF, since after the last bug fixes and tunes it seems to work quite well.
grid-matching : new argument “–aligner” to select aligner method - r3021
-
New classes:
[mrpt-base]
mrpt::math::MatrixBlockSparseCols, a templated column-indexed efficient storage of block-sparse Jacobian or Hessian matrices, together with other arbitrary information - r2995
mrpt::utils::ignored_copy_ptr<>
[mrpt-obs]
[mrpt-maps]
[mrpt-opengl]
Deleted classes:
[mrpt-vision]
CFeatureTracker_FAST and CFeatureTracker_PatchMatch have been removed since they didn’t work robustly. Replace with mrpt::vision::CFeatureTracker_KL
New libraries:
[mrpt-kinematics] See mrpt::kinematics
[mrpt-pbmap] See mrpt-pbmap.
[mrpt-srba] See mrpt-srba.
Changes in libraries:
These libs are now header-only: r3035, r3045
[mrpt-bayes]
[mrpt-graphs]
[mrpt-graphslam]
Integration of the Octomap C++ library (new BSD License) by Kai M. Wurm et al.: r3081, r3083, r3084, r3086, r3087, r3088, r3093
The main new classes are mrpt::maps::COctoMap & mrpt::opengl::COctoMapVoxels
mrpt::maps::CMultiMetricMap now allows the seamless integration of octomaps in many MRPT map building or localization algorithms.
New example: samples/octomap_simple
Changes in classes:
[mrpt-base]
Eigen::MatrixBase<Derived>::loadFromTextFile(), and all MRPT derived matrix classes, are now much faster loading huge matrices from text files - r2997
The typedef Eigen::MatrixBase<Derived>::typename of MRPT’s plugin to Eigen classes has been REMOVED, to avoid conflicts with some part of Eigen’s sparse classes. Use Matrix::Scalar instead - r3065
New method mrpt::poses::CPose3DQuat::inverse()
New methods mrpt::poses::SE_traits::pseudo_exp()
-
New method mrpt::system::CTimeLogger::getStats() for programatic execution time stats analysis - r2998
New method mrpt::system::CTimeLogger::registerUserMeasure() for making stats of user-providen values - r3005
mrpt::utils::map_as_vector<> can be now customized to use different underlying STL containers for storage - r3001
mrpt::containers::CDynamicGrid::setSize() now also accepts a “fill_value” argument.
Added method mrpt::math::TPoint2D::norm() for consistency with mrpt::math::TPoint3D
Better support for saving (and not only loading) plain text configuration files, including commented files with default values of all existing parameters: - r2954
All mrpt::config::CConfigFileBase::write() now have an extended signature for formatting.
mrpt::config::CLoadableOptions::dumpToTextStreamstd::ostream::Seek() now supports files larger than 2GB by using uint64_t instead of long (still see issue report for another patch required for MSVC2010) - (Closes issue 39, thanks Robert Schattschneider) - r3042
mrpt::typemeta::TTypeName<> moved to its own header <
mrpt/typemeta/TTypeName.h
> while refactoring <mrpt/serialization/CSerializable.h
>
mrpt::config::CConfigFileBase::write() now has signatures for “uint32_t” and “uint64_t” in both 32 and 64bit builds, instead of relying of the “size_t” type. This was done to fix build errors in some GCC versions under 32bits.
mrpt::poses::CPose2D now caches the cos() and sin() of phi, with a huge performance improvement in most common operations.
[mrpt-bayes]
mrpt::bayes::CKalmanFilterCapable (and all EKF-SLAM methods based on it) are now much faster. The implementation now exploits the sparsity of the Jacobian (~25% faster in a test 6D EKF-SLAM dataset) - r3059, r3060, r3061
mrpt::bayes::CParticleFilterCapable now makes use of the Curiously Recurring Template Pattern (CRTP) design instead of ugly #define macros - r3182
[mrpt-graphs]
mrpt::graphs::CNetworkOfPoses2D, mrpt::graphs::CNetworkOfPoses3D,… and so on, are now all typedef’s instead of classes, since serialization is now implemented as pure templatized code, thus avoiding the need to declare derived auxiliary classes - r3044
[mrpt-gui]
mrpt::gui::CDisplayWindow3D::addTextMessage() (and other opengl text routines) now allows drawing text with a shadow effect - r3007
[mrpt-hwdrivers]
New method mrpt::hwdrivers::CActivMediaRobotBase::areMotorsEnabled()
mrpt::hwdrivers::CGenericSensor (and all derived classes) now allocate objects aligned in memory with
New static method mrpt::hwdrivers::CGPSInterface::parse_NMEA()
[mrpt-maps]
Better integration of point cloud classes with PCL: - r2943
mrpt::maps::CPointsMap::loadPCDFile()
Point cloud loading & saving in the standard ASPRS LiDAR LAS format (if liblas is installed in the system, see http://www.liblas.org/). See also the ready-to-use import menu in SceneViewer3D - r3244
Integration of wind measurements in gas-concentration maps (by Javier G. Monroy) - r3050
[mrpt-obs]
New method mrpt::obs::CObservationGPS::clear()
[mrpt-opengl]
Evaluation of bounding box of opengl objects. New methods: - r3026
mrpt::opengl::COctreePointRenderer::octree_get_graphics_boundingboxes() has a new flag to draw solid boxes at each leaf node - r3033
mrpt::opengl::Viewport has a new set of “global OpenGL switches” that affect the rendering of entire scenes - r3185
Classes drawing lines now by default enable anti-aliasing (can be disabled by the programmer): - r3185
[mrpt-reactivenav]
Much code of mrpt::reactivenav classes have undergone a clean-up, slight optimizations and a translation of old Spanish names/comments to English - r2939, r2942, r2958, r3091
mrpt::reactivenav::CParameterizedTrajectoryGenerator::CCollisionGrid now has a more maintainable binary serialization format - r2939
mrpt::reactivenav::CParameterizedTrajectoryGenerator::debugDumpInFiles() now also saves text files which can be used to visualize PTGs from MATLAB (see scripts/viewPTG.m) - r3009
mrpt::reactivenav::CHolonomicVFF and mrpt::reactivenav::CHolonomicND now have more configurable parameters, loadable from config files. See their documentation.
Repulsive forces from obstacles in mrpt::reactivenav::CHolonomicVFF are now automatically normalized wrt the density of the 360deg view of obstacles and forces follow a “1/range” law instead of the old “exp(-range)”.
Solved a stability issue in C-S paths, in mrpt::reactivenav::CPTG_DiffDrive_CS (By Mariano Jaimez Tarifa) - r3085
[mrpt-scanmatching]
mrpt::scanmatching::robustRigidTransformation():
Changed behavior not to allow features to appear in duplicated pairings.
Added a consistency test to avoid seeding RANSAC with an inconsistent initial model.
[mrpt-slam]
mrpt::slam::CMetricMapBuilderICP now does not integrate the small pose changes due to odometry and/or relocalization when considering the distance and angle thresholds. This means that fewer map updates are now done for the same ICP-SLAM parameters, which should lead to “less noisy” maps.
New functions:
[mrpt-base]
mrpt::math::noncentralChi2PDF_CDF() is now exposed (was private)
mrpt::poses::operator -(mrpt::poses::CPose3DQuat)
max3() and min3() moved from the global namespace to mrpt::utils::max3() and mrpt::utils::min3()
New examples:
octomap_simple
ransac-data-association
Build system:
Update to Eigen 3.1.2 - r3064
MRPT’s root “CMakeLists.txt” has undergone a big refactoring and cleanup - r2961
Backward compatible “mrpt-core” has been removed as a fake lib for which to search with CMake from user programs - r2961
More system libs are detected in Linux (libclang-dev, lib3ds-dev), discarding embedded versions then - r2963 - Closes #17
Automatic detection of supported SIMD extensions (SSE*) from CMake (only for Linux OS) - r3013
Fixed building with Visual Studio 2012 (MSVC11) - r3017
MRPT now allows defining header-only libraries with the define_mrpt_lib_header_only() macro - r3034, r3035
More unit tests:
for all probability distribution functions in mrpt::math,
for the parser in mrpt::hwdrivers::CGPSInterface::parse_NMEA()
for the octomap map
for serialization/deserealization of many classes.
Added new documentation page: environment variables.
Removed the build flag “MRPT_BACKCOMPATIB_08X”.
Fixes for building under Mac OSX: r3181
Enable some c++11 features if the compiler supports them - r3273
BUG FIXES:
Build: Fixed detection of OpenCV 2.4.2+ installed in the system via CMake config file instead of pkg-config, which seems to be broken. - r3019
[mrpt-base] The iterator returned by end() in all MRPT vectors and matrices (based on Eigen) pointed to the last element, not to the (now correct) next position after the last element - r2941
[mrpt-base] mrpt::dynamicsize_vector::resize() performed a memory reallocation even if given the current size, due to an inherited behavior from Eigen. It is not the expected behavior, so it has been fixed. - r3003
[mrpt-base] Wrong computation of normPDF() values for the multidimensional cases. Closes #46 - r3068
[mrpt-base] mrpt::poses::CPoint::asString() confused the 2D and 3D cases (Thanks Cipri!)
[mrpt-base] Fixed errors in de-serialization of mrpt::utils::CPointPDFSOG and mrpt::maps::CReflectivityGridMap2D
[mrpt-base] mrpt::math::KDTreeCapable::kdTreeRadiusSearch2D() always returned 0 matched.
[mrpt-graphs] Fixed bug in RecursiveSpectralPartition (Thanks to Edu!) - r3026
[mrpt-hwdrivers] Fixed potential SEGFAULT in mrpt::hwdrivers::CGPSInterface (Thanks K.Miyawaki for reporting)
[mrpt-hwdrivers] Fixed communications to LMS 1xx scanners (Thanks Henry! See http://code.google.com/p/mrpt/issues/detail?id=49)
[mrpt-maps] mrpt::maps::COccupancyGridMap2D::getAs3DObject() returned cells with an occupancy of exactly “0” as transparent - r2957
[mrpt-maps] Fixed saving the correct point colors in mrpt::maps::CColouredPointsMap::savePCDFile() (Thanks Mariano!) - r3090
[mrpt-maps] In CPointsMap::computeMatchingWith3D. Fixed matching two 3D point clouds as each correspondence was inserted twice into the output vector. (By Paco) - r3162
[mrpt-opengl] Fixed a potential bug: after deserializing an object based on a display-list (most of them), it won’t update in the opengl view.
[mrpt-reactivenav] Class mrpt::reactivenav::CHolonomicVFF was not exported in Windows DLL’s (Thanks Mariano for noticing!).
[mrpt-reactivenav] Fixed wrong computation of obstacles force fields in mrpt::reactivenav::CHolonomicVFF (Thanks Mariano for noticing!) - r2953
[mrpt-reactivenav] Precomputed collision grids could be loaded in mrpt::reactivenav::CParameterizedTrajectoryGenerator even for different robot parameters/shape: now it correctly detects such situations and recompute when needed - r2939
Closes #33
[mrpt-reactivenav] ND algorithm: Fixed bugs of “last gap is never evaluated” and wrong composition of representative direction for some gaps (By Mariano) - r3056
Version 0.9.6 - (Version 1.0.0-Release_Candidate_4): Released 30-MAY-2012 (SVN 2930)
New applications:
kinect-stereo-calibrate : A GUI tool for calibrating RGB+D and/or stereo cameras, including live Kinect capturing.
Removed applications:
stereo-calib-gui: it’s now superseded by kinect-stereo-gui. The old command line tool is still useful, so it’s still there as the example “stereo-calib-opencv”.
Changes in applications:
icp-slam :
Added a new option (SHOW_LASER_SCANS_3D in config files) to draw laser scans in the live 3D view - r2881
-
Operation “–camera-params” now also handles stereo observations.
New operation “–stereo-rectify” for batch rectifying datasets with stereo images.
New operation “–rename-externals”.
stereo-calib-gui: Now generates a report with detailed and clear results from stereo calibration and allows the user to change most parameters interactively - r2801
kinect-3d-view : New key command: press ‘9’ to grab selected snapshots to disk - r2890
Kinect stuff:
[mrpt-hwdrivers]
mrpt::hwdrivers::CKinect now decodes Bayer color using OpenCV instead of default freenect - r2721, r2762
mrpt::hwdrivers::CKinect no longer forces a horizontal tilt at start up by default, what may be annoying (if required, set “initial_tilt_angle”) - r2722
mrpt::hwdrivers::CKinect now loads Kinect calibration files in a format compatible with stereo cameras. See http://www.mrpt.org/Kinect_calibration
[mrpt-obs]
New method mrpt::obs::CObservation3DRangeScan::convertTo2DScan() allows simulating a “fake 2D laser scanner” from a Kinect. See the example: http://www.mrpt.org/Example_Kinect_To_2D_laser_scan
[mrpt-vision]
New function mrpt::vision::checkerBoardStereoCalibration() to calibrate stereo and RGB+D cameras. See also the program kinect-stereo-calibrate :
New classes:
[mrpt-gui]
New event generated by GUI windows: mrpt::gui::mrptEventWindowClosed
[mrpt-hwdrivers]
mrpt::hwdrivers::CRaePID : A new interface to PID gas sensing devices (by Emil Khatib, University of Malaga) - r2841
[mrpt-opengl]
New classes for representing confidence intervals (ellipsoids) in transformed spaces - r2783
mrpt::opengl::CGeneralizedEllipsoidTemplate<>
mrpt::opengl::CFrustum to easily render these geometric figures
New struct mrpt::opengl::TFontParams result of a code refactoring
[mrpt-vision]
mrpt::vision::TSIFTDescriptorsKDTreeIndex, TSURFDescriptorsKDTreeIndex - 2799
mrpt::vision::CStereoRectifyMap - See tutorial online: http://www.mrpt.org/Rectifying_stereo_