OpenCV 4.11.0
开源计算机视觉
|
#include <opencv2/core/quaternion.hpp>
公共类型 | |
枚举 | EulerAnglesType { INT_XYZ , INT_XZY , INT_YXZ , INT_YZX , INT_ZXY , INT_ZYX , INT_XYX , INT_XZX , INT_YXY , INT_YZY , INT_ZXZ , INT_ZYZ , EXT_XYZ , EXT_XZY , EXT_YXZ , EXT_YZX , EXT_ZXY , EXT_ZYX , EXT_XYX , EXT_XZX , EXT_YXY , EXT_YZY , EXT_ZXZ , EXT_ZYZ } |
欧拉角类型的枚举。更多… | |
欧拉角类型的枚举。
不考虑使用两种不同的约定来定义旋转轴的可能性,存在十二种可能的旋转轴序列,分为两组
三个基本旋转可以是 外在的(围绕原始坐标系 *xyz* 的轴的旋转,假设该坐标系保持静止),或者 内在的(围绕旋转坐标系 *XYZ* 的轴的旋转,与运动体固定,每次基本旋转后都会改变其方向)。
外在和内在旋转都是相关的。
欧拉角的定义如下:
对于 X-Y-Z 顺序的内在旋转,旋转矩阵 R 可以通过以下方式计算:
\[R =X(\theta_1) Y(\theta_2) Z(\theta_3) \]
对于 X-Y-Z 顺序的外在旋转,旋转矩阵 R 可以通过以下方式计算:
\[R =Z({\theta_3}) Y({\theta_2}) X({\theta_1})\]
其中
\[X({\theta_1})={\begin{bmatrix}1&0&0\\0&\cos {\theta_1} &-\sin {\theta_1} \\0&\sin {\theta_1} &\cos {\theta_1} \\\end{bmatrix}}, Y({\theta_2})={\begin{bmatrix}\cos \theta_{2}&0&\sin \theta_{2}\\0&1 &0 \\\ -sin \theta_2& 0&\cos \theta_{2} \\\end{bmatrix}}, Z({\theta_3})={\begin{bmatrix}\cos\theta_{3} &-\sin \theta_3&0\\\sin \theta_3 &\cos \theta_3 &0\\0&0&1\\\end{bmatrix}}. \]
该函数是根据这套约定设计的
对于 \(\theta_1\) 和 \(\theta_3\),有效范围是 (−π, π]。
对于 \(\theta_2\),有效范围是 [−π/2, π/2] 或 [0, π]。
对于泰特-布莱恩角,\(\theta_2\) 的有效范围是 [−π/2, π/2]。当将四元数转换为欧拉角时,在 \( \theta_2 \in (−π/2, π/2)\) 的条件下,欧拉角的解是唯一的。如果 \(\theta_2 = −π/2 \) 或 \( \theta_2 = π/2\),则存在无限多个解。这种情况的常用名称是万向节死锁。对于正则欧拉角,\(\theta_2\) 的有效范围在 [0, π] 中。在 \( \theta_2 \in (0, π)\) 的条件下,欧拉角的解是唯一的。如果 \(\theta_2 =0 \) 或 \(\theta_2 =π \),则存在无限多个解,并且会发生万向节死锁。