libxr
Embedded C++ framework for bare-metal, RTOS and Linux
Loading...
Searching...
No Matches
LibXR::EulerAngle< Scalar > Class Template Reference

表示欧拉角的类,用于描述3D旋转。 Class representing Euler angles for 3D rotation. More...

#include <transform.hpp>

Public Member Functions

 EulerAngle ()
 默认构造函数,初始化所有角度为零。 Default constructor initializing all angles to zero.
 
 EulerAngle (Scalar roll, Scalar pitch, Scalar yaw)
 使用指定角度构造欧拉角对象。 Constructs an Euler angle object with given angles.
 
 EulerAngle (const Eigen::Matrix< Scalar, 3, 1 > &p)
 通过 Eigen 3D 向量构造欧拉角对象。 Constructs an Euler angle object using an Eigen 3D vector.
 
 EulerAngle (const EulerAngle &p)
 拷贝构造函数 / Copy constructor.
 
Scalar & Roll () noexcept
 
const Scalar & Roll () const noexcept
 
Scalar & Pitch () noexcept
 
const Scalar & Pitch () const noexcept
 
Scalar & Yaw () noexcept
 
const Scalar & Yaw () const noexcept
 
template<typename T , std::enable_if_t< std::is_same< T, Scalar >::value||std::is_same< T, float >::value||std::is_same< T, double >::value, int > = 0>
 EulerAngle (const T(&data)[3])
 通过 3 元素数组构造欧拉角对象。 Constructs an Euler angle object using a 3-element array.
 
 operator Eigen::Matrix< Scalar, 3, 1 > () const
 转换为 Eigen 3D 向量 / Converts to an Eigen 3D vector.
 
Scalar operator() (int i) const
 获取欧拉角的某个分量 / Retrieves a specific Euler angle component.
 
EulerAngle & operator= (const Eigen::Matrix< Scalar, 3, 1 > &p)
 赋值运算符,从 Eigen 3D 向量赋值。 Assignment operator from an Eigen 3D vector.
 
EulerAngle & operator= (const EulerAngle &p)
 赋值运算符,从另一个 EulerAngle 赋值。 Assignment operator from another EulerAngle.
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrix () const
 转换为旋转矩阵,默认使用 ZYX 顺序。 Converts to a rotation matrix using the ZYX order by default.
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixZYX () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixZXY () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixYXZ () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixYZX () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixXYZ () const
 
Eigen::Matrix< Scalar, 3, 3 > ToRotationMatrixXZY () const
 
Eigen::Quaternion< Scalar > ToQuaternion () const
 转换为四元数,默认使用 ZYX 顺序。 Converts to a quaternion using the ZYX order by default.
 
Eigen::Quaternion< Scalar > ToQuaternionXYZ () const
 按 XYZ 顺序转换为四元数。 Converts to a quaternion using the XYZ order.
 
Eigen::Quaternion< Scalar > ToQuaternionXZY () const
 
Eigen::Quaternion< Scalar > ToQuaternionYXZ () const
 
Eigen::Quaternion< Scalar > ToQuaternionYZX () const
 
Eigen::Quaternion< Scalar > ToQuaternionZXY () const
 
Eigen::Quaternion< Scalar > ToQuaternionZYX () const
 

Public Attributes

Scalar data_ [3]
 存储欧拉角的数组 / Array storing Euler angles.
 

Detailed Description

template<typename Scalar>
class LibXR::EulerAngle< Scalar >

表示欧拉角的类,用于描述3D旋转。 Class representing Euler angles for 3D rotation.

三个分量依次为 roll(绕 X 轴)、pitch(绕 Y 轴)和 yaw(绕 Z 轴),单位为弧度。 ToRotationMatrixABC() 返回 R_A·R_B·R_C,其中 R_X、R_Y、R_Z 是绕对应坐标轴分别转过 roll、pitch、yaw 的基本旋转矩阵,例如 ToRotationMatrixXYZ() 等于 Rx(roll)·Ry(pitch)·Rz(yaw)。作用于列向量时,这相当于先绕 A 轴、再绕转动后的 B 轴、 最后绕转动后的 C 轴的内旋,也相当于依次绕固定的 C、B、A 轴的外旋。默认顺序 ZYX 即 先 yaw、再 pitch、最后 roll 的内旋。ToQuaternionABC() 表示同一个旋转; RotationMatrix 和 Quaternion 的 ToEulerAngleABC() 按同一约定求回三个角。

The three components are roll (about X), pitch (about Y) and yaw (about Z), in radians. ToRotationMatrixABC() returns R_A·R_B·R_C, where R_X, R_Y and R_Z are the elementary rotations by roll, pitch and yaw about the corresponding axes; for example ToRotationMatrixXYZ() equals Rx(roll)·Ry(pitch)·Rz(yaw). Applied to column vectors, this is an intrinsic rotation about A, then the rotated B, then the rotated C, which is the same as an extrinsic rotation about the fixed axes C, B and A in that order. The default order ZYX is the intrinsic yaw, pitch, roll sequence. ToQuaternionABC() represents the same rotation, and ToEulerAngleABC() of RotationMatrix and Quaternion recovers the angles under the same convention.

Template Parameters
Scalar数据类型,如 float 或 double / Data type, such as float or double.

Definition at line 371 of file transform.hpp.

Constructor & Destructor Documentation

◆ EulerAngle() [1/5]

template<typename Scalar >
LibXR::EulerAngle< Scalar >::EulerAngle ( )
inline

默认构造函数,初始化所有角度为零。 Default constructor initializing all angles to zero.

Definition at line 378 of file transform.hpp.

378: data_{0, 0, 0} {}
Scalar data_[3]
存储欧拉角的数组 / Array storing Euler angles.

◆ EulerAngle() [2/5]

template<typename Scalar >
LibXR::EulerAngle< Scalar >::EulerAngle ( Scalar roll,
Scalar pitch,
Scalar yaw )
inline

使用指定角度构造欧拉角对象。 Constructs an Euler angle object with given angles.

Parameters
roll绕 X 轴的角度 / Angle about the X-axis.
pitch绕 Y 轴的角度 / Angle about the Y-axis.
yaw绕 Z 轴的角度 / Angle about the Z-axis.

Definition at line 387 of file transform.hpp.

387: data_{roll, pitch, yaw} {}

◆ EulerAngle() [3/5]

template<typename Scalar >
LibXR::EulerAngle< Scalar >::EulerAngle ( const Eigen::Matrix< Scalar, 3, 1 > & p)
inline

通过 Eigen 3D 向量构造欧拉角对象。 Constructs an Euler angle object using an Eigen 3D vector.

Parameters
p含有 (roll, pitch, yaw) 的向量 / Vector containing (roll, pitch, yaw).

Definition at line 394 of file transform.hpp.

394: data_{p.x(), p.y(), p.z()} {}

◆ EulerAngle() [4/5]

template<typename Scalar >
LibXR::EulerAngle< Scalar >::EulerAngle ( const EulerAngle< Scalar > & p)
inline

拷贝构造函数 / Copy constructor.

Parameters
p另一个 EulerAngle 对象 / Another EulerAngle object.

Definition at line 400 of file transform.hpp.

400: data_{p.data_[0], p.data_[1], p.data_[2]} {}

◆ EulerAngle() [5/5]

template<typename Scalar >
template<typename T , std::enable_if_t< std::is_same< T, Scalar >::value||std::is_same< T, float >::value||std::is_same< T, double >::value, int > = 0>
LibXR::EulerAngle< Scalar >::EulerAngle ( const T(&) data[3])
inline

通过 3 元素数组构造欧拉角对象。 Constructs an Euler angle object using a 3-element array.

Template Parameters
T数据类型,支持 Scalar、float 或 double。 Data type, supporting Scalar, float, or double.
Parameters
data存储 (roll, pitch, yaw) 的数组 / Array storing (roll, pitch, yaw).

Definition at line 420 of file transform.hpp.

420 : data_{data[0], data[1], data[2]}
421 {
422 }

Member Function Documentation

◆ operator Eigen::Matrix< Scalar, 3, 1 >()

template<typename Scalar >
LibXR::EulerAngle< Scalar >::operator Eigen::Matrix< Scalar, 3, 1 > ( ) const
inline

转换为 Eigen 3D 向量 / Converts to an Eigen 3D vector.

Definition at line 425 of file transform.hpp.

426 {
427 return Eigen::Map<const Eigen::Matrix<Scalar, 3, 1>>(data_);
428 }

◆ operator()()

template<typename Scalar >
Scalar LibXR::EulerAngle< Scalar >::operator() ( int i) const
inline

获取欧拉角的某个分量 / Retrieves a specific Euler angle component.

Definition at line 431 of file transform.hpp.

431{ return data_[i]; }

◆ operator=() [1/2]

template<typename Scalar >
EulerAngle & LibXR::EulerAngle< Scalar >::operator= ( const Eigen::Matrix< Scalar, 3, 1 > & p)
inline

赋值运算符,从 Eigen 3D 向量赋值。 Assignment operator from an Eigen 3D vector.

Definition at line 435 of file transform.hpp.

436 {
437 data_[0] = p(0);
438 data_[1] = p(1);
439 data_[2] = p(2);
440 return *this;
441 }

◆ operator=() [2/2]

template<typename Scalar >
EulerAngle & LibXR::EulerAngle< Scalar >::operator= ( const EulerAngle< Scalar > & p)
inline

赋值运算符,从另一个 EulerAngle 赋值。 Assignment operator from another EulerAngle.

Definition at line 445 of file transform.hpp.

446 {
447 if (this != &p)
448 {
449 data_[0] = p.data_[0];
450 data_[1] = p.data_[1];
451 data_[2] = p.data_[2];
452 }
453 return *this;
454 }

◆ Pitch() [1/2]

template<typename Scalar >
const Scalar & LibXR::EulerAngle< Scalar >::Pitch ( ) const
inlinenoexcept

Definition at line 405 of file transform.hpp.

405{ return data_[1]; }

◆ Pitch() [2/2]

template<typename Scalar >
Scalar & LibXR::EulerAngle< Scalar >::Pitch ( )
inlinenoexcept

Definition at line 404 of file transform.hpp.

404{ return data_[1]; }

◆ Roll() [1/2]

template<typename Scalar >
const Scalar & LibXR::EulerAngle< Scalar >::Roll ( ) const
inlinenoexcept

Definition at line 403 of file transform.hpp.

403{ return data_[0]; }

◆ Roll() [2/2]

template<typename Scalar >
Scalar & LibXR::EulerAngle< Scalar >::Roll ( )
inlinenoexcept

Definition at line 402 of file transform.hpp.

402{ return data_[0]; }

◆ ToQuaternion()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternion ( ) const
inline

转换为四元数,默认使用 ZYX 顺序。 Converts to a quaternion using the ZYX order by default.

Definition at line 528 of file transform.hpp.

528{ return ToQuaternionZYX(); }

◆ ToQuaternionXYZ()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionXYZ ( ) const
inline

按 XYZ 顺序转换为四元数。 Converts to a quaternion using the XYZ order.

Definition at line 576 of file transform.hpp.

577 {
578 return Eigen::Quaternion<Scalar>(ToRotationMatrixXYZ());
579 }

◆ ToQuaternionXZY()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionXZY ( ) const
inline

Definition at line 581 of file transform.hpp.

582 {
583 return Eigen::Quaternion<Scalar>(ToRotationMatrixXZY());
584 }

◆ ToQuaternionYXZ()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionYXZ ( ) const
inline

Definition at line 586 of file transform.hpp.

587 {
588 return Eigen::Quaternion<Scalar>(ToRotationMatrixYXZ());
589 }

◆ ToQuaternionYZX()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionYZX ( ) const
inline

Definition at line 591 of file transform.hpp.

592 {
593 return Eigen::Quaternion<Scalar>(ToRotationMatrixYZX());
594 }

◆ ToQuaternionZXY()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionZXY ( ) const
inline

Definition at line 596 of file transform.hpp.

597 {
598 return Eigen::Quaternion<Scalar>(ToRotationMatrixZXY());
599 }

◆ ToQuaternionZYX()

template<typename Scalar >
Eigen::Quaternion< Scalar > LibXR::EulerAngle< Scalar >::ToQuaternionZYX ( ) const
inline

Definition at line 601 of file transform.hpp.

602 {
603 return Eigen::Quaternion<Scalar>(ToRotationMatrixZYX());
604 }

◆ ToRotationMatrix()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrix ( ) const
inline

转换为旋转矩阵,默认使用 ZYX 顺序。 Converts to a rotation matrix using the ZYX order by default.

Definition at line 458 of file transform.hpp.

458{ return ToRotationMatrixZYX(); }

◆ ToRotationMatrixXYZ()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixXYZ ( ) const
inline

Definition at line 504 of file transform.hpp.

505 {
506 Scalar ca = std::cos(Roll()), cb = std::cos(Pitch()), cc = std::cos(Yaw());
507 Scalar sa = std::sin(Roll()), sb = std::sin(Pitch()), sc = std::sin(Yaw());
508
509 return (Eigen::Matrix<Scalar, 3, 3>() << cb * cc, -cb * sc, sb,
510 ca * sc + cc * sa * sb, ca * cc - sa * sb * sc, -cb * sa,
511 sa * sc - ca * cc * sb, cc * sa + ca * sb * sc, ca * cb)
512 .finished();
513 }

◆ ToRotationMatrixXZY()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixXZY ( ) const
inline

Definition at line 515 of file transform.hpp.

516 {
517 Scalar ca = std::cos(Roll()), cb = std::cos(Yaw()), cc = std::cos(Pitch());
518 Scalar sa = std::sin(Roll()), sb = std::sin(Yaw()), sc = std::sin(Pitch());
519
520 return (Eigen::Matrix<Scalar, 3, 3>() << cb * cc, -sb, cb * sc,
521 sa * sc + ca * cc * sb, ca * cb, ca * sb * sc - cc * sa,
522 cc * sa * sb - ca * sc, cb * sa, ca * cc + sa * sb * sc)
523 .finished();
524 }

◆ ToRotationMatrixYXZ()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixYXZ ( ) const
inline

Definition at line 482 of file transform.hpp.

483 {
484 Scalar ca = std::cos(Pitch()), cb = std::cos(Roll()), cc = std::cos(Yaw());
485 Scalar sa = std::sin(Pitch()), sb = std::sin(Roll()), sc = std::sin(Yaw());
486
487 return (Eigen::Matrix<Scalar, 3, 3>() << ca * cc + sa * sb * sc,
488 cc * sa * sb - ca * sc, cb * sa, cb * sc, cb * cc, -sb,
489 ca * sb * sc - cc * sa, sa * sc + ca * cc * sb, ca * cb)
490 .finished();
491 }

◆ ToRotationMatrixYZX()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixYZX ( ) const
inline

Definition at line 493 of file transform.hpp.

494 {
495 Scalar ca = std::cos(Pitch()), cb = std::cos(Yaw()), cc = std::cos(Roll());
496 Scalar sa = std::sin(Pitch()), sb = std::sin(Yaw()), sc = std::sin(Roll());
497
498 return (Eigen::Matrix<Scalar, 3, 3>() << ca * cb, sa * sc - ca * cc * sb,
499 cc * sa + ca * sb * sc, sb, cb * cc, -cb * sc, -cb * sa,
500 ca * sc + cc * sa * sb, ca * cc - sa * sb * sc)
501 .finished();
502 }

◆ ToRotationMatrixZXY()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixZXY ( ) const
inline

Definition at line 471 of file transform.hpp.

472 {
473 Scalar ca = std::cos(Yaw()), cb = std::cos(Roll()), cc = std::cos(Pitch());
474 Scalar sa = std::sin(Yaw()), sb = std::sin(Roll()), sc = std::sin(Pitch());
475
476 return (Eigen::Matrix<Scalar, 3, 3>() << ca * cc - sa * sb * sc, -cb * sa,
477 ca * sc + cc * sa * sb, cc * sa + ca * sb * sc, ca * cb,
478 sa * sc - ca * cc * sb, -cb * sc, sb, cb * cc)
479 .finished();
480 }

◆ ToRotationMatrixZYX()

template<typename Scalar >
Eigen::Matrix< Scalar, 3, 3 > LibXR::EulerAngle< Scalar >::ToRotationMatrixZYX ( ) const
inline

Definition at line 460 of file transform.hpp.

461 {
462 Scalar ca = std::cos(Yaw()), cb = std::cos(Pitch()), cc = std::cos(Roll());
463 Scalar sa = std::sin(Yaw()), sb = std::sin(Pitch()), sc = std::sin(Roll());
464
465 return (Eigen::Matrix<Scalar, 3, 3>() << ca * cb, ca * sb * sc - cc * sa,
466 sa * sc + ca * cc * sb, cb * sa, ca * cc + sa * sb * sc,
467 cc * sa * sb - ca * sc, -sb, cb * sc, cb * cc)
468 .finished();
469 }

◆ Yaw() [1/2]

template<typename Scalar >
const Scalar & LibXR::EulerAngle< Scalar >::Yaw ( ) const
inlinenoexcept

Definition at line 407 of file transform.hpp.

407{ return data_[2]; }

◆ Yaw() [2/2]

template<typename Scalar >
Scalar & LibXR::EulerAngle< Scalar >::Yaw ( )
inlinenoexcept

Definition at line 406 of file transform.hpp.

406{ return data_[2]; }

Member Data Documentation

◆ data_

template<typename Scalar >
Scalar LibXR::EulerAngle< Scalar >::data_[3]

存储欧拉角的数组 / Array storing Euler angles.

Definition at line 374 of file transform.hpp.


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