Main MRPT website > C++ reference
MRPT logo
Public Types | Static Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes

mrpt::poses::CPose3D Class Reference


Detailed Description

A class used to store a 3D pose (a 3D translation + a rotation in 3D).

The 6D transformation in SE(3) stored in this class is kept in two separate containers: a 3-array for the translation, and a 3x3 rotation matrix.

The 6D pose is parameterized as a 6-vector: [x y z yaw pitch roll]. Note however, that the yaw/pitch/roll angles are only computed (on-demand and transparently) when the user requests them. Normally, rotations are handled via the 3x3 rotation matrix only.

For a complete descriptionan of Points/Poses, see mrpt::poses::CPoseOrPoint, or refer to the 2D/3D Geometry tutorial in the wiki.

To change the individual components of the pose, use CPose3D::setFromValues. This class assures that the internal 3x3 rotation matrix is always up-to-date with the "yaw pitch roll" members.

Rotations in 3D can be also represented by quaternions. See mrpt::math::CQuaternion, and method CPose3D::getAsQuaternion.

This class and CPose3DQuat are very similar, and they can be converted to the each other automatically via transformation constructors.

There are Lie algebra methods: exp and ln (see the methods for documentation).

CPose3D.gif
See also:
CPoseOrPoint,CPoint3D, mrpt::math::CQuaternion

Definition at line 71 of file CPose3D.h.

#include <mrpt/poses/CPose3D.h>

Inheritance diagram for mrpt::poses::CPose3D:
Inheritance graph
[legend]

List of all members.

Public Types

enum  { is_3D_val = 1 }
enum  { rotation_dimensions = 3 }
enum  { is_PDF_val = 0 }
typedef CPose3D type_value
 Used to emulate CPosePDF types, for example, in CNetworkOfPoses.

Public Member Functions

Constructors
 CPose3D ()
 Default constructor, with all the coordinates set to zero.
 CPose3D (const double x, const double y, const double z, const double yaw=0, const double pitch=0, const double roll=0)
 Constructor with initilization of the pose; (remember that angles are always given in radians!)
 CPose3D (const math::CMatrixDouble &m)
 Constructor from a 4x4 homogeneous matrix - the passed matrix can be actually of any size larger than or equal 3x4, since only those first values are used (the last row of a homogeneous 4x4 matrix are always fixed).
 CPose3D (const math::CMatrixDouble44 &m)
 Constructor from a 4x4 homogeneous matrix:
template<class MATRIX33 , class VECTOR3 >
 CPose3D (const MATRIX33 &rot, const VECTOR3 &xyz)
 Constructor from a 3x3 rotation matrix and a the translation given as a 3-vector, a 3-array, a CPoint3D or a TPoint3D.
 CPose3D (const CMatrixDouble33 &rot, const CArrayDouble< 3 > &xyz)
 CPose3D (const CPose2D &)
 Constructor from a CPose2D object.
 CPose3D (const CPoint3D &)
 Constructor from a CPoint3D object.
 CPose3D (const mrpt::math::TPose3D &)
 Constructor from lightweight object.
 CPose3D (const mrpt::math::CQuaternionDouble &q, const double x, const double y, const double z)
 Constructor from a quaternion (which only represents the 3D rotation part) and a 3D displacement.
 CPose3D (const CPose3DQuat &)
 Constructor from a CPose3DQuat.
 CPose3D (TConstructorFlags_Poses constructor_dummy_param)
 Fast constructor that leaves all the data uninitialized - call with UNINITIALIZED_POSE as argument.
 CPose3D (const CArrayDouble< 12 > &vec12)
 Constructor from an array with these 12 elements: [r11 r21 r31 r12 r22 r32 r13 r23 r33 tx ty tz] where r{ij} are the entries of the 3x3 rotation matrix and t{x,y,z} are the 3D translation of the pose.
Access 3x3 rotation and 4x4 homogeneous matrices
void getHomogeneousMatrix (CMatrixDouble44 &out_HM) const
 Returns the corresponding 4x4 homogeneous transformation matrix for the point(translation) or pose (translation+orientation).
CMatrixDouble44 getHomogeneousMatrixVal () const
 Returns the corresponding 4x4 homogeneous transformation matrix for the point(translation) or pose (translation+orientation).
void getRotationMatrix (mrpt::math::CMatrixDouble33 &ROT) const
 Get the 3x3 rotation matrix.
const mrpt::math::CMatrixDouble33getRotationMatrix () const
Pose-pose and pose-point compositions and operators
CPose3D operator+ (const CPose3D &b) const
 The operator $ a \oplus b $ is the pose compounding operator.
CPoint3D operator+ (const CPoint3D &b) const
 The operator $ a \oplus b $ is the pose compounding operator.
CPoint3D operator+ (const CPoint2D &b) const
 The operator $ a \oplus b $ is the pose compounding operator.
void sphericalCoordinates (const TPoint3D &point, double &out_range, double &out_yaw, double &out_pitch) const
 Computes the spherical coordinates of a 3D point as seen from the 6D pose specified by this object.
void composePoint (double lx, double ly, double lz, double &gx, double &gy, double &gz, mrpt::math::CMatrixFixedNumeric< double, 3, 3 > *out_jacobian_df_dpoint=NULL, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dpose=NULL, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dse3=NULL, bool use_small_rot_approx=false) const
 An alternative, slightly more efficient way of doing $ G = P \oplus L $ with G and L being 3D points and P this 6D pose.
void composePoint (const TPoint3D local_point, TPoint3D &global_point) const
 An alternative, slightly more efficient way of doing $ G = P \oplus L $ with G and L being 3D points and P this 6D pose.
void composePoint (double lx, double ly, double lz, float &gx, float &gy, float &gz) const
 An alternative, slightly more efficient way of doing $ G = P \oplus L $ with G and L being 3D points and P this 6D pose.
void inverseComposePoint (const double gx, const double gy, const double gz, double &lx, double &ly, double &lz, mrpt::math::CMatrixFixedNumeric< double, 3, 3 > *out_jacobian_df_dpoint=NULL, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dpose=NULL, mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *out_jacobian_df_dse3=NULL) const
 Computes the 3D point L such as $ L = G \ominus this $.
void composeFrom (const CPose3D &A, const CPose3D &B)
 Makes "this = A (+) B"; this method is slightly more efficient than "this= A + B;" since it avoids the temporary object.
CPose3Doperator+= (const CPose3D &b)
 Make $ this = this \oplus b $ (b can be "this" without problems)
void inverseComposeFrom (const CPose3D &A, const CPose3D &B)
 Makes $ this = A \ominus B $ this method is slightly more efficient than "this= A - B;" since it avoids the temporary object.
CPose3D operator- (const CPose3D &b) const
 Compute $ RET = this \oplus b $.
void inverse ()
 Convert this pose into its inverse, saving the result in itself.
void changeCoordinatesReference (const CPose3D &p)
 makes: this = p (+) this
Access and modify contents
void addComponents (const CPose3D &p)
 Scalar sum of all 6 components: This is diferent from poses composition, which is implemented as "+" operators.
void normalizeAngles ()
 Rebuild the internal matrix & update the yaw/pitch/roll angles within the ]-PI,PI] range (Must be called after using addComponents)
void operator*= (const double s)
 Scalar multiplication of x,y,z,yaw,pitch & roll (angles will be wrapped to the ]-pi,pi] interval).
void setFromValues (const double x0, const double y0, const double z0, const double yaw=0, const double pitch=0, const double roll=0)
 Set the pose from a 3D position (meters) and yaw/pitch/roll angles (radians) - This method recomputes the internal rotation matrix.
template<typename VECTORLIKE >
void setFromXYZQ (const VECTORLIKE &v, const size_t index_offset=0)
 Set the pose from a 3D position (meters) and a quaternion, stored as [x y z qr qx qy qz] in a 7-element vector.
void setYawPitchRoll (const double yaw_, const double pitch_, const double roll_)
 Set the 3 angles of the 3D pose (in radians) - This method recomputes the internal rotation coordinates matrix.
template<class ARRAYORVECTOR >
void setFrom12Vector (const ARRAYORVECTOR &vec12)
 Set pose from an array with these 12 elements: [r11 r21 r31 r12 r22 r32 r13 r23 r33 tx ty tz] where r{ij} are the entries of the 3x3 rotation matrix and t{x,y,z} are the 3D translation of the pose.
template<class ARRAYORVECTOR >
void getAs12Vector (ARRAYORVECTOR &vec12) const
 Get the pose representation as an array with these 12 elements: [r11 r21 r31 r12 r22 r32 r13 r23 r33 tx ty tz] where r{ij} are the entries of the 3x3 rotation matrix and t{x,y,z} are the 3D translation of the pose.
void getYawPitchRoll (double &yaw, double &pitch, double &roll) const
 Returns the three angles (yaw, pitch, roll), in radians, from the rotation matrix.
double yaw () const
 Get the YAW angle (in radians)
double pitch () const
 Get the PITCH angle (in radians)
double roll () const
 Get the ROLL angle (in radians)
void getAsVector (vector_double &v) const
 Returns a 1x6 vector with [x y z yaw pitch roll].
void getAsQuaternion (mrpt::math::CQuaternionDouble &q, mrpt::math::CMatrixFixedNumeric< double, 4, 3 > *out_dq_dr=NULL) const
 Returns the quaternion associated to the rotation of this object (NOTE: XYZ translation is ignored)

\[ \mathbf{q} = \left( \begin{array}{c} \cos (\phi /2) \cos (\theta /2) \cos (\psi /2) + \sin (\phi /2) \sin (\theta /2) \sin (\psi /2) \\ \sin (\phi /2) \cos (\theta /2) \cos (\psi /2) - \cos (\phi /2) \sin (\theta /2) \sin (\psi /2) \\ \cos (\phi /2) \sin (\theta /2) \cos (\psi /2) + \sin (\phi /2) \cos (\theta /2) \sin (\psi /2) \\ \cos (\phi /2) \cos (\theta /2) \sin (\psi /2) - \sin (\phi /2) \sin (\theta /2) \cos (\psi /2) \\ \end{array}\right) \]

With : $ \phi = roll $, $ \theta = pitch $ and $ \psi = yaw $.

const double & operator[] (unsigned int i) const
void asString (std::string &s) const
 Returns a human-readable textual representation of the object (eg: "[x y z yaw pitch roll]", angles in degrees.)
std::string asString () const
void fromString (const std::string &s)
 Set the current object value from a string generated by 'asString' (eg: "[x y z yaw pitch roll]", angles in deg.
bool isHorizontal (const double tolerance=0) const
 Return true if the 6D pose represents a Z axis almost exactly vertical (upwards or downwards), with a given tolerance (if set to 0 exact horizontality is tested).
double distanceEuclidean6D (const CPose3D &o) const
 The euclidean distance between two poses taken as two 6-length vectors (angles in radians).

Static Public Member Functions

static bool is_3D ()
static bool is_PDF ()

Public Attributes

CArrayDouble< 3 > m_coords
 The translation vector [x,y,z].
CMatrixDouble33 m_ROT
 The 3x3 rotation matrix.

Protected Member Functions

void rebuildRotationMatrix ()
 Rebuild the homog matrix from the angles.
void updateYawPitchRoll () const
 Updates Yaw/pitch/roll members from the m_ROT.

Protected Attributes

bool m_ypr_uptodate
 Whether yaw/pitch/roll members are up-to-date since the last rotation matrix update.
double m_yaw
double m_pitch
double m_roll
 These variables are updated every time that the object rotation matrix is modified (construction, loading from values, pose composition, etc )

RTTI stuff

typedef CPose3DPtr SmartPtr
static mrpt::utils::CLASSINIT _init_CPose3D
static mrpt::utils::TRuntimeClassId classCPose3D
static const
mrpt::utils::TRuntimeClassId
classinfo
static const
mrpt::utils::TRuntimeClassId
_GetBaseClass ()
virtual const
mrpt::utils::TRuntimeClassId
GetRuntimeClass () const
 Returns information about the class of an object in runtime.
virtual mrpt::utils::CObjectduplicate () const
 Returns a copy of the object, indepently of its class.
static mrpt::utils::CObjectCreateObject ()
static CPose3DPtr Create ()

Lie Algebra methods

void ln (mrpt::math::CArrayDouble< 6 > &out_ln) const
 Take the logarithm of the 3x4 matrix defined by this pose, generating the corresponding vector in the SE(3) Lie Algebra.
mrpt::math::CArrayDouble< 6 > ln () const
void ln_jacob (mrpt::math::CMatrixFixedNumeric< double, 6, 12 > &J) const
 Jacobian of the logarithm of the 3x4 matrix defined by this pose.
CArrayDouble< 3 > ln_rotation () const
 Take the logarithm of the 3x3 rotation matrix, generating the corresponding vector in the Lie Algebra.
static CPose3D exp (const mrpt::math::CArrayNumeric< double, 6 > &vect)
 Exponentiate a Vector in the SE(3) Lie Algebra to generate a new CPose3D (static method).
static CMatrixDouble33 exp_rotation (const mrpt::math::CArrayNumeric< double, 3 > &vect)
 Exponentiate a vector in the Lie algebra to generate a new SO(3) (a 3x3 rotation matrix).
static void ln_rot_jacob (const CMatrixDouble33 &R, CMatrixFixedNumeric< double, 3, 9 > &M)
 Static function to compute the Jacobian of the SO(3) Logarithm function, evaluated at a given 3x3 rotation matrix R.

STL-like methods and typedefs

enum  { static_size = 6 }
typedef double value_type
 The type of the elements.
typedef double & reference
typedef const double & const_reference
typedef std::size_t size_type
typedef std::ptrdiff_t difference_type
static size_type size ()
static bool empty ()
static size_type max_size ()
static void resize (const size_t n)

Member Typedef Documentation

Definition at line 475 of file CPose3D.h.

typedef std::ptrdiff_t mrpt::poses::CPose3D::difference_type

Definition at line 477 of file CPose3D.h.

Definition at line 474 of file CPose3D.h.

typedef std::size_t mrpt::poses::CPose3D::size_type

Definition at line 476 of file CPose3D.h.

A typedef for the associated smart pointer

Definition at line 74 of file CPose3D.h.

Used to emulate CPosePDF types, for example, in CNetworkOfPoses.

Definition at line 464 of file CPose3D.h.

The type of the elements.

Definition at line 473 of file CPose3D.h.


Member Enumeration Documentation

anonymous enum
Enumerator:
is_3D_val 

Definition at line 465 of file CPose3D.h.

anonymous enum
Enumerator:
rotation_dimensions 

Definition at line 467 of file CPose3D.h.

anonymous enum
Enumerator:
is_PDF_val 

Definition at line 468 of file CPose3D.h.

anonymous enum
Enumerator:
static_size 

Definition at line 481 of file CPose3D.h.


Constructor & Destructor Documentation

mrpt::poses::CPose3D::CPose3D ( )

Default constructor, with all the coordinates set to zero.

mrpt::poses::CPose3D::CPose3D ( const double  x,
const double  y,
const double  z,
const double  yaw = 0,
const double  pitch = 0,
const double  roll = 0 
)

Constructor with initilization of the pose; (remember that angles are always given in radians!)

mrpt::poses::CPose3D::CPose3D ( const math::CMatrixDouble m) [explicit]

Constructor from a 4x4 homogeneous matrix - the passed matrix can be actually of any size larger than or equal 3x4, since only those first values are used (the last row of a homogeneous 4x4 matrix are always fixed).

mrpt::poses::CPose3D::CPose3D ( const math::CMatrixDouble44 m) [explicit]

Constructor from a 4x4 homogeneous matrix:

template<class MATRIX33 , class VECTOR3 >
mrpt::poses::CPose3D::CPose3D ( const MATRIX33 &  rot,
const VECTOR3 &  xyz 
) [inline]

Constructor from a 3x3 rotation matrix and a the translation given as a 3-vector, a 3-array, a CPoint3D or a TPoint3D.

Definition at line 108 of file CPose3D.h.

References ASSERT_EQUAL_, and mrpt::math::size().

mrpt::poses::CPose3D::CPose3D ( const CMatrixDouble33 rot,
const CArrayDouble< 3 > &  xyz 
) [inline]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 117 of file CPose3D.h.

mrpt::poses::CPose3D::CPose3D ( const CPose2D )

Constructor from a CPose2D object.

mrpt::poses::CPose3D::CPose3D ( const CPoint3D )

Constructor from a CPoint3D object.

mrpt::poses::CPose3D::CPose3D ( const mrpt::math::TPose3D )

Constructor from lightweight object.

mrpt::poses::CPose3D::CPose3D ( const mrpt::math::CQuaternionDouble q,
const double  x,
const double  y,
const double  z 
)

Constructor from a quaternion (which only represents the 3D rotation part) and a 3D displacement.

mrpt::poses::CPose3D::CPose3D ( const CPose3DQuat )

Constructor from a CPose3DQuat.

mrpt::poses::CPose3D::CPose3D ( TConstructorFlags_Poses  constructor_dummy_param) [inline]

Fast constructor that leaves all the data uninitialized - call with UNINITIALIZED_POSE as argument.

Definition at line 139 of file CPose3D.h.

mrpt::poses::CPose3D::CPose3D ( const CArrayDouble< 12 > &  vec12) [inline, explicit]

Constructor from an array with these 12 elements: [r11 r21 r31 r12 r22 r32 r13 r23 r33 tx ty tz] where r{ij} are the entries of the 3x3 rotation matrix and t{x,y,z} are the 3D translation of the pose.

See also:
setFrom12Vector, getAs12Vector

Definition at line 145 of file CPose3D.h.


Member Function Documentation

static const mrpt::utils::TRuntimeClassId* mrpt::poses::CPose3D::_GetBaseClass ( ) [static, protected]

Reimplemented from mrpt::utils::CSerializable.

void mrpt::poses::CPose3D::addComponents ( const CPose3D p)

Scalar sum of all 6 components: This is diferent from poses composition, which is implemented as "+" operators.

See also:
normalizeAngles
void mrpt::poses::CPose3D::asString ( std::string &  s) const [inline]

Returns a human-readable textual representation of the object (eg: "[x y z yaw pitch roll]", angles in degrees.)

See also:
fromString

Definition at line 402 of file CPose3D.h.

References mrpt::format(), and mrpt::utils::RAD2DEG().

std::string mrpt::poses::CPose3D::asString ( ) const [inline]

Definition at line 403 of file CPose3D.h.

References asString().

Referenced by asString().

void mrpt::poses::CPose3D::changeCoordinatesReference ( const CPose3D p) [inline]

makes: this = p (+) this

Definition at line 267 of file CPose3D.h.

References mrpt::poses::CPose3D.

void mrpt::poses::CPose3D::composeFrom ( const CPose3D A,
const CPose3D B 
)

Makes "this = A (+) B"; this method is slightly more efficient than "this= A + B;" since it avoids the temporary object.

Note:
A or B can be "this" without problems.

Referenced by operator+(), mrpt::slam::PF_implementation< PARTICLE_TYPE, MYSELF >::PF_SLAM_aux_perform_one_rejection_sampling_step(), and mrpt::slam::PF_implementation< PARTICLE_TYPE, MYSELF >::PF_SLAM_particlesEvaluator_AuxPFStandard().

void mrpt::poses::CPose3D::composePoint ( const TPoint3D  local_point,
TPoint3D global_point 
) const [inline]

An alternative, slightly more efficient way of doing $ G = P \oplus L $ with G and L being 3D points and P this 6D pose.

Note:
local_point is passed by value to allow global and local point to be the same variable

Definition at line 215 of file CPose3D.h.

References mrpt::math::TPoint3D::x, mrpt::math::TPoint3D::y, and mrpt::math::TPoint3D::z.

void mrpt::poses::CPose3D::composePoint ( double  lx,
double  ly,
double  lz,
float &  gx,
float &  gy,
float &  gz 
) const [inline]

An alternative, slightly more efficient way of doing $ G = P \oplus L $ with G and L being 3D points and P this 6D pose.

Definition at line 220 of file CPose3D.h.

void mrpt::poses::CPose3D::composePoint ( double  lx,
double  ly,
double  lz,
double &  gx,
double &  gy,
double &  gz,
mrpt::math::CMatrixFixedNumeric< double, 3, 3 > *  out_jacobian_df_dpoint = NULL,
mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *  out_jacobian_df_dpose = NULL,
mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *  out_jacobian_df_dse3 = NULL,
bool  use_small_rot_approx = false 
) const

An alternative, slightly more efficient way of doing $ G = P \oplus L $ with G and L being 3D points and P this 6D pose.

If pointers are provided, the corresponding Jacobians are returned. "out_jacobian_df_dse3" stands for the Jacobian with respect to the 6D locally Euclidean vector in the tangent space of SE(3). See this report for mathematical details.

Parameters:
Ifset to true, the Jacobian "out_jacobian_df_dpose" uses a fastest linearized appoximation (valid only for small rotations!).

Referenced by mrpt::math::project3D(), and mrpt::vision::pinhole::projectPoint_no_distortion().

static CPose3DPtr mrpt::poses::CPose3D::Create ( ) [static]
static mrpt::utils::CObject* mrpt::poses::CPose3D::CreateObject ( ) [static]
double mrpt::poses::CPose3D::distanceEuclidean6D ( const CPose3D o) const

The euclidean distance between two poses taken as two 6-length vectors (angles in radians).

virtual mrpt::utils::CObject* mrpt::poses::CPose3D::duplicate ( ) const [virtual]

Returns a copy of the object, indepently of its class.

Implements mrpt::utils::CObject.

static bool mrpt::poses::CPose3D::empty ( ) [inline, static]

Definition at line 483 of file CPose3D.h.

static CPose3D mrpt::poses::CPose3D::exp ( const mrpt::math::CArrayNumeric< double, 6 > &  vect) [static]

Exponentiate a Vector in the SE(3) Lie Algebra to generate a new CPose3D (static method).

Note:
Method from TooN (C) Tom Drummond (GNU GPL)
static CMatrixDouble33 mrpt::poses::CPose3D::exp_rotation ( const mrpt::math::CArrayNumeric< double, 3 > &  vect) [static]

Exponentiate a vector in the Lie algebra to generate a new SO(3) (a 3x3 rotation matrix).

Note:
Method from TooN (C) Tom Drummond (GNU GPL)
void mrpt::poses::CPose3D::fromString ( const std::string &  s) [inline]

Set the current object value from a string generated by 'asString' (eg: "[x y z yaw pitch roll]", angles in deg.

)

See also:
asString
Exceptions:
std::exceptionOn invalid format

Definition at line 409 of file CPose3D.h.

References ASSERTMSG_, mrpt::utils::DEG2RAD(), mrpt::math::size(), and THROW_EXCEPTION.

template<class ARRAYORVECTOR >
void mrpt::poses::CPose3D::getAs12Vector ( ARRAYORVECTOR &  vec12) const [inline]

Get the pose representation as an array with these 12 elements: [r11 r21 r31 r12 r22 r32 r13 r23 r33 tx ty tz] where r{ij} are the entries of the 3x3 rotation matrix and t{x,y,z} are the 3D translation of the pose.

See also:
setFrom12Vector

Definition at line 348 of file CPose3D.h.

void mrpt::poses::CPose3D::getAsQuaternion ( mrpt::math::CQuaternionDouble q,
mrpt::math::CMatrixFixedNumeric< double, 4, 3 > *  out_dq_dr = NULL 
) const

Returns the quaternion associated to the rotation of this object (NOTE: XYZ translation is ignored)

\[ \mathbf{q} = \left( \begin{array}{c} \cos (\phi /2) \cos (\theta /2) \cos (\psi /2) + \sin (\phi /2) \sin (\theta /2) \sin (\psi /2) \\ \sin (\phi /2) \cos (\theta /2) \cos (\psi /2) - \cos (\phi /2) \sin (\theta /2) \sin (\psi /2) \\ \cos (\phi /2) \sin (\theta /2) \cos (\psi /2) + \sin (\phi /2) \cos (\theta /2) \sin (\psi /2) \\ \cos (\phi /2) \cos (\theta /2) \sin (\psi /2) - \sin (\phi /2) \sin (\theta /2) \cos (\psi /2) \\ \end{array}\right) \]

With : $ \phi = roll $, $ \theta = pitch $ and $ \psi = yaw $.

Parameters:
out_dq_drIf provided, the 4x3 Jacobian of the transformation will be computed and stored here. It's the Jacobian of the transformation from (yaw pitch roll) to (qr qx qy qz).

Referenced by mrpt::math::jacobians::jacob_quat_from_yawpitchroll().

void mrpt::poses::CPose3D::getAsVector ( vector_double v) const

Returns a 1x6 vector with [x y z yaw pitch roll].

void mrpt::poses::CPose3D::getHomogeneousMatrix ( CMatrixDouble44 out_HM) const [inline]

Returns the corresponding 4x4 homogeneous transformation matrix for the point(translation) or pose (translation+orientation).

See also:
getInverseHomogeneousMatrix, getRotationMatrix

Definition at line 159 of file CPose3D.h.

CMatrixDouble44 mrpt::poses::CPose3D::getHomogeneousMatrixVal ( ) const [inline]

Returns the corresponding 4x4 homogeneous transformation matrix for the point(translation) or pose (translation+orientation).

See also:
getInverseHomogeneousMatrix

Reimplemented from mrpt::poses::CPoseOrPoint< CPose3D >.

Definition at line 166 of file CPose3D.h.

void mrpt::poses::CPose3D::getRotationMatrix ( mrpt::math::CMatrixDouble33 ROT) const [inline]

Get the 3x3 rotation matrix.

See also:
getHomogeneousMatrix

Definition at line 169 of file CPose3D.h.

const mrpt::math::CMatrixDouble33& mrpt::poses::CPose3D::getRotationMatrix ( ) const [inline]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 171 of file CPose3D.h.

virtual const mrpt::utils::TRuntimeClassId* mrpt::poses::CPose3D::GetRuntimeClass ( ) const [virtual]

Returns information about the class of an object in runtime.

Reimplemented from mrpt::utils::CSerializable.

void mrpt::poses::CPose3D::getYawPitchRoll ( double &  yaw,
double &  pitch,
double &  roll 
) const

Returns the three angles (yaw, pitch, roll), in radians, from the rotation matrix.

See also:
setFromValues, yaw, pitch, roll
void mrpt::poses::CPose3D::inverse ( )

Convert this pose into its inverse, saving the result in itself.

See also:
operator-
void mrpt::poses::CPose3D::inverseComposeFrom ( const CPose3D A,
const CPose3D B 
)

Makes $ this = A \ominus B $ this method is slightly more efficient than "this= A - B;" since it avoids the temporary object.

Note:
A or B can be "this" without problems.
See also:
composeFrom, composePoint

Referenced by operator-().

void mrpt::poses::CPose3D::inverseComposePoint ( const double  gx,
const double  gy,
const double  gz,
double &  lx,
double &  ly,
double &  lz,
mrpt::math::CMatrixFixedNumeric< double, 3, 3 > *  out_jacobian_df_dpoint = NULL,
mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *  out_jacobian_df_dpose = NULL,
mrpt::math::CMatrixFixedNumeric< double, 3, 6 > *  out_jacobian_df_dse3 = NULL 
) const

Computes the 3D point L such as $ L = G \ominus this $.

If pointers are provided, the corresponding Jacobians are returned. "out_jacobian_df_dse3" stands for the Jacobian with respect to the 6D locally Euclidean vector in the tangent space of SE(3). See this report for mathematical details.

See also:
composePoint, composeFrom

Referenced by mrpt::vision::pinhole::projectPoint_no_distortion().

static bool mrpt::poses::CPose3D::is_3D ( ) [inline, static]

Definition at line 466 of file CPose3D.h.

static bool mrpt::poses::CPose3D::is_PDF ( ) [inline, static]

Definition at line 469 of file CPose3D.h.

bool mrpt::poses::CPose3D::isHorizontal ( const double  tolerance = 0) const

Return true if the 6D pose represents a Z axis almost exactly vertical (upwards or downwards), with a given tolerance (if set to 0 exact horizontality is tested).

void mrpt::poses::CPose3D::ln ( mrpt::math::CArrayDouble< 6 > &  out_ln) const

Take the logarithm of the 3x4 matrix defined by this pose, generating the corresponding vector in the SE(3) Lie Algebra.

Note:
Method from TooN (C) Tom Drummond (GNU GPL)
See also:
ln_jacob

Referenced by mrpt::poses::SE_traits< 3 >::ln().

mrpt::math::CArrayDouble<6> mrpt::poses::CPose3D::ln ( ) const [inline]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 445 of file CPose3D.h.

References ln().

Referenced by ln().

void mrpt::poses::CPose3D::ln_jacob ( mrpt::math::CMatrixFixedNumeric< double, 6, 12 > &  J) const

Jacobian of the logarithm of the 3x4 matrix defined by this pose.

Note:
Method from TooN (C) Tom Drummond (GNU GPL)
See also:
ln
static void mrpt::poses::CPose3D::ln_rot_jacob ( const CMatrixDouble33 R,
CMatrixFixedNumeric< double, 3, 9 > &  M 
) [static]

Static function to compute the Jacobian of the SO(3) Logarithm function, evaluated at a given 3x3 rotation matrix R.

See also:
ln, ln_jacob
CArrayDouble<3> mrpt::poses::CPose3D::ln_rotation ( ) const

Take the logarithm of the 3x3 rotation matrix, generating the corresponding vector in the Lie Algebra.

Note:
Method from TooN (C) Tom Drummond (GNU GPL)
static size_type mrpt::poses::CPose3D::max_size ( ) [inline, static]

Definition at line 484 of file CPose3D.h.

References static_size.

void mrpt::poses::CPose3D::normalizeAngles ( )

Rebuild the internal matrix & update the yaw/pitch/roll angles within the ]-PI,PI] range (Must be called after using addComponents)

See also:
addComponents
void mrpt::poses::CPose3D::operator*= ( const double  s)

Scalar multiplication of x,y,z,yaw,pitch & roll (angles will be wrapped to the ]-pi,pi] interval).

CPose3D mrpt::poses::CPose3D::operator+ ( const CPose3D b) const [inline]

The operator $ a \oplus b $ is the pose compounding operator.

Definition at line 180 of file CPose3D.h.

References composeFrom(), and mrpt::poses::UNINITIALIZED_POSE.

CPoint3D mrpt::poses::CPose3D::operator+ ( const CPoint2D b) const

The operator $ a \oplus b $ is the pose compounding operator.

CPoint3D mrpt::poses::CPose3D::operator+ ( const CPoint3D b) const

The operator $ a \oplus b $ is the pose compounding operator.

CPose3D& mrpt::poses::CPose3D::operator+= ( const CPose3D b) [inline]

Make $ this = this \oplus b $ (b can be "this" without problems)

Definition at line 243 of file CPose3D.h.

CPose3D mrpt::poses::CPose3D::operator- ( const CPose3D b) const [inline]

Compute $ RET = this \oplus b $.

Reimplemented from mrpt::poses::CPose< CPose3D >.

Definition at line 256 of file CPose3D.h.

References inverseComposeFrom(), and mrpt::poses::UNINITIALIZED_POSE.

const double& mrpt::poses::CPose3D::operator[] ( unsigned int  i) const [inline]

Definition at line 380 of file CPose3D.h.

double mrpt::poses::CPose3D::pitch ( ) const [inline]

Get the PITCH angle (in radians)

See also:
setFromValues

Definition at line 364 of file CPose3D.h.

void mrpt::poses::CPose3D::rebuildRotationMatrix ( ) [protected]

Rebuild the homog matrix from the angles.

static void mrpt::poses::CPose3D::resize ( const size_t  n) [inline, static]

Definition at line 485 of file CPose3D.h.

References mrpt::format(), and static_size.

double mrpt::poses::CPose3D::roll ( ) const [inline]

Get the ROLL angle (in radians)

See also:
setFromValues

Definition at line 365 of file CPose3D.h.

template<class ARRAYORVECTOR >
void mrpt::poses::CPose3D::setFrom12Vector ( const ARRAYORVECTOR &  vec12) [inline]

Set pose from an array with these 12 elements: [r11 r21 r31 r12 r22 r32 r13 r23 r33 tx ty tz] where r{ij} are the entries of the 3x3 rotation matrix and t{x,y,z} are the 3D translation of the pose.

See also:
getAs12Vector

Definition at line 333 of file CPose3D.h.

void mrpt::poses::CPose3D::setFromValues ( const double  x0,
const double  y0,
const double  z0,
const double  yaw = 0,
const double  pitch = 0,
const double  roll = 0 
)

Set the pose from a 3D position (meters) and yaw/pitch/roll angles (radians) - This method recomputes the internal rotation matrix.

See also:
getYawPitchRoll, setYawPitchRoll
template<typename VECTORLIKE >
void mrpt::poses::CPose3D::setFromXYZQ ( const VECTORLIKE &  v,
const size_t  index_offset = 0 
) [inline]

Set the pose from a 3D position (meters) and a quaternion, stored as [x y z qr qx qy qz] in a 7-element vector.

See also:
setFromValues, getYawPitchRoll, setYawPitchRoll, CQuaternion, getAsQuaternion

Definition at line 303 of file CPose3D.h.

References ASSERT_ABOVEEQ_.

void mrpt::poses::CPose3D::setYawPitchRoll ( const double  yaw_,
const double  pitch_,
const double  roll_ 
) [inline]

Set the 3 angles of the 3D pose (in radians) - This method recomputes the internal rotation coordinates matrix.

See also:
getYawPitchRoll, setFromValues

Definition at line 320 of file CPose3D.h.

References internal::y.

static size_type mrpt::poses::CPose3D::size ( ) [inline, static]

Definition at line 482 of file CPose3D.h.

References static_size.

void mrpt::poses::CPose3D::sphericalCoordinates ( const TPoint3D point,
double &  out_range,
double &  out_yaw,
double &  out_pitch 
) const

Computes the spherical coordinates of a 3D point as seen from the 6D pose specified by this object.

For the coordinate system see the top of this page.

void mrpt::poses::CPose3D::updateYawPitchRoll ( ) const [inline, protected]

Updates Yaw/pitch/roll members from the m_ROT.

Definition at line 88 of file CPose3D.h.

double mrpt::poses::CPose3D::yaw ( ) const [inline]

Get the YAW angle (in radians)

See also:
setFromValues

Definition at line 363 of file CPose3D.h.


Member Data Documentation

Definition at line 74 of file CPose3D.h.

Definition at line 74 of file CPose3D.h.

Definition at line 74 of file CPose3D.h.

The translation vector [x,y,z].

Definition at line 77 of file CPose3D.h.

double mrpt::poses::CPose3D::m_pitch [mutable, protected]

Definition at line 82 of file CPose3D.h.

double mrpt::poses::CPose3D::m_roll [mutable, protected]

These variables are updated every time that the object rotation matrix is modified (construction, loading from values, pose composition, etc )

Definition at line 82 of file CPose3D.h.

The 3x3 rotation matrix.

Definition at line 78 of file CPose3D.h.

double mrpt::poses::CPose3D::m_yaw [mutable, protected]

Definition at line 82 of file CPose3D.h.

bool mrpt::poses::CPose3D::m_ypr_uptodate [mutable, protected]

Whether yaw/pitch/roll members are up-to-date since the last rotation matrix update.

Definition at line 81 of file CPose3D.h.




Page generated by Doxygen 1.7.3 for MRPT 0.9.4 SVN: at Sat Mar 26 06:16:28 UTC 2011