Note: If you are displaying a local version of this page and you have not built the whole HTML documentation, the links above will be broken. Either build the documentation invoking make documentation_html
or browse it on-line.
Version 2.0.0: (Under development)
- Most important changes:
- MRPT now requires C++14 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.
- Using a variant type from the mapbox variant library, and added serialization with variants(To be replaced by std::variant eventually).
- Detailed list of changes:
- Changes in libraries:
- [mrpt-base]
- Removed functions (replaced by C++11/14 standard library):
- mrpt::math::erf, mrpt::math::erfc, std::isfinite, mrpt::math::std::isnan
- [mrpt-nav]
- Removed deprecated mrpt::nav::THolonomicMethod.
Version 1.5.0: Released 10-JUN-2017
- 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.
- RawLogViewer:
- 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]
- 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::utils::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 polynomial_roots
- New functions for signal filtering: see filtering_grp
- New functions for Fresnel integrals: see
- 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::utils::COutputLogger)
- mrpt::math::RANSAC_Template::execute()
- mrpt::math::CLevenbergMarquardtTempl::execute()
- Deleted methods in Eigen-extensions: leftDivideSquare(), rightDivideSquare()
- Removed support for named semaphores in mrpt::synch::CSemaphore
- new method mrpt::utils::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/otherlibs/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::utils::CDynamicGrid3D<>
- New function mrpt::utils::net::http_request()
- New function mrpt::system::now_double()
- New function mrpt::utils::getAllRegisteredClassesChildrenOf()
- Safer CClassRegistry: detect and warn on attempts to duplicated class registration.
- New class mrpt::math::CRuntimeCompiledExpression
- mrpt::utils::CConfigFile and mrpt::utils::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/otherlibs/sophus/so3.hpp>
, etc. as part of mrpt-base
- [mrpt-bayes]
- [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.
- [mrpt-graphs]
- New class mrpt::graphs::ScalarFactorGraph, a simple but extensible linear GMRF solver. Refactored from mrpt::maps::CGasConcentrationGridMap2D, etc.
- [mrpt-gui]
- 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.
- [mrpt-hwdrivers]
- 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
- [mrpt-kinematics]
- New classes for 2D robot simulation:
- mrpt::kinematics::CVehicleSimul_DiffDriven
- mrpt::kinematics::CVehicleSimul_Holo
- New classes for 2D robot kinematic motion commands. See children of mrpt::kinematics::CVehicleVelCmd
- [mrpt-maps]
- mrpt::maps::COccupancyGridMap2D::loadFromBitmapFile() correct description of
yCentralPixel
parameter.
- mrpt::maps::CPointsMap
liblas
import/export methods are now in a separate header. See mrpt_maps_liblas_grp and External dependency: liblas
- New class mrpt::maps::CRandomFieldGridMap3D
- New class mrpt::maps::CPointCloudFilterByDistance
- [mrpt-obs]
- [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::project3DPointsFromDepthImageInto() 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
).
- [mrpt-opengl]
- [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.
- [mrpt-slam]
- [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]
- mrpt::hwdrivers::CGenericSensor: external image format is now
png
by default instead of jpg
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]
- mrpt::maps::CMultiMetricMapPDF added method CMultiMetricMapPDF::prediction_and_update_pfAuxiliaryPFStandard().
- [mrpt-nav]
- 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::utils::TParameters class, but via a mrpt::utils::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::utils::CLoadableOptions classes
- [mrpt-graphslam]
- 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 lib
- New classes:
- mrpt::nav::CMultiObjectiveMotionOptimizerBase
- Changes in build system:
- [Windows only]
DLL
s/LIB
s now have the signature lib-${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 command TARGET_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::utils::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]
- [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::system::timestampAdd()
- mrpt::utils::compute_CRC32()
- mrpt::utils::saturate<>()
- mrpt::utils::CDynamicGrid<> now uses
double
instead of float
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::changeCurrentProcessPriority()
- mrpt::system::changeThreadPriority()
- New classes/structures:
- mrpt::math::TPointXYZIu8, mrpt::math::TPointXYZRGBu8, mrpt::math::TPointXYZfIu8, mrpt::math::TPointXYZfRGBu8
- [mrpt-hwdrivers]
- 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.
- [mrpt-maps]
- 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
- [mrpt-obs]
- 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::obs::CObservation2DRangeScanWithUncertainty
- [mrpt-opengl]
- New class mrpt::opengl::CMesh3D to render 3D models/meshes
- New method mrpt::opengl::CPointCloudColoured::recolorizeByCoordinate()
- [mrpt-slam]
- Small clean up of mrpt::slam::CICP API, add separate variable to select covariance estimation method.
- [mrpt-topography]
- New function mrpt::topography::geocentricToENU_WGS84()
- [mrpt-vision]
- 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::utils::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::utils::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:
- rawlog-edit:
- 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]
- mrpt::math::KDTreeCapable::TKDTreeSearchParams: Removed parameter nChecks, which was ignored by nanoflann anyway.
- [mrpt-hwdrivers]
- mrpt::hwdrivers::CCameraSensor: Implemented OpenNI2 support for CCameraSensor
- [mrpt-nav]
- 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 var MRPT_LIBRARIES
, following the CMake convention. The old variable name MRPT_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:
- Changes in libraries:
- [mrpt-base]
- New helper templates: mrpt::utils::int_select_by_bytecount<>, mrpt::utils::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>
- mrpt::poses::SO_average<2>, mrpt::poses::SO_average<3>
- mrpt::poses::SE_average<2>, mrpt::poses::SE_average<3>
- [mrpt-hwdrivers]
- New sensors supported:
- mrpt::hwdrivers::CIMUIntersense
- mrpt::hwdrivers::CSkeletonTracker
- 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.
- [mrpt-maps]
- New method mrpt::maps::COccupancyGridMap2D::getAsPointCloud()
- [mrpt-nav]
- 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]
- 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]
- 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 missing using namespace XXX
that might be formerly masked will now reveal. This is a good thing, though admitedly annoying...
- New library [mrpt-nav], subsumming the old [mrpt-reactivenav].
- New library [mrpt-tfest], a refactor of the old [mrpt-scanmatching].
- Backwards compatible headers have been provided to ease the transition of user code for all those library changes. Warning messages will be shown recommending deprecated replacements.
- Detailed list of changes:
- Lib changes:
- Clean up of the bad practice of
using namespace
in public scopes of headers. May lead to user code failing for missing using 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]).
- [mrpt-reactivenav] is now a meta-library, depending on [mrpt-nav].
- [mrpt-tfest] : Old library mrpt-scanmatching ([mrpt-scanmatching]) has been refactored, its API clean-up, and renamed [mrpt-tfest]
- [mrpt-scanmatching] is now a meta-library, depending on [mrpt-tfest].
- These classes have been moved between libs for a more sensible organization:
- mrpt::slam::CDetectorDoorCrossing ==> mrpt::detectors::CDetectorDoorCrossing
- mrpt::slam::CPathPlanningMethod & CPathPlanningCircularRobot: [mrpt-slam] ==> [mrpt-nav]
- Build System / General changes:
- Many optimizations in function arguments (value vs ref). Forces ABI incompatibility with previous versions, hence the change to a new minor version number.
- Updated embedded version of Eigen to 3.2.3
- Kinect: Dropped support for the CL NUI API, which seems discontinued. Alternatives in use are libfreenect and OpenNI2.
- libfreenect is now detected in the system and used instead of compiling the embedded copy of it.
- Embedded copy of libfreenect has been updated to (23/oct/2014). It now supports "Kinect for Windows".
- More selective linking of .so files to avoid useless dependencies (Fixes #52).
- (Windows only) MRPT can now be safely built with libusb support (Freenect, Kinect,...) and it will run on systems without libusb installed, by means of /DELAYLOAD linking flags.
- More unit tests.
- Changes in classes:
- [mrpt-base]
- New function mrpt::math::angDistance()
- [mrpt-hwdrivers]
- mrpt::hwdrivers::CIMUXSens_MT4: (by Joe Burmeister for Suave Aerial Software)
- Upgrade to latest XSens SDK 4.2.1. Requires libudev-dev in Linux
- Add GPS observations to CIMUXSens_MT4 for Xsens devices like GTi-G-700 which have GPS
- mrpt::hwdrivers::CImageGrabber_dc1394: Length of ring buffer is now configurable via TCaptureOptions_dc1394::ring_buffer_size
- [mrpt-maps]
- Important refactor of internal code related to mrpt::maps::CMultiMetricMap:
- All maps (derived from mrpt::maps::CMetricMap) now have a more uniform interface.
- Each map now has a
MapDefinition
structure with all its parameters. See docs for mrpt::maps::TMetricMapInitializer
- Introduced mrpt::maps::TMapGenericParams to hold parameters shared in all maps.
- [mrpt-obs]
- CObservation::getDescriptionAsText(): New virtual method to obstain a textual description of observations. Refactoring of messy code previously in the RawLogViewer app.
- [mrpt-vision]
- mrpt::vision::CFeatureExtraction: Removed (unused) optional ROI parameter in detectors.
- BUG FIXES:
- mrpt::poses::CRobot2DPoseEstimator could estimate wrong angular velocities for orientations near +-180deg.
- mrpt::system::CDirectoryExplorer::sortByName() didn't sort in descending order
- Fixed crashes from MATLAB .mex files: mrpt::system::registerFatalExceptionHandlers() has no longer effect, and will be removed in future releases. (Thanks to Jesús Briales García for all the testing!)
- Fixed potential crash for Eigen unaligned memory access in 32bit builds in mrpt::slam::CGridMapAligner and other places (Closes #94)
Version 1.2.2: Released 12-SEP-2014
- Changes in apps:
- SceneViewer3D:
- New menu "File" -> "Import" -> "3D model" which supports many standard formats (via mrpt::opengl::CAssimpModel)
- New classes:
- [mrpt-hwdrivers]
- mrpt::hwdrivers::CRoboPeakLidar to interface Robo Peak LIDAR scanners.
- [mrpt-opengl]
- mrpt::opengl::CAssimpModel for rendering complex 3D models (many supported formats) in OpenGL scenes.
- Changes in classes:
- Consistency in all "laser scan" classes: angular increments between rays are now FOV/(N-1) instead of FOV/N.
- [mrpt-base]
- New method mrpt::utils::CImage::loadTGA()
- IMPORTANT: Changed behavior of CSerializable/CObject macros (see bugfix below), introducing the new macros DEFINE_SERIALIZABLE_POST_*. May require changes in user code if serializable classes are defined:
- Previous version:
DEFINE_SERIALIZABLE_PRE_*(...)
class XXX {
DEFINE_SERIALIZABLE(XXX)
};
- Must be changed in this version to:
DEFINE_SERIALIZABLE_PRE_*(...)
class XXX {
DEFINE_SERIALIZABLE(XXX)
};
DEFINE_SERIALIZABLE_POST_*(...)
- [mrpt-hwdrivers]
- Bumblebee2 Linux support in mrpt::hwdrivers::CImageGrabber_FlyCapture2 via Triclops (by Jesus Briales)
- [mrpt-maps]
- New method mrpt::maps::COccupancyGridMap2D::getRawMap()
- New method mrpt::maps::CColouredPointsMap::getPCLPointCloudXYZRGB()
- [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]-examples\srba-tutorials\tutorial-srba-how-to-recover-global-map.cpp)
- BUG FIXES:
- mrpt::utils::CImage constructor from a matrix crashed.
- Unit tests: Named semaphores are not tested anymore if it's detected that the kernel version doesn't support them (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:
- rawlog-edit:
- New operations: –export-odometry-txt, –recalc-odometry
- New flag: –rectify-centers-coincide
- New examples:
- New classes:
- [mrpt-base]
- mrpt::math::ContainerType<CONTAINER>::element_t to allow handling either Eigen or STL containers seamlessly.
- mrpt::utils::CConfigFilePrefixer
- [mrpt-hwdrivers]
- mrpt::hwdrivers::COpenNI2Sensor: Interface to OpenNI2 cameras, capable of reading from an array of OpenNI2 RGBD cameras (By Eduardo Fernandez)
- mrpt::hwdrivers::CDUO3DCamera: Interface to DUO3D cameras (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]
- mrpt::obs::CObservation6DFeatures
- Changes in classes:
- [mrpt-base]
- Robust kernel templates moved from mrpt::vision to mrpt::math. See mrpt::math::RobustKernel<>. Added unit tests for robust kernels.
- 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::utils::CImage::forceLoad() and mrpt::utils::CImage::unload()
- [mrpt-hwdrivers]
- mrpt::hwdrivers::CCameraSensor: Added a hook for user code to run before saving external image files: mrpt::hwdrivers::CCameraSensor::addPreSaveHook()
- mrpt::hwdrivers::CNationalInstrumentsDAQ now supports analog and digital outputs.
- New method mrpt::hwdrivers::CNTRIPClient::sendBackToServer()
- [mrpt-srba]
- Now also implements SE(3) relative graph-slam.
- [mrpt-vision]
- mrpt::vision::checkerBoardStereoCalibration: More robust handling of stereo calibration patterns. OpenCV sometimes detects corners in the wrong order between (left/right) images, so we detect the situation and fix it.
- mrpt::vision::findMultipleChessboardsCorners():
- Now enforces a consistent counterclockwise XYZ coordinate frame at each detected chessboard.
- Much more robust in distingishing quads of different sizes.
- Build system / public API:
- Fixes to build in OS X - Patch by Randolph Voorhies.
- Removed most "using namespace" from public headers, as good practice.
- Refactoring of MRPT headers.
- <mrpt/utils/stl_extensions.h> has been split into:
- <mrpt/utils/stl_serialization.h>
- <mrpt/utils/circular_buffer.h>
- <mrpt/utils/list_searchable.h>
- <mrpt/utils/bimap.h>
- <mrpt/utils/map_as_vector.h>
- <mrpt/utils/traits_map.h>
- <mrpt/utils/stl_serialization.h>
- <mrpt/utils/printf_vector.h>
- <mrpt/utils/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.
- Embedded Eigen updated to version 3.2.1 (commit) (commit)
- BUG FIXES:
- RawlogViewer app: Fixed abort while converting SF->obs.only datasets when there is no odometry.
- mrpt::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:
- 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::utils::CCanvas::selectTextFont()
- mrpt::reactivenav::CParameterizedTrajectoryGenerator: New methods:
- mrpt::reactivenav::CParameterizedTrajectoryGenerator::inverseMap_WS2TP() for inverse look-up of WS to TP space - (commit)
- mrpt::reactivenav::CParameterizedTrajectoryGenerator::renderPathAsSimpleLine() - (commit)
- Changed the signature of 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 - (commit)
- mrpt::reactivenav::CReactiveNavigationSystem and mrpt::reactivenav::CReactiveNavigationSystem3D didn't obey the "enableConsoleOutput" constructor flag - (commit)
- mrpt::synch::CSemaphore::waitForSignal() : Fixed error when thread got an external signal (commit)
Version 1.0.2: Released 2-AUG-2013 (SVN 3435)
- New apps:
- Changes in apps:
- rawlog-edit:
- New operations: –list-timestamps, –remap-timestamps, –export-2d-scans-txt, –export-imu-txt
- New classes:
- [mrpt-base]
- mrpt::poses::CPose3DRotVec is now fully implemented (By Francisco Angel Moreno).
- [mrpt-opengl]
- mrpt::opengl::CLight - OpenGL scenes now allow customization of OpenGL lighting. See also new lighting methods in mrpt::opengl::COpenGLViewport - r3409
- [mrpt-reactivenav]
- mrpt::reactivenav::CReactiveNavigationSystem3D - By Mariano Jaimez Tarifa - r3389
- New functions:
- [mrpt-opengl]
- mrpt::opengl::stock_objects::RobotRhodon()
- Changes in classes:
- [mrpt-base]
- Generic particle filter classes now allow directly resampling to a dynamic number of particles. Affected methods: - r3381
- mrpt::bayes::CParticleFilterCapable::performResampling()
- mrpt::bayes::CParticleFilterCapable::computeResampling()
- New method: CImage::loadFromXPM() - r3397
- [mrpt-maps]
- mrpt::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 MRPT_MAKE_ALIGNED_OPERATOR_NEW - r3429
Version 1.0.1: Released 12-MAY-2013 (SVN 3370)
- Changes in apps:
- RawLogViewer:
- Better description of the "too much memory used" warning while loading large datasets.
- robotic-arm-kinematics:
- Now allows changing the orientation of the first DOF (X,Y,Z).
- New classes:
- [mrpt-hwdrivers]
- mrpt::hwdrivers::CInterfaceNI845x: An interface for this USB SPI/I2C data acquisition board.
- mrpt::hwdrivers::CCANBusReader: A class to record CAN bus frames with a CAN232 converter.
- [mrpt-obs]
- mrpt::obs::CObservationCANBusJ1939
- New functions:
- New opengl_stock objects:
- mrpt::opengl::stock_objects::Hokuyo_URG()
- mrpt::opengl::stock_objects::Hokuyo_UTM()
- mrpt::opengl::stock_objects::Househam_Sprayer()
- mrpt::math::saveEigenSparseTripletsToFile() - r3351
- New examples:
- 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:
- Fixed a potential build error if including FFMPEG's <time.h> instead of the standard header - r3316
- Fixed determination of GCC version for all GCC builds - r3324
- Updated to Eigen 3.1.3 - r3349
- Updated to nanoflann 1.1.5
- BUG FIXES:
- Unit tests "SchurTests" for mrpt-srba incorrectly reported errors due to an improperly initialized reference to a local variable - r3318
- Debian packages: added missing binary deps for libmrpt-dev - r3335
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:
- Changes in apps:
- navlog-viewer:
- Fixed some minor visualization errors.
- RawLogViewer:
- Import sequence of images as rawlog: Didn't detect "png" file extension as images - r2940 - Closes #34
- The GUI toolbar has been ported from wxWidget's ToolBar to sets of wxCustomButton's to avoid visualization problems in wx 2.9.X - r2950
- ReactiveNavigationDemo:
- The default holonomic navigation method is now the VFF, since after the last bug fixes and tunes it seems to work quite well.
- SceneViewer3D:
- The GUI toolbar has been ported from wxWidget's ToolBar to sets of wxCustomButton's to avoid visualization problems in wx 2.9.X - r2952
- Added a new menu: "File -> Import -> From LAS file..." - r3244
- 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::utils::CTimeLoggerEntry
- [mrpt-obs]
- mrpt::obs::CObservationWindSensor - r3050
- [mrpt-maps]
- [mrpt-opengl]
- mrpt::opengl::COctoMapVoxels
- 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:
- 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()
- mrpt::utils::CTimeLogger:
- New method mrpt::utils::CTimeLogger::getStats() for programatic execution time stats analysis - r2998
- New method mrpt::utils::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::utils::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::utils::CConfigFileBase::write() now have an extended signature for formatting.
- mrpt::utils::CLoadableOptions::dumpToTextStream() is no longer pure virtual: it now relies on mrpt::utils::CLoadableOptions::saveToConfigFile()
- mrpt::utils::CStream::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::utils::TTypeName<> moved to its own header <mrpt/utils/TTypeName.h> while refactoring <mrpt/utils/CSerializable.h> - r3044
- mrpt::utils::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 MRPT_MAKE_ALIGNED_OPERATOR_NEW
- New static method mrpt::hwdrivers::CGPSInterface::parse_NMEA()
- [mrpt-maps]
- Better integration of point cloud classes with PCL: - r2943
- mrpt::maps::CPointsMap::loadPCDFile()
- mrpt::maps::CPointsMap::setFromPCLPointCloud()
- mrpt::maps::CColouredPointsMap::setFromPCLPointCloudRGB()
- 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
- mrpt::maps::CPointsMap::loadLASFile()
- mrpt::maps::CPointsMap::saveLASFile()
- 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::CRenderizable::getBoundingBox()
- mrpt::opengl::COpenGLScene::getBoundingBox()
- mrpt::opengl::COpenGLViewport::getBoundingBox()
- mrpt::opengl::COctreePointRenderer::octree_get_graphics_boundingboxes() has a new flag to draw solid boxes at each leaf node - r3033
- mrpt::opengl::COpenGLViewport 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::opengl::CGridPlaneXY, mrpt::opengl::CGridPlaneXZ
- mrpt::opengl::CSimpleLine
- mrpt::opengl::CSetOfLines
- [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::utils::abs_diff()
- mrpt::system::getMRPTLicense()
- mrpt::system::getFileModificationTime()
- mrpt::math::noncentralChi2PDF_CDF() is now exposed (was private)
- mrpt::utils::sprintf_container()
- 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 nanoflann 1.1.4 - r2937, r3017
- 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:
- 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
- rawlog-edit:
- Operation "--camera-params" now also handles stereo observations.
- New operation "--stereo-rectify" for batch rectifying datasets with stereo images.
- New operation "--rename-externals".
- SceneViewer3D:
- New menu for generating high-resolution renders of any scene directly to imag files - r2775
- Many new menus for selective selecting objects and applying operations on them - r2776
- 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]
- [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::CEllipsoidRangeBearing2D
- mrpt::opengl::CEllipsoidInverseDepth2D
- mrpt::opengl::CEllipsoidInverseDepth3D
- mrpt::opengl::CFrustum to easily render these geometric figures
- New struct mrpt::opengl::TFontParams result of a code refactoring
- [mrpt-vision]


Thank you to all of you who attended Rainforest Partnership's Films for the Forest on March 10th, 2014 at the SXSW Film Community Screenings. Special thanks to all the filmmakers who submitted films from around the world, Emmy-nominated visual artist Paul Beck, Garner Fine Arts Academy and Hart Elementary who supported student film submissions, Films for the Forest judges, advisors and sponsors and all the many volunteers who made this event successful in raising awareness for the importance of rainforests.
Films for the Forest is an annual international short film contest created by Rainforest Partnership. Winning films are screened as a part of SXSW Film Festival Community Film Screenings.
Films for the Forest has received film submissions spanning four continents and been judged by an impressive list of award-winning filmmakers and environmentalists.
Learn More...
2015 Films for the Forest call for submissions will be open in late 2014 so please check back here.
If you would like to get involved with the 2015 Films for the Forest, please email<EMAIL_ADDRESS>Rainforest Partnership partners with people who live in and around tropical rainforests to develop environmentally sustainable economies to protect and regenerate their forests.Learn More...


| Constructor and Description |
|---|
ReadOnlySettings(Settings settings)
A wrapper for settings that makes it read-only
|
Settings(Settings settings) |
| Modifier and Type | Field and Description |
|---|---|
protected Settings |
RPGClass.settings
The settings for your class.
|
| Constructor and Description |
|---|
EffectPlayer(Settings settings)
Sets up an effect player that applies effects based of the values in the provided settings.
|
| Modifier and Type | Method and Description |
|---|---|
static ArrayList<ParticleProjectile> |
ParticleProjectile.rain(org.bukkit.entity.LivingEntity shooter,
int level,
org.bukkit.Location center,
Settings settings,
double radius,
double height,
int amount,
ProjectileCallback callback)
Fires a spread of projectiles from the location.
|
static ArrayList<ParticleProjectile> |
ParticleProjectile.spread(org.bukkit.entity.LivingEntity shooter,
int level,
org.bukkit.util.Vector center,
org.bukkit.Location loc,
Settings settings,
double angle,
int amount,
ProjectileCallback callback)
Fires a spread of projectiles from the location.
|
| Constructor and Description |
|---|
ParticleProjectile(org.bukkit.entity.LivingEntity shooter,
int level,
org.bukkit.Location loc,
Settings settings)
Constructor
|
| Modifier and Type | Field and Description |
|---|---|
protected Settings |
Skill.settings
The settings for the skill which include configurable stats
for your mechanics and the defaults such as mana cost, level
requirement, skill point cost, and cooldown.
|
| Modifier and Type | Method and Description |
|---|---|
static void |
ParticleHelper.fillCircle(org.bukkit.Location loc,
String particle,
Settings settings,
double radius,
int amount,
Direction direction)
Plays several of a particle type randomly within a circle
|
static void |
ParticleHelper.fillHemisphere(org.bukkit.Location loc,
String particle,
Settings settings,
double radius,
int amount)
Randomly plays particle effects within the hemisphere
|
static void |
ParticleHelper.fillSphere(org.bukkit.Location loc,
String particle,
Settings settings,
double radius,
int amount)
Randomly plays particle effects within the sphere
|
static void |
ParticleHelper.play(org.bukkit.Location loc,
Settings settings)
Plays particles about the given location using the given settings
|
static void |
ParticleHelper.play(org.bukkit.Location loc,
String particle,
Settings settings)
Plays a particle at the given location based on the string
|
| Modifier and Type | Field and Description |
|---|---|
protected Settings |
EffectComponent.settings
The settings for the component
|
| Modifier and Type | Method and Description |
|---|---|
Settings |
EffectComponent.getSettings()
Retrieves the settings of the dynamic component
|
| Modifier and Type | Method and Description |
|---|---|
static boolean |
ItemChecker.check(org.bukkit.inventory.ItemStack item,
int level,
Settings settings)
Checks an individual item to see if it matches the settings
|
| Modifier and Type | Method and Description |
|---|---|
org.bukkit.entity.LivingEntity |
BlockBreakTrigger.getTarget(org.bukkit.event.block.BlockBreakEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
BlockPlaceTrigger.getTarget(org.bukkit.event.block.BlockPlaceEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
EnvironmentalTrigger.getTarget(org.bukkit.event.entity.EntityDamageEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
DeathTrigger.getTarget(org.bukkit.event.entity.EntityDeathEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
KillTrigger.getTarget(org.bukkit.event.entity.EntityDeathEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
Trigger.getTarget(E event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
PhysicalDealtTrigger.getTarget(PhysicalDamageEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
PhysicalTakenTrigger.getTarget(PhysicalDamageEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
LandTrigger.getTarget(PlayerLandEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
MoveTrigger.getTarget(org.bukkit.event.player.PlayerMoveEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
CrouchTrigger.getTarget(org.bukkit.event.player.PlayerToggleSneakEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
LaunchTrigger.getTarget(org.bukkit.event.entity.ProjectileLaunchEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
SkillDealtTrigger.getTarget(SkillDamageEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
org.bukkit.entity.LivingEntity |
SkillTakenTrigger.getTarget(SkillDamageEvent event,
Settings settings)
Fetches the target as determined by the triggering event.
|
boolean |
BlockBreakTrigger.shouldTrigger(org.bukkit.event.block.BlockBreakEvent event,
int level,
Settings settings) |
boolean |
BlockPlaceTrigger.shouldTrigger(org.bukkit.event.block.BlockPlaceEvent event,
int level,
Settings settings) |
boolean |
Trigger.shouldTrigger(E event,
int level,
Settings settings) |
boolean |
EnvironmentalTrigger.shouldTrigger(org.bukkit.event.entity.EntityDamageEvent event,
int level,
Settings settings) |
boolean |
DeathTrigger.shouldTrigger(org.bukkit.event.entity.EntityDeathEvent event,
int level,
Settings settings) |
boolean |
KillTrigger.shouldTrigger(org.bukkit.event.entity.EntityDeathEvent event,
int level,
Settings settings) |
boolean |
PhysicalTrigger.shouldTrigger(PhysicalDamageEvent event,
int level,
Settings settings) |
boolean |
LandTrigger.shouldTrigger(PlayerLandEvent event,
int level,
Settings settings) |
boolean |
MoveTrigger.shouldTrigger(org.bukkit.event.player.PlayerMoveEvent event,
int level,
Settings settings) |
boolean |
CrouchTrigger.shouldTrigger(org.bukkit.event.player.PlayerToggleSneakEvent event,
int level,
Settings settings) |
boolean |
LaunchTrigger.shouldTrigger(org.bukkit.event.entity.ProjectileLaunchEvent event,
int level,
Settings settings) |
boolean |
SkillTrigger.shouldTrigger(SkillDamageEvent event,
int level,
Settings settings) |
Copyright © 2021. All rights reserved.


The subtle way T.I.'s daughter responded to the intrusive comments he made about 'checking her hymen'
by Bashiera Parker (@bparks_)Cape Town – After T.I.'s very public comments about his daughter's hymen, Deyjah Harris recently unfollowed her dad and the rest of her family on Instagram – and honestly, we completely get it.
In case you missed it, in an interview with Nazanin Mandi and Nadia Moham on their podcast Ladies Like Us, the 39-year-old admitted he'd talked to his daughter. He then added, "Not only have we had the conversation, we have yearly trips to the gynaecologist to check her hymen."
The "virginity test" meetings started when she was 16. He added: "I will say, as of her 18th birthday, her hymen is still intact."
While they didn't initially, Nazanin and Nadia have now taken down the episode and apologised for the lapse of judgment in discussing and then sharing the conversation.
Deyjah has since unfollowed her dad on Instagram and Twitter, and Hollywood Unlocked reports that she doesn't follow family members Tiny or Zonnique Pullins either.
According to E! News, Deyjah hasn't publicly addressed the comments, but she did recently like a series of tweets about the situation. One tweet read, "This is disgusting, possessive and controlling *whew*" while another user commented, "I am so sorry that you are going through this, it's not right. Your body is yours, no one else's."
Compiled by Bashiera Parker (Sources: E! News , Hollywood Unlocked , Channel24 , Instagram , Twitter )
(Photo: Getty Images)


Toggle navigation
API Simple Report Tool (ASRT)
ASRT
Now
current status
Hour
status within the last 60 minutes
Day
status within the last 24 hours
Week
status within the last 7 days
API Status Results


Blueweave
Blueweave is a Java framework for recurrent sequential deep learning networks using guava and deeplearning4j. bluewave is intended to simplify the configuration and use of neural networks.
- Java Docs - The generated java docs.
Building The Network
blueweave uses a builder pattern to setup the netowrk:
//get the config from the classpath
Config conf = ConfigFactory.load();
//build the network
ClassifierNetwork network = new TimeseriesClassifierNetwork.TimeseriesClassifierNetworkBuilder()
.setNetworkClasses(trainingModel.getNetworkClasses())
.setTrainClassifications(trainingModel.getNetworkClassifications())
.setTrainTable(trainingTable)
.setTestTable(testingTable)
.setConfig(conf,"TimeseriesClassifierNetwork")
.build();
//the classification results as a table
Table<Integer, String, Object> result = network.evaluate();
Configurations With Typesafe
blueweave uses typesafe to make setting up multi layer networks easier.
{
"TimeseriesClassifierNetwork": {
"layers": [{
"number":0,
"type":"GravesLSTM",
"activation": "tanh",
"nIn": 1,
"nOut": 10
}, {
"number":1,
"type":"RnnOutputLayer",
"lossFunction": "MCXENT",
"activation": "softmax",
"nIn": 10,
"nOut": 5
}],
"optimizationAlgo": {
"type": "STOCHASTIC_GRADIENT_DESCENT",
"iterations": 1
},
"seed": 123,
"learningRate": 0.02,
"gradientNormalization": {
"threshold": 0.45,
"type": "ClipElementWiseAbsoluteValue"
},
"updater": {
"type": "NESTEROVS",
"momentum": 0.85
},
"weightInit": "XAVIER"
}
}
Data Model For Testing and Training
Currently implementations are limited to recurrent series, but more table types and network classifiers are intended. The data for both trainging and testing can be represented.
| Date | Series1 | Series1 |
|---|---|---|
| 2016-04-01 | 0.12 | 0.22 |
| 2016-04-02 | 0.23 | 0.12 |
| 2016-04-03 | 0.46 | 0.10 |
| 2016-04-04 | 0.51 | 0.10 |
| 2016-04-05 | 1.46 | 0.11 |
Training Model
The training model is used to define the mapping of each series to the possible classification types that will be used to train the network. This is an example of training a network to classify a set of number series.
{
"startDate":"2016-04-01",
"endDate":"2016-08-01",
"networkClasses":[
{"id":0, "name":"cyclic"},
{"id":1, "name":"upward-trend"},
{"id":2, "name":"downward-trend"},
{"id":3, "name":"upward-shift"},
{"id":4, "name":"downward-shift"}
],
"networkClassifications":[
{"name":"PACW", "classId":0},
{"name":"PAG", "classId":0},
{"name":"PAHC", "classId":4},
{"name":"PANW", "classId":2},
{"name":"PATK", "classId":3},
{"name":"PATR", "classId":3},
{"name":"PAY", "classId":4},
{"name":"PAYC", "classId":1},
{"name":"PAYX", "classId":3}
]
}
And to deserialize that model for use by the builder:
//make the training model
SequenceNetworkModel trainingModel = GsonFactory.fromJson(
IOUtils.toString(
getClass().getResourceAsStream("/data/01/train/trainModel01.json"), "UTF-8"),
SequenceNetworkModel.class, GsonFactory.Type.DEFAULT);
Data Models
The data model for both training and testing is simple tables. An example of a serialized model for training could be:
{
"columns": [
"DATE",
"PACW",
"PAG",
"PAHC",
"PANW",
"PATK",
"PAY",
"PAYC",
"PAYX"
],
"data": [
[
"2016-04-01",
37.07,
36.7,
27.39,
161.12,
45.92,
28.2,
35.43,
54.17
],
[
"2016-04-04",
37.11,
35.82,
27.29,
161.59,
45.37,
27.78,
35.8,
53.45
],
[
"2016-04-05",
36.25,
35.68,
26.66,
151.92,
46.05,
27.76,
34.43,
53.11
],
[
"2016-04-06",
36.76,
35.74,
27.26,
158.22,
46.64,
28.23,
35.52,
53.64
]
]
}
And deserializing it is as simple as using the provided factory:
Table<Date, String, Double> trainingTable = GsonFactory.fromJson(
IOUtils.toString(getClass().getResourceAsStream("/data/01/train/trainTable01.json"), "UTF-8"),
TreeBasedTable.class, GsonFactory.Type.DEFAULT);


GHOSTS OF MARS A film review by Steve Rhodes Copyright 2001 Steve Rhodes RATING (0 TO ****): **
GHOSTS OF MARS by John Carpenter, one of the B-movie kings, is a horror movie set on the red planet in the year 2176. Don't worry, you'll feel right at home since it is a retro future in which flashlights and many other technologies haven't advanced at all in almost two centuries. The movie's unluckily possessed humans, a group of miners, look like members of the heavy metal band KISS.
Those going in hopes of the over-the-top fun of Carpenter's last picture, VAMPIRES, will leave disappointed. Here the action is merely ridiculous without the energetic fun of VAMPIRES. Still, after a lifeless first act, the movie does pick up the pace in the middle. The ending, however, doesn't hang together. The result is an uneven movie that's much less hit than miss.
The story concerns the train transportation of a notorious criminal named James "Desolation" Williams. As Desolation, Ice Cube's lack of acting talent turns into an asset, making his stilted dialog come across as campy wit. Natasha Henstridge, from the SPECIES series, is the movie's leading character, Melanie Ballard, the second in command of the police force that has come to retrieve Desolation. Pam Grier plays the detail's commander.
When they arrive at the mining camp where Desolation is being held, it's almost a ghost town, thanks to the destruction caused by the aforementioned miners. It seems that something deep within the planet has been unleashed and has inhabited their bodies.
The movie is as dead as an asteroid until Ballard and Desolation become caustic comrades in the battle against the heavy metallers. The barbs they trade put enough needed life into the movie to make you hope that it will finally take off, but it never achieves lift-off. Although some of the drug usage in the story looks a bit too inviting, one scene could serve as an excellent public service announcement against drugs. It is a sickly funny scene that becomes one of the more memorable incidents in a movie whose memory has a half-life measured in minutes.
"Maybe I'd sleep with you if you were the last man on earth," Ballard tells one of her men (Jason Statham), who keeps hitting on her, "but we're not on earth."  Most of the movie is like that.
GHOSTS OF MARS at least has the good sense to run only 1:38. It is rated R for "strong violence/gore, language and some drug content" and would be acceptable for older teenagers.
The film opens nationwide in the United States on Friday, August 24, 2001. In the Silicon Valley, it will be showing at the AMC and the Century theaters.
Web: http://www.InternetReviews.com Email<EMAIL_ADDRESS>Want free reviews and weekly movie and video recommendations via Email? Just send me a letter with the word "subscribe" in the subject line.
========== X-RAMR-ID: 29321 X-Language: en X-RT-ReviewID: 245745 X-RT-TitleID: 1109551 X-RT-SourceID: 703 X-RT-AuthorID: 1271 X-RT-RatingText: 2/4
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


About the name
No, it's not a typo, it's just a bad pun. At this point, naming stuff developed in Python like that is almost a tradition.
Origins
This game is an implementation of the programming exercise described here.
Implementation details
Every time the computer wins a match, the details of the game are saved in its internal memory. Therefore, the more games the computer wins, more data gets collected for future games, which then makes it a harder adversary.
Technologies involved
Python, Flask, Javascript, jQuery, Bootstrap and stuff.
If you want to know more about the application internals, check it out on Github..


| Trees | Indices | Toggle frames |
|---|
Source --+ | StaticSource --+ | StaticMemorySourceHelper class for default implementation of StaticSource. Do not use directly.
|
__init__(self,
data,
audio_format)
Construct a memory source over the given data buffer.
|
|
| pyglet.image.Animation |
get_animation(self)
Import all video frames into memory as an Animation.
(Inherited from pyglet.media.Source)
|
| pyglet.image.AbstractImage |
get_next_video_frame(self)
Get the next video frame.
(Inherited from pyglet.media.Source)
|
| float |
get_next_video_timestamp(self)
Get the timestamp of the next video frame.
(Inherited from pyglet.media.Source)
|
| ManagedSoundPlayer |
play(self)
Play the source.
(Inherited from pyglet.media.Source)
|
| float |
duration
The length of the source, in seconds.
(Inherited from pyglet.media.Source)
|
| AudioFormat |
audio_format = None
Format of the audio in this source, or None if the source is
silent.
(Inherited from pyglet.media.Source)
|
| VideoFormat |
video_format = None
Format of the video in this source, or None if there is no
video.
(Inherited from pyglet.media.Source)
|
| Trees | Indices | Toggle frames |
|---|
| Generated by Epydoc 3.0beta1 on Sun Mar 22 20:15:40 2009 | http://epydoc.sourceforge.net |


|
OOjsUI
Object-Oriented JavaScript – User Interface
|
Element with named flags that can be added, removed, listed and checked. More...
Public Member Functions | |
| __construct (Element $element, array $config=array()) | |
| hasFlag ($flag) | |
| Check if a flag is set. More... | |
| getFlags () | |
| Get the names of all flags set. More... | |
| clearFlags () | |
| Clear all flags. More... | |
| setFlags ($flags) | |
| Add one or more flags. More... | |
| getConfig (&$config) | |
| Public Member Functions inherited from OOUI\ElementMixin | |
| __construct (Element $element, Tag $target, array $config=array()) | |
| Create element. More... | |
| getConfig (&$config) | |
Add properties to the given $config array to allow reconstruction of this widget via its constructor. More... | |
Static Public Attributes | |
| static | $targetPropertyName = 'flagged' |
| Static Public Attributes inherited from OOUI\ElementMixin | |
| static string | $targetPropertyName = '' |
| Property name for accessing the target on the element. | |
Protected Attributes | |
| string[] | $flags = array() |
| Flags. | |
| Protected Attributes inherited from OOUI\ElementMixin | |
| Element | $element = null |
| Element being mixed into. | |
Additional Inherited Members | |
| Public Attributes inherited from OOUI\ElementMixin | |
| Tag | $target = null |
| Tag being targeted. | |
Element with named flags that can be added, removed, listed and checked.
A flag, when set, adds a CSS class on the $element
by combining oo-ui-flaggedElement-
with the flag name. Flags are primarily useful for styling.
| OOUI\FlaggedElement::__construct | ( | Element | $element, |
| array | $config = array() |
||
| ) |
| OOUI\FlaggedElement::clearFlags | ( | ) |
Clear all flags.
| OOUI\FlaggedElement::getFlags | ( | ) |
Get the names of all flags set.
| OOUI\FlaggedElement::hasFlag | ( | $flag | ) |
Check if a flag is set.
| string | $flag | Name of flag |
| OOUI\FlaggedElement::setFlags | ( | $flags | ) |
Add one or more flags.
| string | array | $flags | One or more flags to add, or an array keyed by flag name containing boolean set/remove instructions. |


Welcome and thanks for signing up!
Which describe your role? (check all that apply)
How many employees does the business have in all divisions?
Which best describes your business? (check all that apply)
How would you like to bring in your product data?
Alright let's figure out what you sell, and how you're currently selling. Check all that apply.
What type of store(s) do you have?
Tell us about your point of sale solution
Are you interested in offering retail clients self checkout?
Alright, now where do you sell them?
On which marketplaces do you currently/plan to sell?
How do you get paid?
Shipping Costs (choose all that apply)
Origins (choose all that apply)
Social
What other cloud services do you currently use?
Please tell us more about the 'other' cloud software you use


2020-04-12
Written onHere is my content.
Excerpt separator can also be extracted from content.
Add excerpt: <string>
to the above metadata.
Excerpt separator is <!--more-->
by default.
Here is my content.
Excerpt separator can also be extracted from content.
Add excerpt: <string>
to the above metadata.
Excerpt separator is <!--more-->
by default.


{% extends 'layout.html' %} {% block content %}
Choose a temperature sensor, then one or more fans you want to control. All fans will be set to the same speed. {#You should check the cooling guideline.#}
Enter the points (temperatures (°C) and fan speeds (%)) of the curve:
{% for point in range(6) %}


Crapi
Crapi is yet another API wrapper. Yes, there is no shortage of these out there, but no other API wrapper gem (that I could find) provided the kind of functionality you get from the Crapi::Proxy class, which is really the biggest benefit here.
Crapi::Client will connect to the target system and handily provides a base path for you (becaue some APIs and services have a path that is always part of every request), Crapi::Proxy lets you add to the root client's base path or default set of headers without having to create any new connections.
Why “crapi”? Because it's a CRUD API client, and (honestly) “… It could be better.”™
Installation
Add this line to your application's Gemfile:
gem 'crapi'
And then execute:
$ bundle
Or install it yourself as:
$ gem install crapi
Using The Crapi Tools
Client Usage
## Connect to an API.
api = Crapi::Client.new('https://jsonplaceholder.typicode.com/')
## Issue requests against the API.
api.get('users/1') ## GETs /users/1; returns a Hash.
api.get('posts', query: { userId: 2 }) ## GETs /posts?userId=2; returns an Array.
mew_comment = { user: 'megapwner', text: 'FRIST!!1!' }
api.post('comments', payload: new_comment) ## POSTs to /comments; returns a Hash.
Proxy Usage
## Connect to an API.
api = Crapi::Client.new('https://versioned.fake-api.com/api/')
## Back in the v1 days, versioning of this API was via the URL ...
v1 = api.new_proxy('/v1')
v1.get('data') ## GETs /api/v1/data; pretty straight-forward.
v1.post('data', payload: values) ## POSTs *values* to /api/v1/data.
## For API v2, they switched to an Accept header approach ...
v2 = api.new_proxy('/', headers: { Accept: 'application/vnd.fake-api.v2+json' })
v2.get('data') ## GETs /api/data with the v2 header.
## API v3 keeps the Accept header approach ...
v3 = api.new_proxy('/', headers: { Accept: 'application/vnd.fake-api.v3+json' })
v3.get('data') ## GETs /api/data with the v3 header.
## Note that only one connection to the client is made and you can easily make
## v1, v2, and v3 API calls ad hoc without having to juggle paths/headers yourself.
Consult the repo docs for the full Crapi documentation.
Feature Roadmap / Future Development
Additional features/options coming in the future:
-
Cleaner handling of non-body-returning calls.
-
More resilient serializing of non-String paylods when using custom Content-Type headers.
Contribution / Development
Bug reports and pull requests are welcome on GitHub at github.com/nestor-custodio/crapi.
After checking out the repo, run bin/setup
to install
dependencies. Then, run rake spec
to run the tests. You can
also run bin/console
for an interactive prompt that will allow
you to experiment.
Linting is courtesy of Rubocop and documentation is
built using Yard. Neither is included in
the Gemspec; you'll need to install these locally (gem install
rubocop yard
) to take advantage.
License
The gem is available as open source under the terms of the MIT License.


Helix Pi is an easy way for anyone to make, play and mod games. No programming required.
It's still very much a work in progress, but you can try it out right now, in your browser.


--- title: Filters ---
An optional precision parameter can be supplied to include decimals within the approximation.


View By Assignee View By Status
| ID | Tasks I Assigned | Assigned to | Status | Due Date | Assigned on |
|---|---|---|---|---|---|
| 12 | Complete documentation | A.Axler | Need Clarity | 15-05-2011 | 15-05-2011 |
| 67 | Complete pending coder queries | A.Axler | Need Clarity | 10-05-2011 | 15-05-2011 |
| 32 | Submit Sampling data | A.Menna | Open | 18-04-2011 | 15-05-2011 |
| 15 | Submit 100% build specs | D.Milot | Open | 12-04-2011 | 15-05-2011 |
| 28 | Update Peer Review Sheet | R.Bolton | Open | 17-03-2011 | 15-05-2011 |
| 30 | Submit 100% build specs | R.Bolton | Open | 15-05-2011 | 15-05-2011 |
| 35 | Submit Sampling data | W.O'Mahony | Resolved | 10-05-2011 | 15-05-2011 |
| 21 | Update listings | Chandrasekhar | Open | 15-05-2011 | 15-05-2011 |
| 35 | Upload coder review sheet | Michelle | Open | 10-05-2011 | 15-05-2011 |


Sign Out
Indian Sign Language Alphabet
Progress:
Total:
Basic Words 1
Progress:
Total:
Indian Sign Language Alphabets-2
Progress:
Total:
Basic Words 2
Progress:
Total:
Food and Weather
Progress:
Total:


Review PSBT
Recipient 0:
172,000 sats
bc1q4c3
sthn389
m4kmyj89ucyza4
rt93stm
sxvfd5v
Next
Displays one screen per recipient. Err on the side of being explicit about which addrs are getting what amounts.
Maximize font size wherever possible for best readability.
Stealing Strike's design for highlighting first/last 7 chars of address.
Zero-index the recipient numbers to match utxos or one-index for human readbility?


Reading Prolog Programs
While you may write
a Prolog program
only once, and may even rewrite it a few times, you
and others will typically read it many, many, many times.
Consequently, it is important to know how we can best read
Prolog programs: What exactly do they mean?
| Video: |
|
There are several ways to
read pure Prolog programs, and we
explain some of them in this text.
Declarative reading
Declaratively, Prolog programs state what holds. A Prolog
program consists of clauses, and each clause is either
a fact or a rule. Facts state what is
always true. Rules state what is true under
certain conditions.
Declaratively, a rule of the form:
Head :- Body.
is read as: "If Body is
true, then Head is true." In logical terms, we say
that Body implies Head, written
as Body→Head, or equivalently as:
Head ← Body.
Note that :- is in fact meant to represent the arrow
←. Since Body defines the conditions under
which Head holds, it can also be regarded as
a constraint on the set of solutions.
This way to read Prolog programs is also called concluding reading.
A major advantage of this approach is that it is easy to explain,
understand and use. You state what holds under what conditions,
and the Prolog engine finds solutions for you. A disadvantage of
this approach is that it does not explain why logically equivalent
program variants may exhibit different performance or termination
characteristics.
Example: list_list_together/3, describing
the
concatenation of two lists:
list_list_together([], Bs, Bs).
list_list_together([A|As], Bs, [A|Cs]) :-
list_list_together(As, Bs, Cs).
Let us read this definition
declaratively, that is in
terms of
relations that hold between arguments, as
described by the two clauses:
- The concatenation of the empty
list [] and any
list Bs is just that
list Bs.
- If the concatenation of As
and Bs is Cs, then the
concatenation of [A|As] and Bs
is [A|Cs], for any
element A.
Note how
general this reading is: It is applicable if any
arguments are
instantiated, and
also if they
are not.
Procedural reading
To complement the declarative approach of reading Prolog programs,
we can also read them procedurally. This means that we take
into account the actual computation strategy of the Prolog
engine.
Operationally, invocation of a Prolog predicate is similar to
a procedure or function call in other
languages. However, two critical differences remain: First,
Prolog variables are truly variables
and may be unbound or only partially instantiated.
This cannot happen with variables in most other languages. Second,
Prolog provides backtracking as a built-in feature, and
will exhaustively try alternatives.
For these reasons, understanding a Prolog
program procedurally is significantly harder than
understanding the control flow of many other programming
languages. In particular, when tracing Prolog, you need to take
into account:
- instantiation of variables
- aliasing between variables
- alternatives found on backtracking.
The need to keep track of these complexities and their
interactions is a major drawback of this approach. An advantage of
the approach is its potential to explain
different performance
characteristics and termination
properties of program variants.
Note also that a procedural reading almost invariably implies a
particular direction of use, and therefore typically
does not do justice to the full generality of logical relations.
Example: Let us read
list_list_together/3 (shown above)
procedurally for the query
?- list_list_together([x,y], [z], Cs).
- Does the first clause apply? No, because [x,y] does not unify with [].
- Does the second clause apply? Note that due to the way
resolution works, we must
introduce fresh variables when considering a
clause. So, let us
use A', As', Bs', and Cs'
for the variables A, As, Bs
and Cs that appear in the clause head. The answer is:
Yes, the second clause applies with the
bindings A'=x, As'=[y], Bs'=[z], Cs=[A'|Cs'].
This is already rather cumbersome and error-prone, and it
gets even harder to keep track of all bindings as we proceed
further.
-
Carrying on, we consider the
goal list_list_together([y], [z], Cs'), repeating the
same questions for this goal.
- Does the first clause apply? No, because [y] does not unify with [].
- Does the second clause apply? We need to rename the
variables again. Let us
use A'', As'', Bs''
and Cs''. Yes, the clause applies
with A''=y, As''=[], Bs''=[z]
and Cs'=[A''|Cs''].
- Now the whole ordeal once more, as we consider the
goal list_list_together([], [z], Cs'').
- Does the first clause apply? Yes, at last!
Note that we again need to introduce fresh variables
of course. Let us use Bs''' to denote the single
variable of the first clause at this step of the
computation. So the first clause applies
with Bs'''=[z] and Cs''=Bs'''. This means
that at last a solution is found and reported as
a binding for the original variable Cs which
is the only variable that appears in the query. If you have
carefully followed this trace (as I am sure you have, since
it is so enjoyable to read), you know that Cs
was unified with [A'|Cs']. Since
A' was unified with x, and
Cs' was unified with [A''|Cs''], and
further A'' was unified with y, this
makes Cs the same as [x,y|Cs'']. As we
just mentioned, Cs'' was unified
with Bs''', and Bs'''
is [z]. Thus, the solution we found
is Cs=[x,y,z], and this solution is reported
by the toplevel.
- We still need to consider the second clause
too though: No, it does not apply,
because [] does not unify with [_|_].
And this was only
one particular case! Accurately
covering all possible modes of invocation with a procedural
reading is extremely complex, and typically would take an
extremely elaborate explanation. In general, you will not be
able to carry this approach through, because there are too many
cases to consider.
Program slicing
Program slicing is a simple and powerful technique that
uses very general properties of pure Prolog to study the effects
of generalizations and specializations of a program.
Examples of such properties are:
- removing a goal can make the program at
most more general, never more specific
- removing a clause can make the program at
most more specific, never more general
- inserting false/0 between any two goals in a
rule lets us ignore the procedural effects of all
goals after that point.
In a very precise sense, program slices are explanations
that answer why we observe certain phenomena.
We illustrate this with a simple example. Suppose a programmer has
written list_length/2, relating a list to its length as
follows:
list_length([_|Ls], N) :-
list_length(Ls, N0),
N #> 0,
N #= N0 + 1.
list_length([], 0).
The predicate works exactly as intended if the list is sufficiently
instantiated. For example:
?- list_length([], L).
L = 0.
?- list_length([_,_,_], L).
L = 3.
However, the predicate does not generate a single answer
for the most general query:
?- list_length(Ls, L).
Program slicing helps us to see the reason. Strikeout text
is used for parts that are not relevant for the behaviour we
observe:
list_length([_|Ls], N) :-
list_length(Ls, N0),
false,
N #> 0,
N #= N0 + 1.
list_length([], 0) :- false.
The remaining fragment is by itself already responsible for
the nontermination. No change
in the strikeout parts can prevent it.
Program slices can be generated automatically and are a
powerful way to locate the causes of
nontermination and other unintended properties in Prolog programs.
See for example Stefan Kral et al., Slicing zur
Fehlersuche in Logikprogrammen, WLP 2000.
More about Prolog
Main page