MRPT  1.9.9
mrpt::obs::CActionRobotMovement2D Class Reference

Detailed Description

Represents a probabilistic 2D movement of the robot mobile base.

See docs: https://www.mrpt.org/tutorials/programming/odometry-and-motion-models/probabilistic_motion_models/

Note
[New in MRPT 1.5.0] Velocity is now encoded as mrpt::math::TTwist2D as a more general version of the old (linVel, angVel).
See also
CAction

Definition at line 29 of file CActionRobotMovement2D.h.

#include <mrpt/obs/CActionRobotMovement2D.h>

Inheritance diagram for mrpt::obs::CActionRobotMovement2D:

Classes

struct  TMotionModelOptions
 The parameter to be passed to "computeFromOdometry". More...
 

Public Types

enum  TEstimationMethod { emOdometry = 0, emScan2DMatching }
 A list of posible ways for estimating the content of a CActionRobotMovement2D object. More...
 
enum  TDrawSampleMotionModel { mmGaussian = 0, mmThrun }
 

Public Member Functions

 CActionRobotMovement2D ()
 
double velocityLin () const
 
double velocityAng () const
 
void computeFromOdometry (const mrpt::poses::CPose2D &odometryIncrement, const TMotionModelOptions &options)
 Computes the PDF of the pose increment from an odometry reading and according to the given motion model (speed and encoder ticks information is not modified). More...
 
void computeFromEncoders (double K_left, double K_right, double D)
 If "hasEncodersInfo"=true, this method updates the pose estimation according to the ticks from both encoders and the passed parameters, which is passed internally to the method "computeFromOdometry" with the last used PDF options (or the defualt ones if not explicitly called by the user). More...
 
void drawSingleSample (mrpt::poses::CPose2D &outSample) const
 Using this method instead of "poseChange->drawSingleSample()" may be more efficient in most situations. More...
 
void prepareFastDrawSingleSamples () const
 Call this before calling a high number of times "fastDrawSingleSample", which is much faster than "drawSingleSample". More...
 
void fastDrawSingleSample (mrpt::poses::CPose2D &outSample) const
 Faster version than "drawSingleSample", but requires a previous call to "prepareFastDrawSingleSamples". More...
 
virtual mxArraywriteToMatlab () const
 Introduces a pure virtual method responsible for writing to a mxArray Matlab object, typically a MATLAB struct whose contents are documented in each derived class. More...
 
RTTI classes and functions for polymorphic hierarchies
mrpt::rtti::CObject::Ptr duplicateGetSmartPtr () const
 Makes a deep copy of the object and returns a smart pointer to it. More...
 

Public Attributes

mrpt::containers::deepcopy_poly_ptr< mrpt::poses::CPosePDF::PtrposeChange
 The 2D pose change probabilistic estimation. More...
 
mrpt::poses::CPose2D rawOdometryIncrementReading
 This is the raw odometry reading, and only is used when "estimationMethod" is "TEstimationMethod::emOdometry". More...
 
TEstimationMethod estimationMethod {emOdometry}
 This fields indicates the way in which this estimation was obtained. More...
 
bool hasEncodersInfo {false}
 If "true" means that "encoderLeftTicks" and "encoderRightTicks" contain valid values. More...
 
int32_t encoderLeftTicks {0}
 For odometry only: the ticks count for each wheel FROM the last reading (positive means FORWARD, for both wheels);. More...
 
int32_t encoderRightTicks {0}
 
bool hasVelocities {false}
 If "true" means that "velocityLin" and "velocityAng" contain valid values. More...
 
mrpt::math::TTwist2D velocityLocal {.0, .0, .0}
 If "hasVelocities"=true, the robot velocity in local (robot frame, +X forward) coordinates. More...
 
TMotionModelOptions motionModelConfiguration
 
mrpt::system::TTimeStamp timestamp {INVALID_TIMESTAMP}
 The associated time-stamp. More...
 

Protected Member Functions

void computeFromOdometry_modelGaussian (const mrpt::poses::CPose2D &odometryIncrement, const TMotionModelOptions &o)
 Computes the PDF of the pose increment from an odometry reading, using a Gaussian approximation as the motion model. More...
 
void computeFromOdometry_modelThrun (const mrpt::poses::CPose2D &odometryIncrement, const TMotionModelOptions &o)
 Computes the PDF of the pose increment from an odometry reading, using the motion model from Thrun's book. More...
 
void drawSingleSample_modelGaussian (mrpt::poses::CPose2D &outSample) const
 The sample generator for the model "computeFromOdometry_modelGaussian", internally called when the user invokes "drawSingleSample". More...
 
void drawSingleSample_modelThrun (mrpt::poses::CPose2D &outSample) const
 The sample generator for the model "computeFromOdometry_modelThrun", internally called when the user invokes "drawSingleSample". More...
 
void prepareFastDrawSingleSample_modelGaussian () const
 Internal use. More...
 
void prepareFastDrawSingleSample_modelThrun () const
 Internal use. More...
 
void fastDrawSingleSample_modelGaussian (mrpt::poses::CPose2D &outSample) const
 Internal use. More...
 
void fastDrawSingleSample_modelThrun (mrpt::poses::CPose2D &outSample) const
 Internal use. More...
 
CSerializable virtual methods
uint8_t serializeGetVersion () const override
 Must return the current versioning number of the object. More...
 
void serializeTo (mrpt::serialization::CArchive &out) const override
 Pure virtual method for writing (serializing) to an abstract archive. More...
 
void serializeFrom (mrpt::serialization::CArchive &in, uint8_t serial_version) override
 Pure virtual method for reading (deserializing) from an abstract archive. More...
 
CSerializable virtual methods
virtual void serializeTo (CSchemeArchiveBase &out) const
 Virtual method for writing (serializing) to an abstract schema based archive. More...
 
virtual void serializeFrom (CSchemeArchiveBase &in)
 Virtual method for reading (deserializing) from an abstract schema based archive. More...
 

Protected Attributes

mrpt::math::CMatrixDouble33 m_fastDrawGauss_Z
 Auxiliary matrix. More...
 
mrpt::poses::CPose2D m_fastDrawGauss_M
 

RTTI stuff

using Ptr = std::shared_ptr< CActionRobotMovement2D >
 
using ConstPtr = std::shared_ptr< const CActionRobotMovement2D >
 
using UniquePtr = std::unique_ptr< CActionRobotMovement2D >
 
using ConstUniquePtr = std::unique_ptr< const CActionRobotMovement2D >
 
static const mrpt::rtti::TRuntimeClassId runtimeClassId
 
static constexpr const char * className = "CActionRobotMovement2D"
 
static const mrpt::rtti::TRuntimeClassId_GetBaseClass ()
 
static constexpr auto getClassName ()
 
static const mrpt::rtti::TRuntimeClassIdGetRuntimeClassIdStatic ()
 
static std::shared_ptr< CObjectCreateObject ()
 
template<typename... Args>
static Ptr Create (Args &&... args)
 
template<typename Alloc , typename... Args>
static Ptr CreateAlloc (const Alloc &alloc, Args &&... args)
 
template<typename... Args>
static UniquePtr CreateUnique (Args &&... args)
 
virtual const mrpt::rtti::TRuntimeClassIdGetRuntimeClass () const override
 Returns information about the class of an object in runtime. More...
 
virtual mrpt::rtti::CObjectclone () const override
 Returns a deep copy (clone) of the object, indepently of its class. More...
 

Member Typedef Documentation

◆ ConstPtr

◆ ConstUniquePtr

Definition at line 31 of file CActionRobotMovement2D.h.

◆ Ptr

A type for the associated smart pointer

Definition at line 31 of file CActionRobotMovement2D.h.

◆ UniquePtr

Member Enumeration Documentation

◆ TDrawSampleMotionModel

Enumerator
mmGaussian 
mmThrun 

Definition at line 71 of file CActionRobotMovement2D.h.

◆ TEstimationMethod

A list of posible ways for estimating the content of a CActionRobotMovement2D object.

Enumerator
emOdometry 
emScan2DMatching 

Definition at line 37 of file CActionRobotMovement2D.h.

Constructor & Destructor Documentation

◆ CActionRobotMovement2D()

CActionRobotMovement2D::CActionRobotMovement2D ( )

Definition at line 32 of file CActionRobotMovement2D.cpp.

Member Function Documentation

◆ _GetBaseClass()

static const mrpt::rtti::TRuntimeClassId* mrpt::obs::CActionRobotMovement2D::_GetBaseClass ( )
staticprotected

◆ clone()

virtual mrpt::rtti::CObject* mrpt::obs::CActionRobotMovement2D::clone ( ) const
overridevirtual

Returns a deep copy (clone) of the object, indepently of its class.

Implements mrpt::rtti::CObject.

◆ computeFromEncoders()

void CActionRobotMovement2D::computeFromEncoders ( double  K_left,
double  K_right,
double  D 
)

If "hasEncodersInfo"=true, this method updates the pose estimation according to the ticks from both encoders and the passed parameters, which is passed internally to the method "computeFromOdometry" with the last used PDF options (or the defualt ones if not explicitly called by the user).

Parameters
K_leftThe meters / tick ratio for the left encoder.
K_rightThe meters / tick ratio for the right encoder.
DThe distance between both wheels, in meters.

Definition at line 354 of file CActionRobotMovement2D.cpp.

References R.

◆ computeFromOdometry()

void CActionRobotMovement2D::computeFromOdometry ( const mrpt::poses::CPose2D odometryIncrement,
const TMotionModelOptions options 
)

Computes the PDF of the pose increment from an odometry reading and according to the given motion model (speed and encoder ticks information is not modified).

According to the parameters in the passed struct, it will be called one the private sampling functions (see "see also" next).

See also
computeFromOdometry_modelGaussian, computeFromOdometry_modelThrun

Definition at line 385 of file CActionRobotMovement2D.cpp.

References mrpt::obs::CActionRobotMovement2D::TMotionModelOptions::modelSelection.

Referenced by mrpt::slam::PF_implementation< mrpt::math::TPose3D, CMonteCarloLocalization3D, mrpt::bayes::particle_storage_mode::VALUE >::PF_SLAM_implementation_gatherActionsCheckBothActObs(), mrpt::hmtslam::CLSLAM_RBPF_2DLASER::prediction_and_update_pfAuxiliaryPFOptimal(), and mrpt::slam::CMetricMapBuilderRBPF::processActionObservation().

Here is the caller graph for this function:

◆ computeFromOdometry_modelGaussian()

◆ computeFromOdometry_modelThrun()

◆ Create()

template<typename... Args>
static Ptr mrpt::obs::CActionRobotMovement2D::Create ( Args &&...  args)
inlinestatic

Definition at line 31 of file CActionRobotMovement2D.h.

◆ CreateAlloc()

template<typename Alloc , typename... Args>
static Ptr mrpt::obs::CActionRobotMovement2D::CreateAlloc ( const Alloc &  alloc,
Args &&...  args 
)
inlinestatic

Definition at line 31 of file CActionRobotMovement2D.h.

◆ CreateObject()

static std::shared_ptr<CObject> mrpt::obs::CActionRobotMovement2D::CreateObject ( )
static

◆ CreateUnique()

template<typename... Args>
static UniquePtr mrpt::obs::CActionRobotMovement2D::CreateUnique ( Args &&...  args)
inlinestatic

Definition at line 31 of file CActionRobotMovement2D.h.

◆ drawSingleSample()

void CActionRobotMovement2D::drawSingleSample ( mrpt::poses::CPose2D outSample) const

Using this method instead of "poseChange->drawSingleSample()" may be more efficient in most situations.

See also
CPosePDF::drawSingleSample

Definition at line 518 of file CActionRobotMovement2D.cpp.

◆ drawSingleSample_modelGaussian()

void CActionRobotMovement2D::drawSingleSample_modelGaussian ( mrpt::poses::CPose2D outSample) const
protected

The sample generator for the model "computeFromOdometry_modelGaussian", internally called when the user invokes "drawSingleSample".

Definition at line 539 of file CActionRobotMovement2D.cpp.

◆ drawSingleSample_modelThrun()

void CActionRobotMovement2D::drawSingleSample_modelThrun ( mrpt::poses::CPose2D outSample) const
protected

The sample generator for the model "computeFromOdometry_modelThrun", internally called when the user invokes "drawSingleSample".

Definition at line 550 of file CActionRobotMovement2D.cpp.

References mrpt::random::CRandomGenerator::drawGaussian1D_normalized(), mrpt::random::getRandomGenerator(), mrpt::poses::CPose2D::normalizePhi(), mrpt::poses::CPose2D::phi(), mrpt::math::wrapToPi(), mrpt::poses::CPoseOrPoint< DERIVEDCLASS, DIM >::x(), and mrpt::poses::CPoseOrPoint< DERIVEDCLASS, DIM >::y().

Here is the call graph for this function:

◆ duplicateGetSmartPtr()

mrpt::rtti::CObject::Ptr CObject::duplicateGetSmartPtr ( ) const
inlineinherited

Makes a deep copy of the object and returns a smart pointer to it.

Definition at line 191 of file CObject.h.

References mrpt::rtti::CObject::clone().

Referenced by mrpt::obs::CRawlog::addActions(), and mrpt::obs::CRawlog::addObservations().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fastDrawSingleSample()

void CActionRobotMovement2D::fastDrawSingleSample ( mrpt::poses::CPose2D outSample) const

Faster version than "drawSingleSample", but requires a previous call to "prepareFastDrawSingleSamples".

Definition at line 622 of file CActionRobotMovement2D.cpp.

Referenced by mrpt::hmtslam::CLSLAM_RBPF_2DLASER::prediction_and_update_pfAuxiliaryPFOptimal().

Here is the caller graph for this function:

◆ fastDrawSingleSample_modelGaussian()

void CActionRobotMovement2D::fastDrawSingleSample_modelGaussian ( mrpt::poses::CPose2D outSample) const
protected

Internal use.

Definition at line 679 of file CActionRobotMovement2D.cpp.

References mrpt::math::MatrixVectorBase< Scalar, Derived >::assign(), mrpt::random::CRandomGenerator::drawGaussian1D_normalized(), and mrpt::random::getRandomGenerator().

Here is the call graph for this function:

◆ fastDrawSingleSample_modelThrun()

void CActionRobotMovement2D::fastDrawSingleSample_modelThrun ( mrpt::poses::CPose2D outSample) const
protected

Internal use.

Definition at line 700 of file CActionRobotMovement2D.cpp.

◆ getClassName()

static constexpr auto mrpt::obs::CActionRobotMovement2D::getClassName ( )
inlinestatic

Definition at line 31 of file CActionRobotMovement2D.h.

◆ GetRuntimeClass()

virtual const mrpt::rtti::TRuntimeClassId* mrpt::obs::CActionRobotMovement2D::GetRuntimeClass ( ) const
overridevirtual

Returns information about the class of an object in runtime.

Reimplemented from mrpt::obs::CAction.

◆ GetRuntimeClassIdStatic()

static const mrpt::rtti::TRuntimeClassId& mrpt::obs::CActionRobotMovement2D::GetRuntimeClassIdStatic ( )
static

◆ prepareFastDrawSingleSample_modelGaussian()

void CActionRobotMovement2D::prepareFastDrawSingleSample_modelGaussian ( ) const
protected

Internal use.

Computes the eigenvalues/eigenvector decomposition of this matrix, so that: M = Z · D · ZT, where columns in Z are the eigenvectors and the diagonal matrix D contains the eigenvalues as diagonal elements, sorted in ascending order.

Definition at line 643 of file CActionRobotMovement2D.cpp.

References mrpt::math::MatrixVectorBase< Scalar, Derived >::array(), mrpt::math::CMatrixFixed< T, ROWS, COLS >::asEigen(), ASSERT_, mrpt::math::cov(), mrpt::math::MatrixBase< Scalar, Derived >::eig_symmetric(), IS_CLASS, MRPT_END, MRPT_START, and mrpt::math::MatrixBase< Scalar, Derived >::setDiagonal().

Here is the call graph for this function:

◆ prepareFastDrawSingleSample_modelThrun()

void CActionRobotMovement2D::prepareFastDrawSingleSample_modelThrun ( ) const
protected

Internal use.

Definition at line 675 of file CActionRobotMovement2D.cpp.

◆ prepareFastDrawSingleSamples()

void CActionRobotMovement2D::prepareFastDrawSingleSamples ( ) const

Call this before calling a high number of times "fastDrawSingleSample", which is much faster than "drawSingleSample".

Definition at line 606 of file CActionRobotMovement2D.cpp.

Referenced by mrpt::hmtslam::CLSLAM_RBPF_2DLASER::prediction_and_update_pfAuxiliaryPFOptimal().

Here is the caller graph for this function:

◆ serializeFrom() [1/2]

void CActionRobotMovement2D::serializeFrom ( mrpt::serialization::CArchive in,
uint8_t  serial_version 
)
overrideprotectedvirtual

Pure virtual method for reading (deserializing) from an abstract archive.

Users don't call this method directly. Instead, use stream >> object;.

Parameters
inThe input binary stream where the object data must read from.
versionThe version of the object stored in the stream: use this version number in your code to know how to read the incoming data.
Exceptions
std::exceptionOn any I/O error

Implements mrpt::serialization::CSerializable.

Definition at line 85 of file CActionRobotMovement2D.cpp.

References INVALID_TIMESTAMP, and MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION.

◆ serializeFrom() [2/2]

virtual void mrpt::serialization::CSerializable::serializeFrom ( CSchemeArchiveBase in)
inlineprotectedvirtualinherited

Virtual method for reading (deserializing) from an abstract schema based archive.

Definition at line 74 of file CSerializable.h.

References mrpt::serialization::CSerializable::GetRuntimeClass(), and THROW_EXCEPTION.

Here is the call graph for this function:

◆ serializeGetVersion()

uint8_t CActionRobotMovement2D::serializeGetVersion ( ) const
overrideprotectedvirtual

Must return the current versioning number of the object.

Start in zero for new classes, and increments each time there is a change in the stored format.

Implements mrpt::serialization::CSerializable.

Definition at line 37 of file CActionRobotMovement2D.cpp.

◆ serializeTo() [1/2]

void CActionRobotMovement2D::serializeTo ( mrpt::serialization::CArchive out) const
overrideprotectedvirtual

Pure virtual method for writing (serializing) to an abstract archive.

Users don't call this method directly. Instead, use stream << object;.

Exceptions
std::exceptionOn any I/O error

Implements mrpt::serialization::CSerializable.

Definition at line 38 of file CActionRobotMovement2D.cpp.

References mrpt::serialization::CArchive::WriteAs().

Here is the call graph for this function:

◆ serializeTo() [2/2]

virtual void mrpt::serialization::CSerializable::serializeTo ( CSchemeArchiveBase out) const
inlineprotectedvirtualinherited

Virtual method for writing (serializing) to an abstract schema based archive.

Definition at line 64 of file CSerializable.h.

References mrpt::serialization::CSerializable::GetRuntimeClass(), and THROW_EXCEPTION.

Here is the call graph for this function:

◆ velocityAng()

double mrpt::obs::CActionRobotMovement2D::velocityAng ( ) const
inline

Definition at line 70 of file CActionRobotMovement2D.h.

References mrpt::math::TTwist2D::omega, and velocityLocal.

◆ velocityLin()

double mrpt::obs::CActionRobotMovement2D::velocityLin ( ) const
inline

Definition at line 69 of file CActionRobotMovement2D.h.

References velocityLocal, and mrpt::math::TTwist2D::vx.

◆ writeToMatlab()

virtual mxArray* mrpt::serialization::CSerializable::writeToMatlab ( ) const
inlinevirtualinherited

Introduces a pure virtual method responsible for writing to a mxArray Matlab object, typically a MATLAB struct whose contents are documented in each derived class.

Returns
A new mxArray (caller is responsible of memory freeing) or nullptr is class does not support conversion to MATLAB.

Definition at line 90 of file CSerializable.h.

Member Data Documentation

◆ className

constexpr const char* mrpt::obs::CActionRobotMovement2D::className = "CActionRobotMovement2D"
static

Definition at line 31 of file CActionRobotMovement2D.h.

◆ encoderLeftTicks

int32_t mrpt::obs::CActionRobotMovement2D::encoderLeftTicks {0}

For odometry only: the ticks count for each wheel FROM the last reading (positive means FORWARD, for both wheels);.

See also
hasEncodersInfo

Definition at line 60 of file CActionRobotMovement2D.h.

◆ encoderRightTicks

int32_t mrpt::obs::CActionRobotMovement2D::encoderRightTicks {0}

Definition at line 60 of file CActionRobotMovement2D.h.

◆ estimationMethod

TEstimationMethod mrpt::obs::CActionRobotMovement2D::estimationMethod {emOdometry}

This fields indicates the way in which this estimation was obtained.

Definition at line 51 of file CActionRobotMovement2D.h.

◆ hasEncodersInfo

bool mrpt::obs::CActionRobotMovement2D::hasEncodersInfo {false}

If "true" means that "encoderLeftTicks" and "encoderRightTicks" contain valid values.

Definition at line 55 of file CActionRobotMovement2D.h.

◆ hasVelocities

bool mrpt::obs::CActionRobotMovement2D::hasVelocities {false}

If "true" means that "velocityLin" and "velocityAng" contain valid values.

Definition at line 64 of file CActionRobotMovement2D.h.

◆ m_fastDrawGauss_M

mrpt::poses::CPose2D mrpt::obs::CActionRobotMovement2D::m_fastDrawGauss_M
mutableprotected

Definition at line 236 of file CActionRobotMovement2D.h.

◆ m_fastDrawGauss_Z

mrpt::math::CMatrixDouble33 mrpt::obs::CActionRobotMovement2D::m_fastDrawGauss_Z
mutableprotected

Auxiliary matrix.

Definition at line 235 of file CActionRobotMovement2D.h.

◆ motionModelConfiguration

◆ poseChange

◆ rawOdometryIncrementReading

mrpt::poses::CPose2D mrpt::obs::CActionRobotMovement2D::rawOdometryIncrementReading

This is the raw odometry reading, and only is used when "estimationMethod" is "TEstimationMethod::emOdometry".

Definition at line 49 of file CActionRobotMovement2D.h.

Referenced by mrpt::hmtslam::CLSLAM_RBPF_2DLASER::prediction_and_update_pfAuxiliaryPFOptimal(), and mrpt::hmtslam::CLSLAM_RBPF_2DLASER::prediction_and_update_pfOptimalProposal().

◆ runtimeClassId

const mrpt::rtti::TRuntimeClassId mrpt::obs::CActionRobotMovement2D::runtimeClassId
staticprotected

Definition at line 31 of file CActionRobotMovement2D.h.

◆ timestamp

mrpt::system::TTimeStamp mrpt::obs::CAction::timestamp {INVALID_TIMESTAMP}
inherited

The associated time-stamp.

Definition at line 33 of file CAction.h.

Referenced by mrpt::slam::CMetricMapBuilderRBPF::processActionObservation().

◆ velocityLocal

mrpt::math::TTwist2D mrpt::obs::CActionRobotMovement2D::velocityLocal {.0, .0, .0}

If "hasVelocities"=true, the robot velocity in local (robot frame, +X forward) coordinates.

Definition at line 67 of file CActionRobotMovement2D.h.

Referenced by velocityAng(), and velocityLin().




Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 765b969e7 Sun Sep 22 19:55:28 2019 +0200 at dom sep 22 20:00:14 CEST 2019