This class represents the orientation between two arbitrary frames A and D associated with a Space-fixed (extrinsic) X-Y-Z rotation by "roll-pitch-yaw" angles [r, p, y]
, which is equivalent to a Body-fixed (intrinsic) Z-Y-X rotation by "yaw-pitch-roll" angles [y, p, r]
.
The rotation matrix R_AD
associated with this roll-pitch-yaw [r, p, y]
rotation sequence is equal to the matrix multiplication shown below.
Di = Ci = Bi = Ai (i = x, y, z)
where Dx, Dy, Dz and Ax, Ay, Az are orthogonal unit vectors fixed in frames D and A respectively. Similarly for Bx, By, Bz and Cx, Cy, Cz in frame B, C. Then D is subjected to successive right-handed rotations relative to A. r
about Dx = Cx
. Note: D and C are no longer aligned. p
about Cy = By
. Note: C and B are no longer aligned. y
about Bz = Az
. Note: B and A are no longer aligned. The monogram notation for the rotation matrix relating A to D is R_AD
.T | The scalar type, which must be one of the default scalars. |
#include <drake/math/roll_pitch_yaw.h>
Public Member Functions | |
RollPitchYaw (const Vector3< T > &rpy) | |
Constructs a RollPitchYaw from a 3x1 array of angles. More... | |
RollPitchYaw (const T &roll, const T &pitch, const T &yaw) | |
Constructs a RollPitchYaw from roll, pitch, yaw angles (radian units). More... | |
RollPitchYaw (const RotationMatrix< T > &R) | |
Uses a RotationMatrix to construct a RollPitchYaw with roll-pitch-yaw angles [r, p, y] in the range -π <= r <= π , -π/2 <= p <= π/2 , -π <= y <= π . More... | |
RollPitchYaw (const Eigen::Quaternion< T > &quaternion) | |
Uses a Quaternion to construct a RollPitchYaw with roll-pitch-yaw angles [r, p, y] in the range -π <= r <= π , -π/2 <= p <= π/2 , -π <= y <= π . More... | |
RollPitchYaw< T > & | set (const Vector3< T > &rpy) |
Sets this RollPitchYaw from a 3x1 array of angles. More... | |
RollPitchYaw< T > & | set (const T &roll, const T &pitch, const T &yaw) |
Sets this RollPitchYaw from roll, pitch, yaw angles (units of radians). More... | |
void | SetFromQuaternion (const Eigen::Quaternion< T > &quaternion) |
Uses a Quaternion to set this RollPitchYaw with roll-pitch-yaw angles [r, p, y] in the range -π <= r <= π , -π/2 <= p <= π/2 , -π <= y <= π . More... | |
void | SetFromRotationMatrix (const RotationMatrix< T > &R) |
Uses a high-accuracy efficient algorithm to set the roll-pitch-yaw angles [r, p, y] that underlie this @RollPitchYaw, even when the pitch angle p is very near a singularity (when p is within 1E-6 of π/2 or -π/2). More... | |
const Vector3< T > & | vector () const |
Returns the Vector3 underlying this RollPitchYaw. More... | |
const T & | roll_angle () const |
Returns the roll-angle underlying this RollPitchYaw. More... | |
const T & | pitch_angle () const |
Returns the pitch-angle underlying this RollPitchYaw. More... | |
const T & | yaw_angle () const |
Returns the yaw-angle underlying this RollPitchYaw. More... | |
void | set_roll_angle (const T &r) |
Set the roll-angle underlying this RollPitchYaw. More... | |
void | set_pitch_angle (const T &p) |
Set the pitch-angle underlying this RollPitchYaw. More... | |
void | set_yaw_angle (const T &y) |
Set the yaw-angle underlying this RollPitchYaw. More... | |
Eigen::Quaternion< T > | ToQuaternion () const |
Returns a quaternion representation of this RollPitchYaw. More... | |
RotationMatrix< T > | ToRotationMatrix () const |
Returns the RotationMatrix representation of this RollPitchYaw. More... | |
Matrix3< T > | ToMatrix3ViaRotationMatrix () const |
Returns the 3x3 matrix representation of the RotationMatrix that corresponds to this RollPitchYaw. More... | |
boolean< T > | IsNearlyEqualTo (const RollPitchYaw< T > &other, double tolerance) const |
Compares each element of this to the corresponding element of other to check if they are the same to within a specified tolerance . More... | |
boolean< T > | IsNearlySameOrientation (const RollPitchYaw< T > &other, double tolerance) const |
Compares each element of the RotationMatrix R1 produced by this to the corresponding element of the RotationMatrix R2 produced by other to check if they are the same to within a specified tolerance . More... | |
boolean< T > | IsRollPitchYawInCanonicalRange () const |
Returns true if roll-pitch-yaw angles [r, p, y] are in the range -π <= r <= π , -π/2 <= p <= π/2 , -π <= y <= π . More... | |
boolean< T > | DoesPitchAngleViolateGimbalLockTolerance () const |
Returns true if the pitch-angle p is within an internally-defined tolerance of gimbal-lock. More... | |
Matrix3< T > | CalcRotationMatrixDt (const Vector3< T > &rpyDt) const |
Forms Ṙ, the ordinary derivative of the RotationMatrix R with respect to an independent variable t (t usually denotes time) and R is the RotationMatrix formed by this RollPitchYaw. More... | |
Vector3< T > | CalcAngularVelocityInParentFromRpyDt (const Vector3< T > &rpyDt) const |
Calculates angular velocity from this RollPitchYaw whose roll-pitch-yaw angles [r; p; y] relate the orientation of two generic frames A and D. More... | |
Vector3< T > | CalcAngularVelocityInChildFromRpyDt (const Vector3< T > &rpyDt) const |
Calculates angular velocity from this RollPitchYaw whose roll-pitch-yaw angles [r; p; y] relate the orientation of two generic frames A and D. More... | |
Vector3< T > | CalcRpyDtFromAngularVelocityInParent (const Vector3< T > &w_AD_A) const |
Uses angular velocity to compute the 1ˢᵗ time-derivative of this RollPitchYaw whose angles [r; p; y] orient two generic frames A and D. More... | |
Vector3< T > | CalcRpyDtFromAngularVelocityInChild (const Vector3< T > &w_AD_D) const |
Uses angular velocity to compute the 1ˢᵗ time-derivative of this RollPitchYaw whose angles [r; p; y] orient two generic frames A and D. More... | |
const Matrix3< T > | CalcMatrixRelatingRpyDtToAngularVelocityInParent () const |
For this RollPitchYaw with roll-pitch-yaw angles [r; p; y] which relate the orientation of two generic frames A and D, returns the 3x3 matrix Np relating ṙ, ṗ, ẏ to ωx, ωy, ωz, where frame D's angular velocity in A, expressed in "parent" A is w_AD_A = ωx Ax + ωy Ay + ωz Az . More... | |
const Matrix3< T > | CalcMatrixRelatingRpyDtToAngularVelocityInChild () const |
For this RollPitchYaw with roll-pitch-yaw angles [r; p; y] which relate the orientation of two generic frames A and D, returns the 3x3 matrix Nc relating ṙ, ṗ, ẏ to ω0, ω1, ω2, where frame D's angular velocity in A, expressed in "child" D is w_AD_D = ω0 Dx + ω1 Dy + ω2 Dz . More... | |
Vector3< T > | CalcRpyDDtFromRpyDtAndAngularAccelInParent (const Vector3< T > &rpyDt, const Vector3< T > &alpha_AD_A) const |
Uses angular acceleration to compute the 2ⁿᵈ time-derivative of this RollPitchYaw whose angles [r; p; y] orient two generic frames A and D. More... | |
Vector3< T > | CalcRpyDDtFromAngularAccelInChild (const Vector3< T > &rpyDt, const Vector3< T > &alpha_AD_D) const |
Uses angular acceleration to compute the 2ⁿᵈ time-derivative of this RollPitchYaw whose angles [r; p; y] orient two generic frames A and D. More... | |
Implements CopyConstructible, CopyAssignable, MoveConstructible, MoveAssignable | |
RollPitchYaw (const RollPitchYaw &)=default | |
RollPitchYaw & | operator= (const RollPitchYaw &)=default |
RollPitchYaw (RollPitchYaw &&)=default | |
RollPitchYaw & | operator= (RollPitchYaw &&)=default |
Static Public Member Functions | |
static boolean< T > | DoesCosPitchAngleViolateGimbalLockTolerance (const T &cos_pitch_angle) |
Returns true if the pitch-angle p is close to gimbal-lock, which means cos(p) ≈ 0 or p ≈ (n*π + π/2) where n = 0, ±1, ±2, ... . More... | |
static double | GimbalLockPitchAngleTolerance () |
Returns the internally-defined allowable closeness (in radians) of the pitch angle p to gimbal-lock, i.e., the allowable proximity of p to (n*π + π/2) where n = 0, ±1, ±2, ... . More... | |
static boolean< T > | IsValid (const Vector3< T > &rpy) |
Returns true if rpy contains valid roll, pitch, yaw angles. More... | |
Friends | |
template<class HashAlgorithm > | |
void | hash_append (HashAlgorithm &hasher, const RollPitchYaw &rpy) noexcept |
Implements the hash_append generic hashing concept. More... | |
Related Functions | |
(Note that these are not member functions.) | |
using | RollPitchYawd = RollPitchYaw< double > |
Abbreviation (alias/typedef) for a RollPitchYaw double scalar type. More... | |
template<typename T > | |
std::ostream & | operator<< (std::ostream &out, const RollPitchYaw< T > &rpy) |
Stream insertion operator to write an instance of RollPitchYaw into a std::ostream . More... | |
|
default |
|
default |
|
explicit |
Constructs a RollPitchYaw from a 3x1 array of angles.
[in] | rpy | 3x1 array with roll, pitch, yaw angles (units of radians). |
std::exception | in debug builds if !IsValid(rpy). |
RollPitchYaw | ( | const T & | roll, |
const T & | pitch, | ||
const T & | yaw | ||
) |
Constructs a RollPitchYaw from roll, pitch, yaw angles (radian units).
[in] | roll | x-directed angle in SpaceXYZ rotation sequence. |
[in] | pitch | y-directed angle in SpaceXYZ rotation sequence. |
[in] | yaw | z-directed angle in SpaceXYZ rotation sequence. |
std::exception | in debug builds if !IsValid(Vector3<T>(roll, pitch, yaw)). |
|
explicit |
Uses a RotationMatrix to construct a RollPitchYaw with roll-pitch-yaw angles [r, p, y]
in the range -π <= r <= π
, -π/2 <= p <= π/2
, -π <= y <= π
.
[in] | R | a RotationMatrix. |
|
explicit |
Uses a Quaternion to construct a RollPitchYaw with roll-pitch-yaw angles [r, p, y]
in the range -π <= r <= π
, -π/2 <= p <= π/2
, -π <= y <= π
.
[in] | quaternion | unit Quaternion. |
std::exception | in debug builds if !IsValid(rpy). |
Calculates angular velocity from this
RollPitchYaw whose roll-pitch-yaw angles [r; p; y]
relate the orientation of two generic frames A and D.
[in] | rpyDt | Time-derivative of [r; p; y] , i.e., [ṙ; ṗ; ẏ] . |
w_AD_D = ω0 Dx + ω1 Dy + ω2 Dz
, and where [ω0; ω1; ω2]ᴅ is calculated via the 3x3 matrix Nc⁻¹ (the inverse of the matrix Nc documented in CalcMatrixRelatingRpyDtToAngularVelocityInChild()). Calculates angular velocity from this
RollPitchYaw whose roll-pitch-yaw angles [r; p; y]
relate the orientation of two generic frames A and D.
[in] | rpyDt | Time-derivative of [r; p; y] , i.e., [ṙ; ṗ; ẏ] . |
w_AD_A = ωx Ax + ωy Ay + ωz Az
, and where [ωx; ωy; ωz]ᴀ is calculated via the the 3x3 matrix Np⁻¹ (the inverse of the matrix Np documented in CalcMatrixRelatingRpyDtToAngularVelocityInParent()). const Matrix3<T> CalcMatrixRelatingRpyDtToAngularVelocityInChild | ( | ) | const |
For this
RollPitchYaw with roll-pitch-yaw angles [r; p; y] which relate the orientation of two generic frames A and D, returns the 3x3 matrix Nc relating ṙ, ṗ, ẏ to ω0, ω1, ω2, where frame D's angular velocity in A, expressed in "child" D is w_AD_D = ω0 Dx + ω1 Dy + ω2 Dz
.
Hence, Nc contains partial derivatives of [ṙ, ṗ, ẏ] with respect to [ω0; ω1; ω2]ᴅ.
[in] | function_name | name of the calling function/method. |
std::exception | if cos(p) ≈ 0 (p is near gimbal-lock). |
p
is zero [i.e., cos(p) = 0
]. This problem (called "gimbal lock") occurs when p = n π + π / 2
, where n is any integer. There are associated precision problems (inaccuracies) in the neighborhood of these pitch angles, i.e., when cos(p) ≈ 0
. const Matrix3<T> CalcMatrixRelatingRpyDtToAngularVelocityInParent | ( | ) | const |
For this
RollPitchYaw with roll-pitch-yaw angles [r; p; y] which relate the orientation of two generic frames A and D, returns the 3x3 matrix Np relating ṙ, ṗ, ẏ to ωx, ωy, ωz, where frame D's angular velocity in A, expressed in "parent" A is w_AD_A = ωx Ax + ωy Ay + ωz Az
.
Hence, Np contains partial derivatives of [ṙ, ṗ, ẏ] with respect to [ωx; ωy; ωz]ᴀ.
[in] | function_name | name of the calling function/method. |
std::exception | if cos(p) ≈ 0 (p is near gimbal-lock). |
p
is zero [i.e., cos(p) = 0
]. This problem (called "gimbal lock") occurs when p = n π + π / 2
, where n is any integer. There are associated precision problems (inaccuracies) in the neighborhood of these pitch angles, i.e., when cos(p) ≈ 0
. Forms Ṙ, the ordinary derivative of the RotationMatrix R
with respect to an independent variable t
(t
usually denotes time) and R
is the RotationMatrix formed by this
RollPitchYaw.
The roll-pitch-yaw angles r, p, y are regarded as functions of t
[i.e., r(t), p(t), y(t)].
[in] | rpyDt | Ordinary derivative of rpy with respect to an independent variable t (t usually denotes time, but not necessarily). |
R
with respect to t
, calculated as Ṙ = ∂R/∂r * ṙ + ∂R/∂p * ṗ + ∂R/∂y * ẏ. In other words, the returned (i, j) element is ∂Rij/∂r * ṙ + ∂Rij/∂p * ṗ + ∂Rij/∂y * ẏ. Vector3<T> CalcRpyDDtFromAngularAccelInChild | ( | const Vector3< T > & | rpyDt, |
const Vector3< T > & | alpha_AD_D | ||
) | const |
Uses angular acceleration to compute the 2ⁿᵈ time-derivative of this
RollPitchYaw whose angles [r; p; y]
orient two generic frames A and D.
[in] | rpyDt | time-derivative of [r; p; y] , i.e., [ṙ; ṗ; ẏ] . |
[in] | alpha_AD_D,frame | D's angular acceleration in frame A, expressed in frame D. |
[r̈, p̈, ÿ]
, the 2ⁿᵈ time-derivative of this
RollPitchYaw. std::exception | if cos(p) ≈ 0 (p is near gimbal-lock). |
p
is zero [i.e., cos(p) = 0
]. This problem (called "gimbal lock") occurs when p = n π + π / 2
, where n is any integer. There are associated precision problems (inaccuracies) in the neighborhood of these pitch angles, i.e., when cos(p) ≈ 0
. Vector3<T> CalcRpyDDtFromRpyDtAndAngularAccelInParent | ( | const Vector3< T > & | rpyDt, |
const Vector3< T > & | alpha_AD_A | ||
) | const |
Uses angular acceleration to compute the 2ⁿᵈ time-derivative of this
RollPitchYaw whose angles [r; p; y]
orient two generic frames A and D.
[in] | rpyDt | time-derivative of [r; p; y] , i.e., [ṙ; ṗ; ẏ] . |
[in] | alpha_AD_A,frame | D's angular acceleration in frame A, expressed in frame A. |
[r̈, p̈, ÿ]
, the 2ⁿᵈ time-derivative of this
RollPitchYaw. std::exception | if cos(p) ≈ 0 (p is near gimbal-lock). |
p
is zero [i.e., cos(p) = 0
]. This problem (called "gimbal lock") occurs when p = n π + π / 2
, where n is any integer. There are associated precision problems (inaccuracies) in the neighborhood of these pitch angles, i.e., when cos(p) ≈ 0
. Uses angular velocity to compute the 1ˢᵗ time-derivative of this
RollPitchYaw whose angles [r; p; y]
orient two generic frames A and D.
[in] | w_AD_D,frame | D's angular velocity in frame A, expressed in D. |
[ṙ; ṗ; ẏ]
, the 1ˢᵗ time-derivative of this
RollPitchYaw. std::exception | if cos(p) ≈ 0 (p is near gimbal-lock). |
Uses angular velocity to compute the 1ˢᵗ time-derivative of this
RollPitchYaw whose angles [r; p; y]
orient two generic frames A and D.
[in] | w_AD_A,frame | D's angular velocity in frame A, expressed in A. |
[ṙ; ṗ; ẏ]
, the 1ˢᵗ time-derivative of this
RollPitchYaw. std::exception | if cos(p) ≈ 0 (p is near gimbal-lock). |
|
static |
Returns true if the pitch-angle p
is close to gimbal-lock, which means cos(p) ≈ 0
or p ≈ (n*π + π/2)
where n = 0, ±1, ±2, ...
.
More specifically, returns true if abs(cos_pitch_angle)
is less than an internally-defined tolerance of gimbal-lock.
[in] | cos_pitch_angle | cosine of the pitch angle, i.e., cos(p) . |
boolean<T> DoesPitchAngleViolateGimbalLockTolerance | ( | ) | const |
Returns true if the pitch-angle p
is within an internally-defined tolerance of gimbal-lock.
In other words, this method returns true if p ≈ (n*π + π/2)
where n = 0, ±1, ±2, ...
.
|
static |
Returns the internally-defined allowable closeness (in radians) of the pitch angle p
to gimbal-lock, i.e., the allowable proximity of p
to (n*π + π/2)
where n = 0, ±1, ±2, ...
.
boolean<T> IsNearlyEqualTo | ( | const RollPitchYaw< T > & | other, |
double | tolerance | ||
) | const |
Compares each element of this
to the corresponding element of other
to check if they are the same to within a specified tolerance
.
[in] | other | RollPitchYaw to compare to this . |
[in] | tolerance | maximum allowable absolute difference between the matrix elements in this and other . |
true
if ‖this - other‖∞ <= tolerance
. boolean<T> IsNearlySameOrientation | ( | const RollPitchYaw< T > & | other, |
double | tolerance | ||
) | const |
Compares each element of the RotationMatrix R1 produced by this
to the corresponding element of the RotationMatrix R2 produced by other
to check if they are the same to within a specified tolerance
.
[in] | other | RollPitchYaw to compare to this . |
[in] | tolerance | maximum allowable absolute difference between R1, R2. |
true
if ‖R1 - R2‖∞ <= tolerance
. boolean<T> IsRollPitchYawInCanonicalRange | ( | ) | const |
Returns true if roll-pitch-yaw angles [r, p, y]
are in the range -π <= r <= π
, -π/2 <= p <= π/2
, -π <= y <= π
.
Returns true if rpy
contains valid roll, pitch, yaw angles.
[in] | rpy | allegedly valid roll, pitch, yaw angles. |
|
default |
|
default |
const T& pitch_angle | ( | ) | const |
Returns the pitch-angle underlying this
RollPitchYaw.
const T& roll_angle | ( | ) | const |
Returns the roll-angle underlying this
RollPitchYaw.
RollPitchYaw<T>& set | ( | const Vector3< T > & | rpy | ) |
Sets this
RollPitchYaw from a 3x1 array of angles.
[in] | rpy | 3x1 array with roll, pitch, yaw angles (units of radians). |
std::exception | in debug builds if !IsValid(rpy). |
RollPitchYaw<T>& set | ( | const T & | roll, |
const T & | pitch, | ||
const T & | yaw | ||
) |
Sets this
RollPitchYaw from roll, pitch, yaw angles (units of radians).
[in] | roll | x-directed angle in SpaceXYZ rotation sequence. |
[in] | pitch | y-directed angle in SpaceXYZ rotation sequence. |
[in] | yaw | z-directed angle in SpaceXYZ rotation sequence. |
std::exception | in debug builds if !IsValid(Vector3<T>(roll, pitch, yaw)). |
void set_pitch_angle | ( | const T & | p | ) |
Set the pitch-angle underlying this
RollPitchYaw.
[in] | p | pitch angle (in units of radians). |
void set_roll_angle | ( | const T & | r | ) |
Set the roll-angle underlying this
RollPitchYaw.
[in] | r | roll angle (in units of radians). |
void set_yaw_angle | ( | const T & | y | ) |
Set the yaw-angle underlying this
RollPitchYaw.
[in] | y | yaw angle (in units of radians). |
void SetFromQuaternion | ( | const Eigen::Quaternion< T > & | quaternion | ) |
Uses a Quaternion to set this
RollPitchYaw with roll-pitch-yaw angles [r, p, y]
in the range -π <= r <= π
, -π/2 <= p <= π/2
, -π <= y <= π
.
[in] | quaternion | unit Quaternion. |
std::exception | in debug builds if !IsValid(rpy). |
void SetFromRotationMatrix | ( | const RotationMatrix< T > & | R | ) |
Uses a high-accuracy efficient algorithm to set the roll-pitch-yaw angles [r, p, y]
that underlie this
@RollPitchYaw, even when the pitch angle p is very near a singularity (when p is within 1E-6 of π/2 or -π/2).
After calling this method, the underlying roll-pitch-yaw [r, p, y]
has range -π <= r <= π
, -π/2 <= p <= π/2
, -π <= y <= π
.
[in] | R | a RotationMatrix. |
Matrix3<T> ToMatrix3ViaRotationMatrix | ( | ) | const |
Returns the 3x3 matrix representation of the RotationMatrix that corresponds to this
RollPitchYaw.
This is a convenient "sugar" method that is exactly equivalent to RotationMatrix(rpy).ToMatrix3().
Eigen::Quaternion<T> ToQuaternion | ( | ) | const |
Returns a quaternion representation of this
RollPitchYaw.
RotationMatrix<T> ToRotationMatrix | ( | ) | const |
Returns the RotationMatrix representation of this
RollPitchYaw.
const Vector3<T>& vector | ( | ) | const |
Returns the Vector3 underlying this
RollPitchYaw.
const T& yaw_angle | ( | ) | const |
Returns the yaw-angle underlying this
RollPitchYaw.
|
friend |
Implements the hash_append generic hashing concept.
|
related |
Stream insertion operator to write an instance of RollPitchYaw into a std::ostream
.
Especially useful for debugging.
|
related |
Abbreviation (alias/typedef) for a RollPitchYaw double scalar type.