Blender V5.0
KDL::Rotation Class Reference

represents rotations in 3 dimensional space. More...

#include <frames.hpp>

Public Member Functions

 Rotation ()
 Rotation (double Xx, double Yx, double Zx, double Xy, double Yy, double Zy, double Xz, double Yz, double Zz)
 Rotation (const Vector &x, const Vector &y, const Vector &z)
void setValue (float *oglmat)
void getValue (float *oglmat) const
Rotationoperator= (const Rotation &arg)
Vector operator* (const Vector &v) const
 Defines a multiplication R*V between a Rotation R and a Vector V. Complexity : 9M+6A.
double & operator() (int i, int j)
 Access to elements 0..2,0..2, bounds are checked when NDEBUG is not set.
double operator() (int i, int j) const
 Access to elements 0..2,0..2, bounds are checked when NDEBUG is not set.
void SetInverse ()
 Sets the value of *this to its inverse.
Rotation Inverse () const
 Gives back the inverse rotation matrix of *this.
Vector Inverse (const Vector &v) const
 The same as R.Inverse()*v but more efficient.
Wrench Inverse (const Wrench &arg) const
 The same as R.Inverse()*arg but more efficient.
Twist Inverse (const Twist &arg) const
 The same as R.Inverse()*arg but more efficient.
void DoRotX (double angle)
 The DoRot... functions apply a rotation R to *this,such that *this = *this * Rot.. DoRot... functions are only defined when they can be executed more efficiently.
void DoRotY (double angle)
 The DoRot... functions apply a rotation R to *this,such that *this = *this * Rot.. DoRot... functions are only defined when they can be executed more efficiently.
void DoRotZ (double angle)
 The DoRot... functions apply a rotation R to *this,such that *this = *this * Rot.. DoRot... functions are only defined when they can be executed more efficiently.
void Ortho ()
Vector GetRot () const
 Returns a vector with the direction of the equiv. axis and its norm is angle.
Vector2 GetXZRot () const
 Returns a 2D vector representing the equivalent rotation in the XZ plane that brings the Y axis onto the Matrix Y axis and its norm is angle.
double GetRotAngle (Vector &axis, double eps=epsilon) const
void GetEulerZYZ (double &alfa, double &beta, double &gamma) const
 Gives back the EulerZYZ convention description of the rotation matrix : First rotate around Z with alfa, then around the new Y with beta, then around new Z with gamma.
void GetRPY (double &roll, double &pitch, double &yaw) const
 Gives back a vector in RPY coordinates, variables are bound by -PI <= roll <= PI -PI <= Yaw <= PI -PI/2 <= PITCH <= PI/2.
void GetEulerZYX (double &Alfa, double &Beta, double &Gamma) const
 GetEulerZYX gets the euler ZYX parameters of a rotation : First rotate around Z with alfa, then around the new Y with beta, then around new X with gamma.
Twist operator* (const Twist &arg) const
 Transformation of the base to which the twist is expressed. Complexity : 18M+12A.
Wrench operator* (const Wrench &arg) const
 Transformation of the base to which the wrench is expressed. Complexity : 18M+12A.
Vector UnitX () const
 Access to the underlying unitvectors of the rotation matrix.
void UnitX (const Vector &X)
 Access to the underlying unitvectors of the rotation matrix.
Vector UnitY () const
 Access to the underlying unitvectors of the rotation matrix.
void UnitY (const Vector &X)
 Access to the underlying unitvectors of the rotation matrix.
Vector UnitZ () const
 Access to the underlying unitvectors of the rotation matrix.
void UnitZ (const Vector &X)
 Access to the underlying unitvectors of the rotation matrix.

Static Public Member Functions

static Rotation Identity ()
 Gives back an identity rotaton matrix.
static Rotation RotX (double angle)
 The Rot... static functions give the value of the appropriate rotation matrix back.
static Rotation RotY (double angle)
 The Rot... static functions give the value of the appropriate rotation matrix back.
static Rotation RotZ (double angle)
 The Rot... static functions give the value of the appropriate rotation matrix back.
static Rotation Rot (const Vector &rotaxis, double angle)
 Along an arbitrary axes. It is not necessary to normalize rotaxis. returns identity rotation matrix in the case that the norm of rotaxis is too small to be used.
static Rotation Rot2 (const Vector &rotvec, double angle)
 Along an arbitrary axes. rotvec should be normalized.
static Rotation EulerZYZ (double Alfa, double Beta, double Gamma)
 Gives back a rotation matrix specified with EulerZYZ convention : First rotate around Z with alfa, then around the new Y with beta, then around new Z with gamma.
static Rotation RPY (double roll, double pitch, double yaw)
 Sets the value of this object to a rotation specified with RPY convention: first rotate around X with roll, then around the old Y with pitch, then around old Z with alfa.
static Rotation EulerZYX (double Alfa, double Beta, double Gamma)
 Gives back a rotation matrix specified with EulerZYX convention : First rotate around Z with alfa, then around the new Y with beta, then around new X with gamma.

Public Attributes

double data [9]

Friends

class Frame
Rotation operator* (const Rotation &lhs, const Rotation &rhs)
bool operator== (const Rotation &a, const Rotation &b)
 do not use operator == because the definition of Equal(.,.) is slightly different. It compares whether the 2 arguments are equal in an eps-interval
bool operator!= (const Rotation &a, const Rotation &b)
 The literal inequality operator!=().

Detailed Description

represents rotations in 3 dimensional space.

This class represents a rotation matrix with the following conventions :

    Suppose V2 = R*V,                                    (1)
    V is expressed in frame B
    V2 is expressed in frame A
    This matrix R consists of 3 collumns [ X,Y,Z ],
    X,Y, and Z contain the axes of frame B, expressed in frame A
    Because of linearity expr(1) is valid.

This class only represents rotational_interpolation, not translation Two interpretations are possible for rotation angles. if you rotate with angle around X frame A to have frame B, then the result of SetRotX is equal to frame B expressed wrt A. In code:

     Rotation R;
     F_A_B = R.SetRotX(angle);

Secondly, if you take the following code :

     Vector p,p2; Rotation R;
     R.SetRotX(angle);
     p2 = R*p;

then the frame p2 is rotated around X axis with (-angle). Analogue reasonings can be applyd to SetRotY,SetRotZ,SetRot

type
Concrete implementation

Definition at line 298 of file frames.hpp.

Constructor & Destructor Documentation

◆ Rotation() [1/3]

KDL::Rotation::Rotation ( )
inline

Definition at line 303 of file frames.hpp.

Referenced by EulerZYX(), EulerZYZ(), operator()(), operator*, operator*(), operator==, Rot(), Rot2(), Rotation(), and RPY().

◆ Rotation() [2/3]

Rotation::Rotation ( double Xx,
double Yx,
double Zx,
double Xy,
double Yy,
double Zy,
double Xz,
double Yz,
double Zz )
inline

Definition at line 508 of file frames.hpp.

References b, and Rotation().

◆ Rotation() [3/3]

Rotation::Rotation ( const Vector & x,
const Vector & y,
const Vector & z )
inline

Definition at line 518 of file frames.hpp.

Member Function Documentation

◆ DoRotX()

void Rotation::DoRotX ( double angle)
inline

The DoRot... functions apply a rotation R to *this,such that *this = *this * Rot.. DoRot... functions are only defined when they can be executed more efficiently.

Definition at line 561 of file frames.hpp.

References Frame.

◆ DoRotY()

void Rotation::DoRotY ( double angle)
inline

The DoRot... functions apply a rotation R to *this,such that *this = *this * Rot.. DoRot... functions are only defined when they can be executed more efficiently.

Definition at line 577 of file frames.hpp.

◆ DoRotZ()

void Rotation::DoRotZ ( double angle)
inline

The DoRot... functions apply a rotation R to *this,such that *this = *this * Rot.. DoRot... functions are only defined when they can be executed more efficiently.

Definition at line 593 of file frames.hpp.

References Frame, and rhs.

◆ EulerZYX()

Rotation KDL::Rotation::EulerZYX ( double Alfa,
double Beta,
double Gamma )
inlinestatic

Gives back a rotation matrix specified with EulerZYX convention : First rotate around Z with alfa, then around the new Y with beta, then around new X with gamma.

closely related to RPY-convention

Definition at line 435 of file frames.hpp.

References Rotation(), and RPY().

Referenced by KDL::operator>>().

◆ EulerZYZ()

Rotation KDL::Rotation::EulerZYZ ( double Alfa,
double Beta,
double Gamma )
static

Gives back a rotation matrix specified with EulerZYZ convention : First rotate around Z with alfa, then around the new Y with beta, then around new Z with gamma.

Definition at line 220 of file frames.cpp.

References cos, Rotation(), and sin.

Referenced by KDL::operator>>().

◆ GetEulerZYX()

void KDL::Rotation::GetEulerZYX ( double & Alfa,
double & Beta,
double & Gamma ) const
inline

GetEulerZYX gets the euler ZYX parameters of a rotation : First rotate around Z with alfa, then around the new Y with beta, then around new X with gamma.

Range of the results of GetEulerZYX : -PI <= alfa <= PI -PI <= gamma <= PI -PI/2 <= beta <= PI/2

Closely related to RPY-convention.

Definition at line 450 of file frames.hpp.

References GetRPY().

◆ GetEulerZYZ()

void KDL::Rotation::GetEulerZYZ ( double & alfa,
double & beta,
double & gamma ) const

Gives back the EulerZYZ convention description of the rotation matrix : First rotate around Z with alfa, then around the new Y with beta, then around new Z with gamma.

Variables are bound by (-PI <= alfa <= PI), (0 <= beta <= PI), (-PI <= alfa <= PI)

Definition at line 233 of file frames.cpp.

References KDL::atan2(), beta(), data, KDL::epsilon, fabs(), KDL::PI, sqr, and sqrt.

◆ GetRot()

Vector KDL::Rotation::GetRot ( ) const

Returns a vector with the direction of the equiv. axis and its norm is angle.

Definition at line 297 of file frames.cpp.

References KDL::atan2(), data, KDL::Vector::data, KDL::epsilon, KDL::Vector::Norm(), and KDL::PI.

Referenced by convert_tree(), and GetJointRotation().

◆ GetRotAngle()

double KDL::Rotation::GetRotAngle ( Vector & axis,
double eps = epsilon ) const

Returns the rotation angle around the equiv. axis

Parameters
axisthe rotation axis is returned in this variable
eps: in the case of angle == 0 : rot axis is undefined and choosen to be +/- Z-axis in the case of angle == PI : 2 solutions, positive Z-component of the axis is choosen.
Returns
returns the rotation angle (between [0..PI] )

Returns the rotation angle around the equiv. axis

Parameters
axisthe rotation axis is returned in this variable
eps: in the case of angle == 0 : rot axis is undefined and choosen to be +/- Z-axis in the case of angle == PI : 2 solutions, positive Z-component of the axis is choosen.
Returns
returns the rotation angle (between [0..PI] ) /todo : Check corresponding routines in rframes and rrframes

Definition at line 354 of file frames.cpp.

References acos, angle(), data, eps, KDL::PI, sin, sqrt, x, y, and z().

◆ GetRPY()

void KDL::Rotation::GetRPY ( double & roll,
double & pitch,
double & yaw ) const

Gives back a vector in RPY coordinates, variables are bound by -PI <= roll <= PI -PI <= Yaw <= PI -PI/2 <= PITCH <= PI/2.

convention : first rotate around X with roll, then around the old Y with pitch, then around old Z with alfa

Definition at line 207 of file frames.cpp.

References KDL::atan2(), data, KDL::epsilon, fabs(), KDL::PI, KDL::sign(), sqr, and sqrt.

Referenced by GetEulerZYX().

◆ getValue()

void Rotation::getValue ( float * oglmat) const
inline

Definition at line 665 of file frames.hpp.

References b, eps, and Frame.

◆ GetXZRot()

Vector2 KDL::Rotation::GetXZRot ( ) const

Returns a 2D vector representing the equivalent rotation in the XZ plane that brings the Y axis onto the Matrix Y axis and its norm is angle.

Definition at line 330 of file frames.cpp.

References acos, data, KDL::epsilon, norm(), KDL::Vector2::Normalize(), and KDL::PI.

Referenced by GetJointRotation().

◆ Identity()

Rotation Rotation::Identity ( )
inlinestatic

Gives back an identity rotaton matrix.

Definition at line 557 of file frames.hpp.

References i.

Referenced by KDL::Frame::Inverse(), and KDL::operator>>().

◆ Inverse() [1/4]

Rotation Rotation::Inverse ( ) const
inline

Gives back the inverse rotation matrix of *this.

Definition at line 642 of file frames.hpp.

Referenced by base_callback(), and iTaSC::Armature::updateJoint().

◆ Inverse() [2/4]

Twist Rotation::Inverse ( const Twist & arg) const
inline

The same as R.Inverse()*arg but more efficient.

Definition at line 201 of file frames.hpp.

◆ Inverse() [3/4]

Vector Rotation::Inverse ( const Vector & v) const
inline

The same as R.Inverse()*v but more efficient.

Definition at line 649 of file frames.hpp.

References Frame.

◆ Inverse() [4/4]

Wrench Rotation::Inverse ( const Wrench & arg) const
inline

The same as R.Inverse()*arg but more efficient.

Definition at line 196 of file frames.hpp.

◆ operator()() [1/2]

double & Rotation::operator() ( int i,
int j )
inline

Access to elements 0..2,0..2, bounds are checked when NDEBUG is not set.

Definition at line 498 of file frames.hpp.

References data.

◆ operator()() [2/2]

double Rotation::operator() ( int i,
int j ) const
inline

Access to elements 0..2,0..2, bounds are checked when NDEBUG is not set.

Definition at line 503 of file frames.hpp.

References b, and Rotation().

◆ operator*() [1/3]

Twist Rotation::operator* ( const Twist & arg) const
inline

Transformation of the base to which the twist is expressed. Complexity : 18M+12A.

See also
Frame*Twist for a transformation that also transforms the velocity reference point.

Definition at line 540 of file frames.hpp.

◆ operator*() [2/3]

Vector Rotation::operator* ( const Vector & v) const
inline

Defines a multiplication R*V between a Rotation R and a Vector V. Complexity : 9M+6A.

Definition at line 531 of file frames.hpp.

References R, Rotation(), and V.

◆ operator*() [3/3]

Wrench Rotation::operator* ( const Wrench & arg) const
inline

Transformation of the base to which the wrench is expressed. Complexity : 18M+12A.

See also
Frame*Wrench for a transformation that also transforms the force reference point.

Definition at line 549 of file frames.hpp.

References i.

◆ operator=()

Rotation & Rotation::operator= ( const Rotation & arg)
inline

Definition at line 525 of file frames.hpp.

◆ Ortho()

void KDL::Rotation::Ortho ( )

Definition at line 169 of file frames.cpp.

References data, e, sqr, and sqrt.

◆ Rot()

Rotation KDL::Rotation::Rot ( const Vector & rotaxis,
double angle )
static

Along an arbitrary axes. It is not necessary to normalize rotaxis. returns identity rotation matrix in the case that the norm of rotaxis is too small to be used.

Definition at line 250 of file frames.cpp.

References angle(), cos, KDL::Vector::Normalize(), Rotation(), and sin.

Referenced by KDL::operator>>().

◆ Rot2()

Rotation KDL::Rotation::Rot2 ( const Vector & rotvec,
double angle )
static

Along an arbitrary axes. rotvec should be normalized.

Definition at line 273 of file frames.cpp.

References angle(), cos, Rotation(), and sin.

◆ RotX()

Rotation Rotation::RotX ( double angle)
inlinestatic

The Rot... static functions give the value of the appropriate rotation matrix back.

Definition at line 610 of file frames.hpp.

Referenced by KDL::Joint::pose(), and RemoveEulerAngleFromMatrix().

◆ RotY()

Rotation Rotation::RotY ( double angle)
inlinestatic

The Rot... static functions give the value of the appropriate rotation matrix back.

Definition at line 615 of file frames.hpp.

Referenced by KDL::Joint::pose(), and RemoveEulerAngleFromMatrix().

◆ RotZ()

Rotation Rotation::RotZ ( double angle)
inlinestatic

The Rot... static functions give the value of the appropriate rotation matrix back.

Definition at line 620 of file frames.hpp.

Referenced by KDL::Joint::pose(), and RemoveEulerAngleFromMatrix().

◆ RPY()

Rotation KDL::Rotation::RPY ( double roll,
double pitch,
double yaw )
static

Sets the value of this object to a rotation specified with RPY convention: first rotate around X with roll, then around the old Y with pitch, then around old Z with alfa.

Definition at line 195 of file frames.cpp.

References cos, Rotation(), and sin.

Referenced by EulerZYX(), and KDL::operator>>().

◆ SetInverse()

void Rotation::SetInverse ( )
inline

Sets the value of *this to its inverse.

Definition at line 673 of file frames.hpp.

◆ setValue()

void Rotation::setValue ( float * oglmat)
inline

Definition at line 657 of file frames.hpp.

References Frame.

Referenced by convert_pose().

◆ UnitX() [1/2]

Vector KDL::Rotation::UnitX ( ) const
inline

Access to the underlying unitvectors of the rotation matrix.

Definition at line 467 of file frames.hpp.

Referenced by base_callback().

◆ UnitX() [2/2]

void KDL::Rotation::UnitX ( const Vector & X)
inline

Access to the underlying unitvectors of the rotation matrix.

Definition at line 472 of file frames.hpp.

References data, and X.

◆ UnitY() [1/2]

Vector KDL::Rotation::UnitY ( ) const
inline

Access to the underlying unitvectors of the rotation matrix.

Definition at line 479 of file frames.hpp.

References data.

Referenced by base_callback().

◆ UnitY() [2/2]

void KDL::Rotation::UnitY ( const Vector & X)
inline

Access to the underlying unitvectors of the rotation matrix.

Definition at line 484 of file frames.hpp.

References X.

◆ UnitZ() [1/2]

Vector KDL::Rotation::UnitZ ( ) const
inline

Access to the underlying unitvectors of the rotation matrix.

Definition at line 491 of file frames.hpp.

References data.

Referenced by base_callback().

◆ UnitZ() [2/2]

void KDL::Rotation::UnitZ ( const Vector & X)
inline

Access to the underlying unitvectors of the rotation matrix.

Definition at line 496 of file frames.hpp.

References data, and X.

◆ Frame

friend class Frame
friend

Definition at line 511 of file frames.hpp.

References Frame.

Referenced by DoRotX(), DoRotZ(), Frame, getValue(), Inverse(), and setValue().

◆ operator!=

bool operator!= ( const Rotation & a,
const Rotation & b )
friend

The literal inequality operator!=().

Definition at line 1396 of file frames.hpp.

◆ operator*

Rotation operator* ( const Rotation & lhs,
const Rotation & rhs )
friend

Definition at line 177 of file frames.cpp.

References data, rhs, and Rotation().

◆ operator==

bool operator== ( const Rotation & a,
const Rotation & b )
friend

do not use operator == because the definition of Equal(.,.) is slightly different. It compares whether the 2 arguments are equal in an eps-interval

The literal equality operator==(), also identical.

Definition at line 377 of file frames.cpp.

References b, data, KDL::Equal(), and Rotation().

Member Data Documentation

◆ data

double KDL::Rotation::data[9]

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