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]ᴅ.
| 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]ᴀ.
| 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.