1. 旋转的几种数学表示方法
-
旋转矩阵:优点是运算方便,使用9个量描述3自由度旋转。缺点是引入额外约束(如要求满足正交性、行列式为1等),求导困难
-
旋转向量:以单位向量 n → \overrightarrow{n} n为旋转轴,绕其旋转角度 θ \theta θ。可紧凑的表示旋转,缺点是具有周期性(若限定在某一周期范围内,如[-pi, pi],则不具有周期性)
-
欧拉角:比较直观,对用户友好;需要指定旋转顺序,存在万向节死锁现象,无法进行球面平滑差值
-
四元数:紧凑的不带奇异的表示方法,对用户来讲不太直观,要求是单位四元数(因为只有单位四元数才能表示旋转),表示旋转时也会过参数化(实部 + 虚部需要4个量),所以说4个量 + 1个约束才能表示3自由度的旋转
-
四元数与旋转向量之间的转换关系如下:
[ q w q x q y q z ] = [ c o s θ 2 n → ⋅ s i n θ 2 ] \left[\begin{array}{cc} q_w \\ q_x \\ q_y \\ q_z \end{array} \right] = \left[\begin{array}{cc} cos \frac{\theta}{2} \\ \overrightarrow{n} \cdot sin \frac{\theta}{2} \end{array} \right] qwqxqyqz =[cos2θn⋅sin2θ]
由于IMU的频率较高,因此相邻IMU数据间的时间间隔非常小,故而对应的 θ \theta θ也非常小,则有:
[ q w q x q y q z ] = [ c o s θ 2 n → ⋅ s i n θ 2 ] = [ 1 n → ⋅ θ 2 ] \left[\begin{array}{cc} q_w \\ q_x \\ q_y \\ q_z \end{array} \right] = \left[\begin{array}{cc} cos \frac{\theta}{2} \\ \overrightarrow{n} \cdot sin \frac{\theta}{2} \end{array} \right] = \left[\begin{array}{cc} 1 \\ \overrightarrow{n} \cdot \frac{\theta}{2} \end{array} \right] qwqxqyqz =[cos2θn⋅sin2θ]=[1n⋅2θ]
又因为旋转量 n → ⋅ θ = w ⋅ Δ t \overrightarrow{n} \cdot \theta = w \cdot \Delta t n⋅θ=w⋅Δt,其中 w w w表示IMU中陀螺仪的读数。因此上述转换关系可化简如下:
[ q w q x q y q z ] = [ c o s θ 2 n → ⋅ s i n θ 2 ] = [ 1 n → ⋅ θ 2 ] = 1 2 w Δ t \left[\begin{array}{cc} q_w \\ q_x \\ q_y \\ q_z \end{array} \right] = \left[\begin{array}{cc} cos \frac{\theta}{2} \\ \overrightarrow{n} \cdot sin \frac{\theta}{2} \end{array} \right] = \left[\begin{array}{cc} 1 \\ \overrightarrow{n} \cdot \frac{\theta}{2} \end{array} \right] = \frac{1}{2}w \Delta t qwqxqyqz =[cos2θn⋅sin2θ]=[1n⋅2θ]=21wΔt
2. 四元数的相关操作
2.1 四元数乘法
对于两四元数 p = [ p w , p x , p y , p z ] T p=[p_w,p_x,p_y,p_z]^T p=[pw,px,py,pz]T和 q = [ q w , q x , q y , q z ] T q=[q_w,q_x,q_y,q_z]^T q=[qw,qx,qy,qz]T,二者相乘如下:
p ⊗ q = [ p w q w − p x q x − p y q y − p z q z p w q x + p x q w + p y q z − p z q y p w q y − p x q z + p y q w + p z q x p w q z + p x q y − p y q x + p z q w ] p \otimes q = \left[\begin{array}{cc} p_wq_w-p_xq_x-p_yq_y-p_zq_z \\ p_wq_x+p_xq_w+p_yq_z-p_zq_y \\ p_wq_y-p_xq_z+p_yq_w+p_zq_x \\ p_wq_z+p_xq_y-p_yq_x+p_zq_w \end{array} \right] p⊗q=
pwqw−pxqx