17 - rawlog-edit, rawlog-grabber: Now allows loading external "plugin" modules (.so) with user-defined types.
18 - RawLogViewer, navlog-viewer, ptg-configurator allows more than one "plugin" modules to be loaded.
19- Changes in libraries:
20 - \ref mrpt_math_grp
21 - New semantically-rich named static methods:
22 - mrpt::math::TLine3D::FromPointAndDirector()
23 - mrpt::math::TLine3D::FromTwoPoints()
24 - mrpt::math::TLine2D::FromCoefficientsABC()
25 - mrpt::math::TLine2D::FromTwoPoints()
26 - \ref mrpt_obs_grp
27 - CObservation3DRangeScan::points3D_convertToExternalStorage() stores point clouds with points as rows (vs as columns as it did before).
28 - \ref mrpt_opengl_grp
29 - Emit warnings to std::cerr whenever opengl memory is leaked due to OpenGL buffers being created and destroyed in different threads.
30 - Overlaid text messages are now also (de)serialized in mrpt::opengl::COpenGLViewport, and hence in 3D scenes in general.
31 - All opengl shader base classes now expose their internal buffers as const ref. See children of mrpt::opengl::CRenderizable
32 - \ref mrpt_system_grp
33 - New class: mrpt::system::CControlledRateTimer (+ associated example)
34 - New functions: mrpt::system::loadPluginModule(), mrpt::system::loadPluginModules()
35 - mrpt::system::CRateTimer: enforce use of high-resolution monothonic clock.
36 - mrpt::system::CTicTac: enforce use of nanosecond monothonic clock.
37 - Misplaced functions moved to their proper namespace: mrpt::io::vectorToTextFile()
38 - New functions: mrpt::system::thread_name() to get and set thread names for debuggers.
39 - mrpt::system::setConsoleColor(): Do not change color if stdout/stderr are not real terminals.
40 - \ref mrpt_nav_grp
41 - mrpt::nav::PlannerSimple2D does not throw an exception if goal/source is out of map bounds.
42- BUG FIXES:
43 - mrpt::obs::CObservation3DRangeScan would try to (incorrectly) "autofix" camera resolution if loading an externally-stored observation.
44 - mrpt::maps::CPointsMap::determineMatching2D(): avoid potential multi-thread problems with a vector::swap()
45 - Fix build against opencv <3.4.4
46 - Fix potential pointer to local returned in CParticleFilterData
47 - Fix: mrpt::maps::CPointsMapXYZI::setFromPCLPointCloudXYZI() was using a non-existing method.
48 - Fix: mrpt::nav::PlannerSimple2D did not honored maximum path length correctly.
49 - Fix race condition in CGenericCamera_AVI unit test.
50
51------
52# Version 2.0.3: Released May 13, 2020
53- Changes in applications:
54 - navlog-viewer: Can now navigate with keyboard arrows too.
55 - RawLogViewer: better 3D pointcloud coloring in observation view and in "scan animation" view.
56- Changes in libraries:
57 - \ref mrpt_maps_grp
58 - Point cloud classes mrpt::maps::CPointsMap: New methods:
59 - load2D_from_text_stream()
60 - load3D_from_text_stream()
61 - save2D_to_text_stream()
62 - save3D_to_text_stream()
63 - \ref mrpt_poses_grp
64 - More accurate analytical Jacobians for CPose3DQuatPDFGaussian::inverse() (Closes #1053)
65 - BUG FIXES:
66 - Incorrect number of points loaded when trying to load point clouds from incorrectly-formatted text files.
67 - Fix build error in riscv64 (gcc doesn't know mtune=native for that arch)
68 - Fix spurious unit test failures in mrpt::apps::RawlogGrabberApp due to system load.
69
70------
71# Version 2.0.2: Released May 4th, 2020
72- Changes in applications:
73 - navlog-viewer: Ported to the new nanogui UI system (fixes random OpenGL context errors in former version).
74- Changes in libraries:
75 - mrpt_containers_grp
76 - mrpt::containers::vector_with_small_size_optimization: Get rid of potential uninitialized usage GCC warnings.
77 - mrtp_hwdrivers_grp
78 - Remove support for obsolete XSens MTi 3rd generation devices. Removed class mrpt::hwdrivers::CIMUXSens. 4th+ generation still supported.
79 - mrpt_gui_grp
80 - Fix mouse-motion rotation glitches if clicking inside a nanogui control.
81 - Fix cmake errors building user programs in Windows (missing glfw dependency).
82 - mrpt_math_grp
83 - mrpt::math::RANSAC_Template made more generic to support custom dataset and model types.
84 - mrpt_opengl_grp
85 - Fix displaying of uninitialized textured in mrpt::opengl::CTexturedPlane. It now uses the default solid color of the object.
86 - mrpt_ros1bridge_grp
87 - Narrower build and run time dependencies: rosbag -> rosbag_storage
88
89------
90# Version 2.0.1: Released April 3rd, 2020
91- Changes in applications:
92 - RawLogViewer: new "-l xxx.so" flag to load datasets with types defined in external projects.
93- Changes in libraries:
94 - mrpt_obs_grp
95 - mrpt::obs::CObservationRobotPose: Fixed missing serialization of sensorPose
96
97------
98# Version 2.0.0: Released March 29th, 2020
99- **Most important changes:**
100 - 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
101 - Support for old namespaces `mrpt-scanmatching`, `mrpt-reactivenav` is over.
102 - 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).
103 - All pointer typedefs are now in their respective classes: FooPtr -> Foo::Ptr
104 - Add support for serialization with std::variant
105 - PbMap has been factored out into [its own repository](https://github.com/MRPT/pbmap)
106 - XML-based database C++ classes have been removed from MRPT.
107- Changes in applications:
108 - RawLogViewer:
109 - The ICP module now supports Velodyne 3D scans.
110 - rawlog-edit:
111 - New operation: `--de-externalize`
112 - pf-localization:
113 - Odometry is now used also for observation-only rawlogs.
114- Changes in libraries:
115 - All `otherlibs` subdirectories have been renamed to `3rdparty` since it is a widespread name used in most projects.
116 - \ref mrpt_base_grp => Refactored into several smaller libraries, one per namespace.
117 - Removed class std::vector<std::string>. Replace by STL containers of `std::string` and functions mrpt::system::stringListAsString() in \ref string_manage.
118 - \ref mrpt_core_grp [NEW IN MRPT 2.0.0]
119 - 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.
120 - mrpt::cpu::supports(): a new cross-OS CPU feature detection function.
121 - mrpt::Clock allows users to select between Realtime or Monotonic sources.
122 - Removed custom macro MRPT_UNUSED_PARAM (replaced by c++17 attribute).
123 - Add syntactic suggar mrpt::lockHelper()
124 - \ref mrpt_math_grp [NEW IN MRPT 2.0.0]
125 - Removed functions (replaced by C++11/14 standard library):
128 - Removed the include file: `<mrpt/math/jacobians.h>`. Replace by `<mrpt/math/num_jacobian.h>` or individual methods in \ref mrpt_poses_grp classes.
129 - \ref mrpt_config_grp [NEW IN MRPT 2.0.0]
130 - mrpt::config::CConfigFileBase::write() now supports enum types.
131 - \ref mrpt_gui_grp
132 - New class mrpt::gui::CDisplayWindowGUI exposing powerful GUI possibilities via the nanogui project.
133 - \ref mrpt_img_grp [NEW IN MRPT 2.0.0]
134 - mrpt::img::TCamera distortion parameters now also supports the extra K4,K5,K6 distortion parameters.
135 - \ref mrpt_serialization_grp [NEW IN MRPT 2.0.0]
136 - New method mrpt::serialization::CArchive::ReadPOD() and macro `MRPT_READ_POD()` for reading unaligned POD variables.-
137 - Add support for `$env{}` syntax to evaluate environment variables.
138 - \ref mrpt_slam_grp
139 - rbpf-slam: Add support for simplemap continuation.
141 - mrpt::slam::CICP API: Simplified and modernized to use only one output parameter, using std::optional.
142 - \ref mrpt_system_grp
143 - 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.
144 - Added: mrpt::system::WorkerThreadsPool
145 - \ref mrpt_rtti_grp [NEW IN MRPT 2.0.0]
146 - 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().
147 - 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.
148 Therefore, manual registration (as already done in registerAllClasses.cpp files) is left as the unique registration system.
149 This fixes warning messages "[mrpt::rtti::registerClass] Warning: Invoked with a nullptr".
152 - 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.
153 - Added methods to load/save mrpt::nav::TWaypointSequence to configuration files.
154 - Waypoints now have a field `speed_ratio` which is directly forwarded to the low-level reactive navigator.
155 - \ref mrpt_comms_grp [NEW IN MRPT 2.0.0]
156 - This new module has been created to hold all serial devices & networking classes, with minimal dependencies.
157 - \ref mrpt_maps_grp
158 - mrpt::maps::CMultiMetricMap has been greatly simplified and now it is actually defined in the mrpt-maps library.
159 - New map type: mrpt::maps::CPointsMapXYZI for pointclouds with an intensity channel.
160 - New observation class: mrpt::obs::CObservationPointCloud
161 - Added optional "channel" attribute to CReflectivityGridMap2D and CObservationReflectivity to support different colors of light.
162 - \ref mrpt_hwdrivers_grp
163 - COpenNI2Generic: is safer in multithreading apps.
164 - CHokuyoURG:
165 - Rewrite driver to be safer and reduce mem allocs.
166 - New parameter `scan_interval` to decimate scans.
167 - VelodyneCalibration: Can now load YAML files, in addition to XML.
168 - New sensor state enum value: mrpt::hwdrivers::CGenericSensor::ssUninitialized
169 - NMEA GPS parser: now also recognizes all existing talker IDs (GP, GN, GA, etc.)
170 - \ref mrpt_opengl_grp
171 - Update Assimp lib version 4.0.1 -> 4.1.0 (when built as ExternalProject)
172 - Rendering engine rewritten to work using OpenGL Core (GLSL 3.3) instead of Legacy fixed functions.
173 - \ref mrpt_obs_grp
174 - 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.
175 - mrpt::obs::T3DPointsProjectionParams and mrpt::obs::CObservation3DRangeScan::unprojectInto now together support organized PCL point clouds.
176 - New method: mrpt::obs::CObservation3DRangeScan::rangeImage_getAsImage()
177 - Support for multiple-return sensors in mrpt::obs::CObservation3DRangeScan.
178 - New NMEA frame class: Message_NMEA_GSA
179 - \ref mrpt_poses_grp [NEW IN MRPT 2.0.0]
180 - Reorganized all Lie Algebra methods into \ref mrpt_poses_lie_grp
181 - Removed CPose3DRotVec, since its conceptual design is identical to Lie tangent space vectors.
182 - \ref mrpt_vision_grp
183 - Removed FASTER methods, and the libCVD 3rd party dependency.
184
185- BUG FIXES:
186 - Fix reactive navigator inconsistent state if navigation API is called from within rnav callbacks.
187 - Fix incorrect evaluation of "ASSERT" formulas in mrpt::nav::CMultiObjectiveMotionOptimizerBase
188 - Fix aborting reading from LMS111 scanner on first error.
189 - Fix == operator on CPose3D: it now uses an epsilon for comparing the rotation matrices.
190 - Fix accessing unaligned POD variables deserializing CObservationGPS (via the new `MRPT_READ_POD()` macro).
191 - Fix segfault in CMetricMap::loadFromSimpleMap() if the provided CMetricMap has empty smart pointers.
192 - Fix crash in CGPSInterface when not setting an external mutex.
193 - Fix potential crashes in RawLogViewer while editing list of observations.
194 - Fix incorrect conversion from quaternion to CPose3D.
195
196<a name="1.5.7">
197<h2>Version 1.5.7: Released 24/APR/2019 </h2></a>
198- <b>Detailed list of changes:</b>
199 - \ref mrpt_base_grp
200 - The following features have been finally ported to C++11. User code now requires, at least, C++11 enabled:
201 - stlplus-based smart pointers replaced by std::shared_ptr. Backwards compatibility API is maintained.
202 - mrpt::system::TThreadHandle now is a wrapper around std::thread.
203 - Atomic counters now based on std::atomic. Custom implementation has been removed.
204 - stlplus source code has been removed.
205 - mrpt::utils::COutputLogger: change log str format from "[name|type|time]" to "[time|type|name]".
206 - \ref mrpt_graphslam_grp
207 - levenberg-Marquardt graphslam modified to use more stable SE(2) Jacobians.
208 - CNetworkOfPoses: read/write format made compatible with G2O EDGE_SE2 types.