class mrpt::poses::CPose3DQuatPDF

Declares a class that represents a Probability Density Function (PDF) of a 3D pose (6D actually), by means of a 7-vector with a translation [x y z] and a quaternion [qr qx qy qz].

This class is just the base class for unifying many diferent ways this PDF can be implemented.

For convenience, a pose composition is also defined for any PDF derived class, changeCoordinatesReference, in the form of a method rather than an operator.

  • For a similar class for 3D points (without attitude), see CPointPDF.

  • For a similar class for 3D poses (with Euler angles instead of quaternions), see CPose3DPDF.

See also the tutorial on probabilistic spatial representations in the MRPT.

See also:

CPose3DQuatPDF, CPose3DPDF

#include <mrpt/poses/CPose3DQuatPDF.h>

class CPose3DQuatPDF:
    public mrpt::serialization::CSerializable,
    public mrpt::math::CProbabilityDensityFunction
{
public:
    //
methods

    virtual void copyFrom(const CPose3DQuatPDF& o) = 0;
    virtual void inverse(CPose3DQuatPDF& o) const = 0;
    virtual void changeCoordinatesReference(const CPose3D& newReferenceBase) = 0;

    template <class OPENGL_SETOFOBJECTSPTR>
    void getAs3DObject(OPENGL_SETOFOBJECTSPTR& out_obj) const;

    template <class OPENGL_SETOFOBJECTSPTR>
    OPENGL_SETOFOBJECTSPTR getAs3DObject() const;

    static CPose3DQuatPDF* createFrom2D(const CPosePDF& o);
    static void jacobiansPoseComposition(const CPose3DQuat& x, const CPose3DQuat& u, mrpt::math::CMatrixDouble77& df_dx, mrpt::math::CMatrixDouble77& df_du, CPose3DQuat* out_x_oplus_u = nullptr);
};

// direct descendants

class CPose3DQuatPDFGaussian;
class CPose3DQuatPDFGaussianInf;

Inherited Members

public:
    // typedefs

    typedef CProbabilityDensityFunction<TDATA, STATE_LEN> self_t;

Methods

virtual void copyFrom(const CPose3DQuatPDF& o) = 0

Copy operator, translating if necesary (for example, between particles and gaussian representations)

See also:

createFrom2D

virtual void inverse(CPose3DQuatPDF& o) const = 0

Returns a new PDF such as: NEW_PDF = (0,0,0) - THIS_PDF.

template <class OPENGL_SETOFOBJECTSPTR>
void getAs3DObject(OPENGL_SETOFOBJECTSPTR& out_obj) const

Returns a 3D representation of this PDF (it doesn’t clear the current contents of out_obj, but append new OpenGL objects to that list)

Needs the mrpt-opengl library, and using mrpt::opengl::CSetOfObjects::Ptr as template argument.

By default, ellipsoids for the confidence intervals of “q=3” are drawn; for more mathematical details, see CGeneralizedEllipsoidTemplate::setQuantiles()

template <class OPENGL_SETOFOBJECTSPTR>
OPENGL_SETOFOBJECTSPTR getAs3DObject() const

Returns a 3D representation of this PDF.

Needs the mrpt-opengl library, and using mrpt::opengl::CSetOfObjects::Ptr as template argument.

static CPose3DQuatPDF* createFrom2D(const CPosePDF& o)

This is a static transformation method from 2D poses to 3D PDFs, preserving the representation type (particles->particles, Gaussians->Gaussians,etc) It returns a new object of any of the derived classes of CPose3DQuatPDF.

This object must be deleted by the user when not required anymore.

See also:

copyFrom

static void jacobiansPoseComposition(
    const CPose3DQuat& x,
    const CPose3DQuat& u,
    mrpt::math::CMatrixDouble77& df_dx,
    mrpt::math::CMatrixDouble77& df_du,
    CPose3DQuat* out_x_oplus_u = nullptr
    )

This static method computes the two Jacobians of a pose composition operation $f(x,u)= x u$.

Parameters:

out_x_oplus_u

If set to !=nullptr, the result of “x+u” will be stored here (it will be computed internally anyway). To see the mathematical derivation of the formulas, refer to the technical report here: