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