Release of v2.0.0
Major stable release, deprecating v1.5.x branch.
See also: browsable doxygen-generated changelog
Windows precompiled binaries: https://bintray.com/mrpt/mrpt-win-binaries/MRPT-nightly-builds/win64-develop
(Changes since 1.5.8)
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: \ref porting_mrpt2
- 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
- New operation:
- pf-localization:
- Odometry is now used also for observation-only rawlogs.
- RawLogViewer:
-
Changes in libraries:
- All
otherlibs
subdirectories have been renamed to3rdparty
since it is a widespread name used in most projects. - \ref mrpt_base_grp => Refactored into several smaller libraries, one per namespace.
- Removed class std::vectorstd::string. Replace by STL containers of
std::string
and functions mrpt::system::stringListAsString() in \ref string_manage.
- Removed class std::vectorstd::string. Replace by STL containers of
- \ref mrpt_core_grp [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()
- \ref mrpt_math_grp [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 \ref mrpt_poses_grp classes.
- Removed functions (replaced by C++11/14 standard library):
- \ref mrpt_config_grp [NEW IN MRPT 2.0.0]
- mrpt::config::CConfigFileBase::write() now supports enum types.
- \ref mrpt_gui_grp
- New class mrpt::gui::CDisplayWindowGUI exposing powerful GUI possibilities via the nanogui project.
- \ref mrpt_img_grp [NEW IN MRPT 2.0.0]
- mrpt::img::TCamera distortion parameters now also supports the extra K4,K5,K6 distortion parameters.
- \ref mrpt_serialization_grp [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.
- New method mrpt::serialization::CArchive::ReadPOD() and macro
- \ref mrpt_slam_grp
- 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.
- \ref mrpt_system_grp
- functions to get timestamp as local time were removed, since they don't make sense. All timestamps in MRPT are UTC, and they can be formated as dates in either UTC or local time frames.
- Added: mrpt::system::WorkerThreadsPool
- \ref mrpt_rtti_grp [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".
- \ref mrpt_nav_grp
- 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.
- \ref mrpt_comms_grp [NEW IN MRPT 2.0.0]
- This new module has been created to hold all serial devices & networking classes, with minimal dependencies.
- \ref mrpt_maps_grp
- 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.
- \ref mrpt_hwdrivers_grp
- 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.)
- \ref mrpt_opengl_grp
- 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.
- \ref mrpt_obs_grp
- 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::obs::CObservation2DRangeScan: Deprecated access to scan data via proxy objects
- \ref mrpt_poses_grp [NEW IN MRPT 2.0.0]
- Reorganized all Lie Algebra methods into \ref mrpt_poses_lie_grp
- Removed CPose3DRotVec, since its conceptual design is identical to Lie tangent space vectors.
- \ref mrpt_vision_grp
- Removed FASTER methods, and the libCVD 3rd party dependency.
- All
-
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.