四元数欧拉角相互转换与奇异值问题

四元数转欧拉角

参考文章:四元数和欧拉角的相互转换

四元数转欧拉角的奇异值问题

在四元数转欧拉角时遇到奇异值问题,可参考四元数和欧拉角的相互转换,在文章里面说明了。

那么将Z-Y-X欧拉角(或RPY角:绕固定坐标系的X-Y-Z依次旋转α,β,γ角)转换为四元数:

q = [ c o s γ 2 0 0 s i n γ 2 ] [ c o s β 2 0 s i n β 2 0 ] [ c o s α 2 s i n α 2 0 0 ] = [ c o s α 2 c o s β 2 c o s γ 2 + s i n α 2 s i n β 2 s i n γ 2 s i n α 2 c o s β 2 c o s γ 2 + c o s α 2 s i n β 2 s i n γ 2 c o s α 2 s i n β 2 c o s γ 2 + s i n α 2 c o s β 2 s i n γ 2 c o s α 2 c o s β 2 s i n γ 2 + s i n α 2 s i n β 2 c o s γ 2 ] q = \left[ \begin{matrix} cos\frac{\gamma}{2} \\ 0 \\ 0 \\ sin\frac{\gamma}{2} \end{matrix} \right] \left[ \begin{matrix} cos\frac{\beta}{2} \\ 0 \\ sin\frac{\beta}{2} \\ 0 \end{matrix} \right] \left[ \begin{matrix} cos\frac{\alpha}{2} \\ sin\frac{\alpha}{2} \\ 0 \\ 0 \end{matrix} \right] = \left[ \begin{matrix} cos\frac{\alpha}{2} cos\frac{\beta}{2} cos\frac{\gamma}{2} + sin\frac{\alpha}{2} sin\frac{\beta}{2} sin\frac{\gamma}{2} \\ sin\frac{\alpha}{2} cos\frac{\beta}{2} cos\frac{\gamma}{2} + cos\frac{\alpha}{2} sin\frac{\beta}{2} sin\frac{\gamma}{2} \\ cos\frac{\alpha}{2} sin\frac{\beta}{2} cos\frac{\gamma}{2} + sin\frac{\alpha}{2} cos\frac{\beta}{2} sin\frac{\gamma}{2} \\ cos\frac{\alpha}{2} cos\frac{\beta}{2} sin\frac{\gamma}{2} + sin\frac{\alpha}{2} sin\frac{\beta}{2} cos\frac{\gamma}{2} \end{matrix} \right] q= cos2γ00sin2γ cos2β0sin2β0 cos2αsin2α00 = cos2αcos2βcos2γ+sin2αsin2βsin2γsin2αcos2βcos2γ+cos2αsin2βsin2γcos2αsin2βcos2γ+sin2αcos2βsin2γcos2αcos2βsin2γ+sin2αsin2βcos2γ

根据上面的公式可以求出逆解,即由四元数 q = ( q 0 , q 1 , q 2 , q 3 ) q=(q_0,q_1,q_2,q_3) q=(q0,q1,q2,q3) q = ( w , x , y , z ) q=(w,x,y,z) q=(w,x,y,z)。到欧拉角的转换为:
[ α β γ ] = [ a r c t a n 2 ( q 0 q 1 + q 2 q 3 ) 1 − 2 ( q 1 2 + q 2 2 ) a r c s i n ( 2 ( q 0 q 2 − q 1 q 3 ) ) a r c t a n 2 ( q 0 q 3 + q 1 q 2 ) 1 − 2 ( q 2 2 + q 3 2 ) ] \left[ \begin{matrix} \alpha \\ \beta \\ \gamma \end{matrix} \right] = \left[ \begin{matrix} arctan \frac{2(q_0 q_1 + q_2 q_3)}{1-2(q_1^2 + q_2^2)} \\ arcsin (2(q_0 q_2 - q_1 q_3)) \\ arctan \frac{2(q_0 q_3 + q_1 q_2)}{1-2(q_2^2 + q_3^2)} \end{matrix} \right] αβγ = arctan12(q12+q22)2(q0q1+q2q3)arcsin(2(q0q2q1q3))arctan12(q22+q32)2(q0q3+q1q2)

由于arctanarcsin的取值范围在 − π 2 \frac{-\pi}{2} 2π π 2 \frac{\pi}{2} 2π之间,只有180°,而绕某个轴旋转时范围是360°,因此要使用atan2函数代替arctan函数:
[ α β γ ] = [ a t a n 2 ( 2 ( q 0 q 1 + q 2 q 3 ) , 1 − 2 ( q 1 2 + q 2 2 ) ) a r c s i n ( 2 ( q 0 q 2 − q 1 q 3 ) ) a t a n 2 ( 2 ( q 0 q 3 + q 1 q 2 ) , 1 − 2 ( q 2 2 + q 3 2 ) ) ] \left[ \begin{matrix} \alpha \\ \beta \\ \gamma \end{matrix} \right] = \left[ \begin{matrix} atan2(2(q_0 q_1 + q_2 q_3),1-2(q_1^2 + q_2^2)) \\ arcsin (2(q_0 q_2 - q_1 q_3)) \\ atan2 (2(q_0 q_3 + q_1 q_2), 1-2(q_2^2 + q_3^2)) \end{matrix} \right] αβγ = atan2(2(q0q1+q2q3),12(q12+q22))arcsin(2(q0q2q1q3))atan2(2(q0q3+q1q2),12(q22+q32))

对于tan(θ) = y / x :
θ = ATan(y / x)求出的θ取值范围是[-PI/2, PI/2];
θ = ATan2(y, x)求出的θ取值范围是[-PI, PI]。

  • 当 (x, y) 在第一象限, 0 < θ < PI/2
  • 当 (x, y) 在第二象限 PI/2 < θ≤PI
  • 当 (x, y) 在第三象限, -PI < θ < -PI/2
  • 当 (x, y) 在第四象限, -PI/2 < θ < 0

猜你喜欢

转载自blog.csdn.net/qq_45878098/article/details/126028904
今日推荐