Advertisement

三维空间刚体旋转描述

阅读量:

三维空间中通常可以用旋转矩阵、旋转向量、欧拉角和四元数来描述旋转


旋转矩阵

先回顾下向量的内积和外积

其中 \hat{a}=\left[\begin{matrix}0&-a_3&a;_2 \\ a_3&0&-a_1 \\ -a_2&a;_1&0\end{matrix}\right]是取向量 a反对角矩阵

外积只对三维向量存在定义,并且可以表示向量的旋转:
假设两个不平行向量, b,可以用一个与a,b所在平面垂直的向量描述 到的旋转(图1)
这里写图片描述
图1. wa\times b方向一致,相当于旋转轴,模值等于角度

对空间中一个向量,假设有两组单位正交基O_1=(e_1,e_2,e_3)O_2=(e'_1,e'_2,e'_3),向量在两个坐标系下坐标为[a_1,a_2,a_3]^T[a'_1,a'_2,a'_3]^T,那么有

(1)式两边同左乘 [e^T_1,e^T_2,e^T_3]^T,有

(2)式的R称为旋转矩阵 ,用来描述相机的旋转

旋转矩阵是行列式为1的正交矩阵,反之,行列式为1的正交矩阵也是一个旋转矩阵

其中SO(n)是特殊正交群,特别的SO(3)就是三维空间的旋转

旋转矩阵的劣势

  • 旋转矩阵有9个量,但一次旋转只有3个自由度。因此这种表达方式是冗余的
  • 旋转矩阵有自身约束:必须是正交矩阵,且行列式为1,优化算法比较难应用

旋转向量

旋转向量用一个三维向量来描述旋转:其方向与旋转轴一致,长度等于旋转角

回顾向量外积,图1的就是到的旋转向量

旋转向量与旋转矩阵转换
假设旋转轴为n,角度为\theta,使用罗德里格斯公式可以转换到旋转矩阵

同样可以得到由旋转矩阵到旋转向量的公式

此外,旋转矩阵实际就是的李群,旋转向量就是对应的李代数so(3),两者通过指数映射相联系(与罗德里格斯等价)

其中 \hat{\phi}就是对旋转向量 \phi取反对称矩阵


欧拉角

欧拉角是一种最直观的旋转描述方式,也是一个3维向量,分别代表绕某个轴的旋转角度

  • 相同的角度,旋转次序的不同,旋转结果不一样。一般常见的是rpy角(旋转顺序是ZYX)
  • 使用欧拉角一个最大的缺点是万向锁问题:俯仰角为\pm90度时,第一次旋转和第三次旋转将使用同一个轴,使得系统丢失了一个自由度
  • 因此欧拉角不适于插值和迭代,往往只用于人机交互中

四元数

旋转矩阵用9个量描述3自由度的旋转,具有冗余性
欧拉角和旋转向量用3个量描述3自由度的旋转,是紧凑的,但具有奇异性
四元数用4个量描述3自由度的旋转,紧凑又没有奇异性

一个四元数q拥有1个实部和3个虚部

满足

旋转向量与四元数的转换
对于一个旋转向量:绕单位向量n=[n+x,n_y,n_z]^T做了度的旋转,那么其四元数为

同样,也可以由四元数求得旋转向量

旋转矩阵与四元数的转换
设四元数q=q_0+q_1i+q_2j+q_3k(6),对应的旋转矩阵为

反之也可以由 推得四元数

用四元数表示旋转
对于一个空间三维点p=[x,y,z],指定一个绕做角的旋转,旋转后的点为p'
1)首先将三维点用一个虚四元数来描述

2)用四元数 来表达旋转

3)旋转后的点为

全部评论 (0)

还没有任何评论哟~