1)旋转矩阵用9个量表达3个自由度,应该有更紧凑的表达方式 2)旋转矩阵存在必须是正交矩阵且行列式为1的约束。会给估计和优化旋转矩阵带来困难。
在三维空间中的任意旋转都可以表示为以空间中的某一向量为轴,旋转一定角度。其中,向量反映了这个旋转的性质,即怎么转;而角度则反映了这个旋转的程度,即旋转到多大程度。 通常,对于任意旋转,我们记其对应的旋转轴为向量 n n n,旋转角度为 θ \theta θ,则 θ n \theta n θn可以描述该旋转,我们称向量 θ n \theta n θn为旋转向量。
以下公式证明参见第四章李代数部分。 我们记一个旋转对应的旋转矩阵为 R R R,对应的旋转向量为 θ n \theta n θn,则: R = cos θ I + ( 1 − cos θ ) n n T + sin θ n ∧ R = \cos \theta I + (1 - \cos \theta )n{n^T} + \sin\theta n^\wedge R=cosθI+(1−cosθ)nnT+sinθn∧ n ∧ n^\wedge n∧是对向量 n n n求反对称矩阵。
θ = arccos t r ( R ) − 1 2 n = R n \begin{array}{l} \theta = \arccos \frac{{tr(R) - 1}}{2}\\ n = Rn \end{array} θ=arccos2tr(R)−1n=Rn 其中, θ \theta θ是对 R = cos θ I + ( 1 − cos θ ) n n T + sin θ n ∧ R = \cos \theta I + (1 - \cos \theta )n{n^T} + \sin\theta n^\wedge R=cosθI+(1−cosθ)nnT+sinθn∧等号两端求迹得到的。 n n n则为旋转矩阵 R R R特征值1对应的特征向量;也可以理解为向量 n n n进行一个 R R R的旋转后不变,因为旋转 R R R的旋转轴就是 n n n,而向量 n n n围绕自己怎么转都不会变。
旋转矩阵和旋转向量都不能直观的展示一个旋转到底是怎么旋转的,为了能够直观的展示任意一个旋转,引入了欧拉角。欧拉角将任一个旋转分解为分别绕X,Y,Z三个轴的三次旋转,这样人类通过这三次分解后的旋转就可以直观的认识到一个旋转的具体过程。 根据三次旋转的先后顺序(先绕X,Y,Z那个轴转?)以及每次旋转时是按照最开始的轴转还是按照旋转后的轴转,欧拉角可以分为很多种,但在导航中我们常用的是rpy角。
rpy角符合以下假设: 1)定义刚体前方为X轴,刚体的左侧为Y轴,刚体的上方为Z轴,这符合右手系。 2)首先绕物体的Z轴旋转,得到偏航角yaw。 3)绕旋转后的物体的Y轴旋转,得到俯仰角pitch。 4)绕旋转后的物体的X轴旋转,得到滚转角roll。 确定rpy角,则可以用三维向量 [ r , p , y ] T {[r,p,y]^T} [r,p,y]T表示一个旋转。旋转过程如图:
当rpy角度第二次旋转角度为 ± 90 \pm 90 ±90度时(即俯仰角为 ± 90 \pm 90 ±90),会发现刚体在进行第二次旋转(即俯仰角旋转)后,其第三次旋转的旋转轴(即物体经历两次旋转后的X轴)和第一次旋转时的旋转轴(即物体未旋转时候的Z轴)重合。这导致了系统只能在两个自由度上进行旋转,从而丢失了一个自由度,这也被称作奇异性问题。万向锁问题如图: 理论已经证明,任何试图用三个实数表达三维旋转都会有奇异性问题。 因此,欧拉角多用于人机交互中,而不适用于插值和迭代。 或者再2D运动场合中将欧拉角中的一个拿出来做定位信息输入,如一个在平面运动的汽车,(x坐标,y坐标,偏航角)就可以完整的反映车辆的位姿。
