Robot Dynamics Library
Public Member Functions | List of all members
RobotDynamics::Math::Quaternion Class Reference

Quaternion that are used for singularity free joints. More...

#include <rdl_eigenmath.hpp>

Inheritance diagram for RobotDynamics::Math::Quaternion:
Inheritance graph
[legend]
Collaboration diagram for RobotDynamics::Math::Quaternion:
Collaboration graph
[legend]

Public Member Functions

 Quaternion ()
 Constructor. More...
 
 Quaternion (const Eigen::Quaterniond &q)
 
 Quaternion (const RobotDynamics::Math::Quaternion &q)
 
 Quaternion (const Eigen::Product< Eigen::Matrix< double, 3, 3 >, Eigen::Matrix< double, 3, 3 >, 0 > E)
 
 Quaternion (const Eigen::Matrix3d &E)
 
 Quaternion (const Eigen::Matrix3d::ConstTransposeReturnType &E)
 
 Quaternion (Eigen::Transpose< Eigen::Matrix< double, 3, 3 > > E)
 
 Quaternion (const Vector4d &v)
 
 Quaternion (const AxisAngle &axis_angle)
 
 Quaternion (Vector3d axis, double angle)
 
 Quaternion (double x, double y, double z, double w)
 Constructor. More...
 
AxisAngle toAxisAngle () const
 
bool isApprox (Quaternion o, double eps) const
 
bool isApprox (Matrix3d E, double eps) const
 
EIGEN_STRONG_INLINE double & x ()
 
EIGEN_STRONG_INLINE double x () const
 
EIGEN_STRONG_INLINE double & y ()
 
EIGEN_STRONG_INLINE double y () const
 
EIGEN_STRONG_INLINE double & z ()
 
EIGEN_STRONG_INLINE double z () const
 
EIGEN_STRONG_INLINE double & w ()
 
EIGEN_STRONG_INLINE double w () const
 
EIGEN_STRONG_INLINE Vector3d vec () const
 Get vector part. More...
 
Quaternionoperator= (const Eigen::Quaterniond &q)
 
void sanitize ()
 sanitize the quaternion by negating each element if the w element is less than zero More...
 
Quaternionoperator= (const RobotDynamics::Math::Quaternion &q)
 
Quaternionoperator= (const Vector4d &q)
 
Quaternionoperator= (const Matrix3d &E)
 
Quaternionoperator= (const AxisAngle &axis_angle)
 
Quaternion operator* (const double &s) const
 Method to scale the elements of a quaternion by a constant. Normalization is NOT performed. More...
 
Quaternion operator* (const Quaternion &q) const
 Quaternion multiplication. More...
 
Quaternionoperator*= (const Quaternion &q)
 Overloaded *= operator for quaternion multiplication. More...
 
void transform (const RobotDynamics::Math::SpatialTransform &X)
 Pure virtual object. This object forces objects that inherit from it to have a method that tells how that object is transformed. More...
 
Quaternion slerp (double alpha, const Quaternion &quat) const
 From Wikipedia: In computer graphics, Slerp is shorthand for spherical linear interpolation, introduced by Ken Shoemake in the context of quaternion interpolation for the purpose of animating 3D rotation. It refers to constant-speed motion along a unit-radius great circle arc, given the ends and an interpolation parameter between 0 and 1. More...
 
Quaternion conjugate () const
 
Quaternion timeStep (const Vector3d &omega, double dt)
 
Vector3d rotate (const Vector3d &vec) const
 
void swingTwistDecomposition (const Vector3d &twist_axis, Quaternion &swing, Quaternion &twist)
 Decompose a quaternion into a swing then twist quaternion where the twist is about the given axis. More...
 
Vector3d toIntrinsicZYXAngles (double yaw_at_pitch_singularity=0.) const
 Convert to intrinsic ZYX euler angles. More...
 
- Public Member Functions inherited from RobotDynamics::Math::Vector4d
template<typename OtherDerived >
 Vector4d (const Eigen::MatrixBase< OtherDerived > &other)
 
template<typename OtherDerived >
Vector4doperator= (const Eigen::MatrixBase< OtherDerived > &other)
 
EIGEN_STRONG_INLINE Vector4d ()
 
EIGEN_STRONG_INLINE Vector4d (const double &v0, const double &v1, const double &v2, const double &v3)
 
void set (const double &v0, const double &v1, const double &v2, const double &v3)
 

Additional Inherited Members

- Public Types inherited from RobotDynamics::Math::Vector4d
typedef Eigen::Vector4d Base
 

Detailed Description

Quaternion that are used for singularity free joints.

order: x,y,z,w

Constructor & Destructor Documentation

◆ Quaternion() [1/11]

RobotDynamics::Math::Quaternion::Quaternion ( )
inline

Constructor.

◆ Quaternion() [2/11]

RobotDynamics::Math::Quaternion::Quaternion ( const Eigen::Quaterniond &  q)
inline

◆ Quaternion() [3/11]

RobotDynamics::Math::Quaternion::Quaternion ( const RobotDynamics::Math::Quaternion q)
inline

◆ Quaternion() [4/11]

RobotDynamics::Math::Quaternion::Quaternion ( const Eigen::Product< Eigen::Matrix< double, 3, 3 >, Eigen::Matrix< double, 3, 3 >, 0 >  E)
inline

◆ Quaternion() [5/11]

RobotDynamics::Math::Quaternion::Quaternion ( const Eigen::Matrix3d &  E)

◆ Quaternion() [6/11]

RobotDynamics::Math::Quaternion::Quaternion ( const Eigen::Matrix3d::ConstTransposeReturnType &  E)
inline

◆ Quaternion() [7/11]

RobotDynamics::Math::Quaternion::Quaternion ( Eigen::Transpose< Eigen::Matrix< double, 3, 3 > >  E)
inline

◆ Quaternion() [8/11]

RobotDynamics::Math::Quaternion::Quaternion ( const Vector4d v)
inline

◆ Quaternion() [9/11]

RobotDynamics::Math::Quaternion::Quaternion ( const AxisAngle axis_angle)
inline

◆ Quaternion() [10/11]

RobotDynamics::Math::Quaternion::Quaternion ( Vector3d  axis,
double  angle 
)
inline

◆ Quaternion() [11/11]

RobotDynamics::Math::Quaternion::Quaternion ( double  x,
double  y,
double  z,
double  w 
)
inline

Constructor.

Parameters
x
y
z
w

Member Function Documentation

◆ conjugate()

Quaternion RobotDynamics::Math::Quaternion::conjugate ( ) const
inline

◆ isApprox() [1/2]

bool RobotDynamics::Math::Quaternion::isApprox ( Matrix3d  E,
double  eps 
) const
inline

◆ isApprox() [2/2]

bool RobotDynamics::Math::Quaternion::isApprox ( Quaternion  o,
double  eps 
) const
inline

◆ operator*() [1/2]

Quaternion RobotDynamics::Math::Quaternion::operator* ( const double &  s) const
inline

Method to scale the elements of a quaternion by a constant. Normalization is NOT performed.

Parameters
s
Returns
Scaled quaternion

◆ operator*() [2/2]

Quaternion RobotDynamics::Math::Quaternion::operator* ( const Quaternion q) const
inline

Quaternion multiplication.

Parameters
qQuaternion to multiply by
Returns
New multiplied quaternion result

◆ operator*=()

Quaternion& RobotDynamics::Math::Quaternion::operator*= ( const Quaternion q)
inline

Overloaded *= operator for quaternion multiplication.

Parameters
qQuaternion to multiply by
Returns
Modified result of the multiplication

◆ operator=() [1/5]

Quaternion& RobotDynamics::Math::Quaternion::operator= ( const AxisAngle axis_angle)
inline

◆ operator=() [2/5]

Quaternion& RobotDynamics::Math::Quaternion::operator= ( const Eigen::Quaterniond &  q)
inline

◆ operator=() [3/5]

Quaternion& RobotDynamics::Math::Quaternion::operator= ( const Matrix3d E)
inline

◆ operator=() [4/5]

Quaternion& RobotDynamics::Math::Quaternion::operator= ( const RobotDynamics::Math::Quaternion q)
inline

◆ operator=() [5/5]

Quaternion& RobotDynamics::Math::Quaternion::operator= ( const Vector4d q)
inline

◆ rotate()

Vector3d RobotDynamics::Math::Quaternion::rotate ( const Vector3d vec) const
inline

◆ sanitize()

void RobotDynamics::Math::Quaternion::sanitize ( )
inline

sanitize the quaternion by negating each element if the w element is less than zero

◆ slerp()

Quaternion RobotDynamics::Math::Quaternion::slerp ( double  alpha,
const Quaternion quat 
) const

From Wikipedia: In computer graphics, Slerp is shorthand for spherical linear interpolation, introduced by Ken Shoemake in the context of quaternion interpolation for the purpose of animating 3D rotation. It refers to constant-speed motion along a unit-radius great circle arc, given the ends and an interpolation parameter between 0 and 1.

Note
Only unit quaternions are valid rotations, so make sure to normalize
Parameters
alphaInterpolation parameter. Should be between 0 and 1
quatQuaternion to interpolate between
Returns
Interpolated quaternion

◆ swingTwistDecomposition()

void RobotDynamics::Math::Quaternion::swingTwistDecomposition ( const Vector3d twist_axis,
Quaternion swing,
Quaternion twist 
)
inline

Decompose a quaternion into a swing then twist quaternion where the twist is about the given axis.

  • twist_axis Unit vector for the axis of the twist, e.g. (0., 0., 1.) for the z-axis
  • swing Modified. Location for the resulting swing quaternion to be stored
  • twist Modified. Location for the resulting twist quaternion to be stored
Note
This implementation can be found in PRZEMYSLAW DOBROWOLSKI's thesis titled, "SWING-TWIST DECOMPOSITION IN CLIFFORD ALGEBRA"

◆ timeStep()

Quaternion RobotDynamics::Math::Quaternion::timeStep ( const Vector3d omega,
double  dt 
)
inline

◆ toAxisAngle()

AxisAngle RobotDynamics::Math::Quaternion::toAxisAngle ( ) const
inline

◆ toIntrinsicZYXAngles()

Vector3d RobotDynamics::Math::Quaternion::toIntrinsicZYXAngles ( double  yaw_at_pitch_singularity = 0.) const

Convert to intrinsic ZYX euler angles.

Parameters
yaw_at_pitch_singularityAt Y = +- PI/2 is a singularity in which there are multiple solutions. This will be the yaw value in the output and the roll value is dependent on this. To get the most accurate results at singularity, provide this value as close as possible to desired/reality and the resulting roll value will be near the expected

◆ transform()

void RobotDynamics::Math::Quaternion::transform ( const RobotDynamics::Math::SpatialTransform X)
inlinevirtual

Pure virtual object. This object forces objects that inherit from it to have a method that tells how that object is transformed.

Parameters
XSpatialTransform

Implements RobotDynamics::Math::TransformableGeometricObject.

◆ vec()

EIGEN_STRONG_INLINE Vector3d RobotDynamics::Math::Quaternion::vec ( ) const
inline

Get vector part.

Returns
Vector part

◆ w() [1/2]

EIGEN_STRONG_INLINE double& RobotDynamics::Math::Quaternion::w ( )
inline

◆ w() [2/2]

EIGEN_STRONG_INLINE double RobotDynamics::Math::Quaternion::w ( ) const
inline

◆ x() [1/2]

EIGEN_STRONG_INLINE double& RobotDynamics::Math::Quaternion::x ( )
inline

◆ x() [2/2]

EIGEN_STRONG_INLINE double RobotDynamics::Math::Quaternion::x ( ) const
inline

◆ y() [1/2]

EIGEN_STRONG_INLINE double& RobotDynamics::Math::Quaternion::y ( )
inline

◆ y() [2/2]

EIGEN_STRONG_INLINE double RobotDynamics::Math::Quaternion::y ( ) const
inline

◆ z() [1/2]

EIGEN_STRONG_INLINE double& RobotDynamics::Math::Quaternion::z ( )
inline

◆ z() [2/2]

EIGEN_STRONG_INLINE double RobotDynamics::Math::Quaternion::z ( ) const
inline

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