Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Member Functions | Static Public Member Functions | Related Functions | List of all members
BIAS::DualQuaternion< QUAT_TYPE > Class Template Reference

class representing rigid motion by dual quaternions More...

#include <Base/Geometry/DualQuaternion.hh>

Public Member Functions

void Add (const DualQuaternion< QUAT_TYPE > &r)
 
void Add (const DualQuaternion< QUAT_TYPE > &r, DualQuaternion< QUAT_TYPE > &res) const
 
void Div (const QUAT_TYPE &scalar)
 
void Div (const QUAT_TYPE &scalar, DualQuaternion< QUAT_TYPE > &res) const
 
 DualQuaternion ()
 
 DualQuaternion (const DualQuaternion< QUAT_TYPE > &d)
 
 DualQuaternion (const Quaternion< QUAT_TYPE > &q, const Quaternion< QUAT_TYPE > &p)
 
void EnforceRigidCouplingConstraint (DualQuaternion< QUAT_TYPE > &other, bool useOtherAngle=false, bool useOtherPitch=false)
 Enforce rigid coupling constraint for this and the other given dual quaternion (equal rotation angle and equal motion pitch/equal real and dual scalar part for both). More...
 
void GetDualNorm (QUAT_TYPE &r, QUAT_TYPE &d) const
 Computes dual quaternion norm which is a dual number consisting of real part r and dual part d. More...
 
Quaternion< QUAT_TYPE > GetDualPart () const
 
Matrix< QUAT_TYPE > GetLeftMultMatrix () const
 
PoseParametrization GetPoseParametrization () const
 
Quaternion< QUAT_TYPE > GetRealPart () const
 
Matrix< QUAT_TYPE > GetRightMultMatrix () const
 
void GetRigidMotion (Quaternion< QUAT_TYPE > &rotation, Vector3< QUAT_TYPE > &translation) const
 
void GetRigidMotion (RMatrixBase &rotation, Vector3< QUAT_TYPE > &translation) const
 
Vector< QUAT_TYPE > GetVector () const
 
DualQuaternion< QUAT_TYPE > Interpolate (const DualQuaternion< QUAT_TYPE > &to, const QUAT_TYPE &t) const
 
DualQuaternion< QUAT_TYPE > InterpolateLinear (const DualQuaternion< QUAT_TYPE > &to, const QUAT_TYPE &t) const
 
DualQuaternion< QUAT_TYPE > Inverse () const
 
void Invert ()
 
void MakeUnique ()
 Make dual quaternion representation unique with respect to the rigid motion it represents. More...
 
void Mult (const QUAT_TYPE &scalar)
 
void Mult (const QUAT_TYPE &scalar, DualQuaternion< QUAT_TYPE > &res) const
 
void Mult (const DualQuaternion< QUAT_TYPE > &r)
 
void Mult (const DualQuaternion< QUAT_TYPE > &r, DualQuaternion< QUAT_TYPE > &res) const
 
void MultLeft (const DualQuaternion< QUAT_TYPE > &l)
 
void MultLeft (const DualQuaternion< QUAT_TYPE > &l, DualQuaternion< QUAT_TYPE > &res) const
 
void MultVec (const Vector3< QUAT_TYPE > &vec, Vector3< QUAT_TYPE > &res) const
 
Vector3< QUAT_TYPE > MultVec (const Vector3< QUAT_TYPE > &vec) const
 
void Normalize ()
 Scales dual quaternion to unit length, i.e. More...
 
bool operator!= (const DualQuaternion< QUAT_TYPE > &r) const
 
DualQuaternion< QUAT_TYPE > & operator*= (const QUAT_TYPE &scalar)
 
DualQuaternion< QUAT_TYPE > & operator*= (const DualQuaternion< QUAT_TYPE > &r)
 
DualQuaternion< QUAT_TYPE > & operator+= (const DualQuaternion< QUAT_TYPE > &r)
 
DualQuaternion< QUAT_TYPE > & operator-= (const DualQuaternion< QUAT_TYPE > &r)
 
DualQuaternion< QUAT_TYPE > & operator/= (const QUAT_TYPE &scalar)
 
DualQuaternion< QUAT_TYPE > & operator/= (const DualQuaternion< QUAT_TYPE > &r)
 
DualQuaternion< QUAT_TYPE > & operator= (const DualQuaternion< QUAT_TYPE > &r)
 
bool operator== (const DualQuaternion< QUAT_TYPE > &r) const
 
void Set (const Quaternion< QUAT_TYPE > &q, const Quaternion< QUAT_TYPE > &p)
 
void SetDualPart (const Quaternion< QUAT_TYPE > &p)
 
void SetFromPoseParametrization (const PoseParametrization &params)
 
void SetFromRigidMotion (const Quaternion< QUAT_TYPE > &rotation, const Vector3< QUAT_TYPE > &translation)
 
void SetFromRigidMotion (const RMatrixBase &rotation, const Vector3< QUAT_TYPE > &translation)
 
void SetIdentity ()
 
void SetRealPart (const Quaternion< QUAT_TYPE > &q)
 
void Sub (const DualQuaternion< QUAT_TYPE > &r)
 
void Sub (const DualQuaternion< QUAT_TYPE > &r, DualQuaternion< QUAT_TYPE > &res) const
 
 ~DualQuaternion ()
 

Static Public Member Functions

static void EnforceRigidCouplingConstraint (std::vector< DualQuaternion< QUAT_TYPE > > &quats, bool useFirstAngle=false, bool useFirstPitch=false)
 Enforce rigid coupling constraint for all dual quaternions in given vector. More...
 

Related Functions

(Note that these are not member functions.)

template<class T >
DualQuaternion< T > operator* (const DualQuaternion< T > &l, const DualQuaternion< T > &r)
 
template<class T >
DualQuaternion< T > operator/ (const DualQuaternion< T > &l, const DualQuaternion< T > &r)
 

Detailed Description

template<class QUAT_TYPE>
class BIAS::DualQuaternion< QUAT_TYPE >

class representing rigid motion by dual quaternions

Dual quaternions can be used to represent a rigid motion in 3d space consisting of a rotation and a translation.

A dual quaternion can be described as consisting of a real part q and a dual part p which are both real quaternions. The real part q simply describes the rotational part of the motion (see Quaternion). The dual part p describes the translational part decomposed into a translation orthogonal to the rotation axis (related to the "moment") and the amount of translation along the rotation axis ("pitch").

Dual quaternions describing rigid motion are constrained to have a unit real part and orthogonal real and dual parts.

See for example K. Daniilidis: Hand-Eye Calibration Using Dual Quaternions (1999) for further information on dual quaternions and their relation to screw theory.

Author
esquivel 02/2011

Definition at line 67 of file DualQuaternion.hh.

Constructor & Destructor Documentation

template<class QUAT_TYPE >
DualQuaternion::DualQuaternion ( )
inline

Definition at line 28 of file DualQuaternion.hh.

template<class QUAT_TYPE >
DualQuaternion::DualQuaternion ( const DualQuaternion< QUAT_TYPE > &  d)
inline

Definition at line 34 of file DualQuaternion.hh.

template<class QUAT_TYPE >
DualQuaternion::DualQuaternion ( const Quaternion< QUAT_TYPE > &  q,
const Quaternion< QUAT_TYPE > &  p 
)
inline

Definition at line 41 of file DualQuaternion.hh.

template<class QUAT_TYPE>
BIAS::DualQuaternion< QUAT_TYPE >::~DualQuaternion ( )
inline

Definition at line 83 of file DualQuaternion.hh.

Member Function Documentation

template<class QUAT_TYPE >
void DualQuaternion::Add ( const DualQuaternion< QUAT_TYPE > &  r)
inline

Definition at line 92 of file DualQuaternion.hh.

Referenced by BIAS::operator+().

template<class QUAT_TYPE >
void BIAS::DualQuaternion< QUAT_TYPE >::Add ( const DualQuaternion< QUAT_TYPE > &  r,
DualQuaternion< QUAT_TYPE > &  res 
) const
inline

Definition at line 99 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::Div ( const QUAT_TYPE &  scalar)
inline

Definition at line 137 of file DualQuaternion.hh.

Referenced by BIAS::operator/().

template<class QUAT_TYPE >
void BIAS::DualQuaternion< QUAT_TYPE >::Div ( const QUAT_TYPE &  scalar,
DualQuaternion< QUAT_TYPE > &  res 
) const
inline

Definition at line 144 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::EnforceRigidCouplingConstraint ( DualQuaternion< QUAT_TYPE > &  other,
bool  useOtherAngle = false,
bool  useOtherPitch = false 
)

Enforce rigid coupling constraint for this and the other given dual quaternion (equal rotation angle and equal motion pitch/equal real and dual scalar part for both).

Computes direct simple interpolation of both dual quaternion where the scalar parts of the real and dual quaternion parts of the resulting dual quaternion are identical. This solution can be used as initial guess for numerical refinement.

Parameters
in/out]other Dual quaternion to enforce rigid coupling constraint with
[in]useOtherAngleUse rotation angle (= real scalar part) of other dual quaternion instead of interpolating both
[in]useOtherPitchUse motion pitch (= dual scalar part) of other dual quaternion instead of interpolating both
Author
esquivel 02/2012

Definition at line 173 of file DualQuaternion.cpp.

References BIAS::DualQuaternion< QUAT_TYPE >::MakeUnique().

template<class QUAT_TYPE >
void DualQuaternion::EnforceRigidCouplingConstraint ( std::vector< DualQuaternion< QUAT_TYPE > > &  quats,
bool  useFirstAngle = false,
bool  useFirstPitch = false 
)
static

Enforce rigid coupling constraint for all dual quaternions in given vector.

Parameters
in/out]quats Dual quaternions to enforce rigid coupling constraint for
[in]useFirstAngleUse rotation angle (= real scalar part) of first dual quaternion instead of interpolating all
[in]useFirstPitchUse motion pitch (= dual scalar part) of first dual quaternion instead of interpolating all
Author
esquivel 02/2012

Definition at line 225 of file DualQuaternion.cpp.

template<class QUAT_TYPE >
void DualQuaternion::GetDualNorm ( QUAT_TYPE &  r,
QUAT_TYPE &  d 
) const
inline

Computes dual quaternion norm which is a dual number consisting of real part r and dual part d.

Definition at line 83 of file DualQuaternion.hh.

template<class QUAT_TYPE >
Quaternion< QUAT_TYPE > DualQuaternion::GetDualPart ( ) const
inline

Definition at line 234 of file DualQuaternion.hh.

template<class QUAT_TYPE >
Matrix< QUAT_TYPE > DualQuaternion::GetLeftMultMatrix ( ) const

Definition at line 99 of file DualQuaternion.cpp.

References BIAS::MatrixZero.

template<class QUAT_TYPE >
PoseParametrization DualQuaternion::GetPoseParametrization ( ) const

Definition at line 65 of file DualQuaternion.cpp.

References BIAS::PoseParametrization::Set().

template<class QUAT_TYPE >
Quaternion< QUAT_TYPE > DualQuaternion::GetRealPart ( ) const
inline

Definition at line 228 of file DualQuaternion.hh.

template<class QUAT_TYPE >
Matrix< QUAT_TYPE > DualQuaternion::GetRightMultMatrix ( ) const

Definition at line 115 of file DualQuaternion.cpp.

References BIAS::MatrixZero.

template<class QUAT_TYPE >
void DualQuaternion::GetRigidMotion ( Quaternion< QUAT_TYPE > &  rotation,
Vector3< QUAT_TYPE > &  translation 
) const

Definition at line 35 of file DualQuaternion.cpp.

References BIAS::Quaternion< T >::Mult(), and BIAS::Vector3< T >::Set().

template<class QUAT_TYPE >
void BIAS::DualQuaternion< QUAT_TYPE >::GetRigidMotion ( RMatrixBase rotation,
Vector3< QUAT_TYPE > &  translation 
) const
inline

Definition at line 252 of file DualQuaternion.hh.

template<class QUAT_TYPE >
Vector< QUAT_TYPE > DualQuaternion::GetVector ( ) const
inline

Definition at line 240 of file DualQuaternion.hh.

template<class QUAT_TYPE >
DualQuaternion< QUAT_TYPE > DualQuaternion::Interpolate ( const DualQuaternion< QUAT_TYPE > &  to,
const QUAT_TYPE &  t 
) const

Definition at line 153 of file DualQuaternion.cpp.

References BIAS::Quaternion< T >::Interpolate().

template<class QUAT_TYPE >
DualQuaternion< QUAT_TYPE > DualQuaternion::InterpolateLinear ( const DualQuaternion< QUAT_TYPE > &  to,
const QUAT_TYPE &  t 
) const
template<class QUAT_TYPE >
DualQuaternion< QUAT_TYPE > DualQuaternion::Inverse ( ) const
inline
template<class QUAT_TYPE >
void DualQuaternion::Invert ( )
inline

Definition at line 49 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::MakeUnique ( )
inline

Make dual quaternion representation unique with respect to the rigid motion it represents.

Definition at line 64 of file DualQuaternion.hh.

Referenced by BIAS::DualQuaternion< QUAT_TYPE >::EnforceRigidCouplingConstraint().

template<class QUAT_TYPE >
void DualQuaternion::Mult ( const QUAT_TYPE &  scalar)
inline
template<class QUAT_TYPE >
void BIAS::DualQuaternion< QUAT_TYPE >::Mult ( const QUAT_TYPE &  scalar,
DualQuaternion< QUAT_TYPE > &  res 
) const
inline

Definition at line 129 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::Mult ( const DualQuaternion< QUAT_TYPE > &  r)
inline

Definition at line 154 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void BIAS::DualQuaternion< QUAT_TYPE >::Mult ( const DualQuaternion< QUAT_TYPE > &  r,
DualQuaternion< QUAT_TYPE > &  res 
) const
inline

Definition at line 161 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::MultLeft ( const DualQuaternion< QUAT_TYPE > &  l)
inline

Definition at line 169 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void BIAS::DualQuaternion< QUAT_TYPE >::MultLeft ( const DualQuaternion< QUAT_TYPE > &  l,
DualQuaternion< QUAT_TYPE > &  res 
) const
inline

Definition at line 176 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void BIAS::DualQuaternion< QUAT_TYPE >::MultVec ( const Vector3< QUAT_TYPE > &  vec,
Vector3< QUAT_TYPE > &  res 
) const
inline

Definition at line 184 of file DualQuaternion.hh.

template<class QUAT_TYPE >
Vector3< QUAT_TYPE > BIAS::DualQuaternion< QUAT_TYPE >::MultVec ( const Vector3< QUAT_TYPE > &  vec) const
inline

Definition at line 191 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::Normalize ( )
inline

Scales dual quaternion to unit length, i.e.

norm of real part equals 1 and real part is orthogonal to dual part.

Definition at line 74 of file DualQuaternion.hh.

Referenced by BIAS::DualQuaternion< QUAT_TYPE >::InterpolateLinear().

template<class QUAT_TYPE>
bool BIAS::DualQuaternion< QUAT_TYPE >::operator!= ( const DualQuaternion< QUAT_TYPE > &  r) const
inline

Definition at line 211 of file DualQuaternion.hh.

template<class QUAT_TYPE>
DualQuaternion<QUAT_TYPE>& BIAS::DualQuaternion< QUAT_TYPE >::operator*= ( const QUAT_TYPE &  scalar)
inline

Definition at line 191 of file DualQuaternion.hh.

template<class QUAT_TYPE>
DualQuaternion<QUAT_TYPE>& BIAS::DualQuaternion< QUAT_TYPE >::operator*= ( const DualQuaternion< QUAT_TYPE > &  r)
inline

Definition at line 199 of file DualQuaternion.hh.

template<class QUAT_TYPE>
DualQuaternion<QUAT_TYPE>& BIAS::DualQuaternion< QUAT_TYPE >::operator+= ( const DualQuaternion< QUAT_TYPE > &  r)
inline

Definition at line 183 of file DualQuaternion.hh.

template<class QUAT_TYPE>
DualQuaternion<QUAT_TYPE>& BIAS::DualQuaternion< QUAT_TYPE >::operator-= ( const DualQuaternion< QUAT_TYPE > &  r)
inline

Definition at line 187 of file DualQuaternion.hh.

template<class QUAT_TYPE>
DualQuaternion<QUAT_TYPE>& BIAS::DualQuaternion< QUAT_TYPE >::operator/= ( const QUAT_TYPE &  scalar)
inline

Definition at line 195 of file DualQuaternion.hh.

template<class QUAT_TYPE>
DualQuaternion<QUAT_TYPE>& BIAS::DualQuaternion< QUAT_TYPE >::operator/= ( const DualQuaternion< QUAT_TYPE > &  r)
inline

Definition at line 203 of file DualQuaternion.hh.

References BIAS::DualQuaternion< QUAT_TYPE >::Inverse().

template<class QUAT_TYPE>
DualQuaternion<QUAT_TYPE>& BIAS::DualQuaternion< QUAT_TYPE >::operator= ( const DualQuaternion< QUAT_TYPE > &  r)
inline

Definition at line 179 of file DualQuaternion.hh.

template<class QUAT_TYPE>
bool BIAS::DualQuaternion< QUAT_TYPE >::operator== ( const DualQuaternion< QUAT_TYPE > &  r) const
inline

Definition at line 206 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::Set ( const Quaternion< QUAT_TYPE > &  q,
const Quaternion< QUAT_TYPE > &  p 
)
inline

Definition at line 208 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::SetDualPart ( const Quaternion< QUAT_TYPE > &  p)
inline

Definition at line 222 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::SetFromPoseParametrization ( const PoseParametrization params)
template<class QUAT_TYPE >
void DualQuaternion::SetFromRigidMotion ( const Quaternion< QUAT_TYPE > &  rotation,
const Vector3< QUAT_TYPE > &  translation 
)
template<class QUAT_TYPE >
void DualQuaternion::SetFromRigidMotion ( const RMatrixBase rotation,
const Vector3< QUAT_TYPE > &  translation 
)
inline

Definition at line 265 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::SetIdentity ( )
inline

Definition at line 201 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::SetRealPart ( const Quaternion< QUAT_TYPE > &  q)
inline

Definition at line 216 of file DualQuaternion.hh.

template<class QUAT_TYPE >
void DualQuaternion::Sub ( const DualQuaternion< QUAT_TYPE > &  r)
inline

Definition at line 107 of file DualQuaternion.hh.

Referenced by BIAS::operator-().

template<class QUAT_TYPE >
void BIAS::DualQuaternion< QUAT_TYPE >::Sub ( const DualQuaternion< QUAT_TYPE > &  r,
DualQuaternion< QUAT_TYPE > &  res 
) const
inline

Definition at line 114 of file DualQuaternion.hh.

Friends And Related Function Documentation

template<class T >
DualQuaternion< T > operator* ( const DualQuaternion< T > &  l,
const DualQuaternion< T > &  r 
)
related

what it stands for (wraps Mult())

Author
esquivel 02/2011

Definition at line 79 of file DualQuaternionOperators.hh.

References BIAS::DualQuaternion< QUAT_TYPE >::Mult().

template<class T >
DualQuaternion< T > operator/ ( const DualQuaternion< T > &  l,
const DualQuaternion< T > &  r 
)
related

what it stands for (wraps Mult() and Inverse())

Author
esquivel 02/2011

Definition at line 91 of file DualQuaternionOperators.hh.

References BIAS::DualQuaternion< QUAT_TYPE >::Inverse(), and BIAS::DualQuaternion< QUAT_TYPE >::Mult().


The documentation for this class was generated from the following files: