本文尝试从几何直观的角度理解欧拉角和四元数,主要参考3Blue1Grown的四元数系列视频。
根据wiki上对于欧拉角的介绍,根据旋转方式分为Proper Euler angle和Tait–Bryan angle,目前传感器使用最多的是yaw-pitch-roll(对应的旋转顺序是ZYX)。
根据对应的旋转顺序,可以根据XYZ对应的单位向量在原坐标系xyz上的投影上的投影反算欧拉角。
以二维线性变换为例(Rotate, transform and scale这三种变换属于线性变换)。
( v 1 ⃗ , v 2 ⃗ ) (\vec{v1},\vec{v2}) (v1,v2)可以看成是x,y轴单位向量经过坐标变换后的结果。
从column space的角度描述:
v 1 ⃗ X ′ + v 2 ⃗ Y ′ = P ⃗ \vec{v1}X'+\vec{v2}Y'=\vec{P} v1X′+v2Y′=P
用矩阵形式表示:
[ v 1 ⃗ v 2 ⃗ ] [ X ′ Y ′ ] = [ x ′ y ′ ] (3.1) \begin{bmatrix} \vec{v1} & \vec{v2} \end{bmatrix} \begin{bmatrix} X' \\ Y' \end{bmatrix} = \begin{bmatrix} x' \\ y' \end{bmatrix} \tag{3.1} [v1v2][X′Y′]=[x′y′](3.1)
注意(X’, Y’)对应旋转后的坐标系上对应的坐标值,(x’, y’)基坐标系对应的坐标值。
根据 v 1 ⃗ \vec{v1} v1和 v 2 ⃗ \vec{v2} v2对应旋转后坐标系中的坐标值(1,0)和(0,1),可以简单的作图画出 v 1 ⃗ \vec{v1} v1和 v 2 ⃗ \vec{v2} v2,很容易求解出 v 1 ⃗ \vec{v1} v1和 v 2 ⃗ \vec{v2} v2。
对点进行变换自然左乘一个变换矩阵。
M [ x y ] = [ x ′ y ′ ] M \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} x' \\ y' \end{bmatrix} M[xy]=[x′y′]
坐标变换,点在坐标系上的位置并没有发生变化,反求新坐标系上相对于新基底的坐标值,
根据公式3.1,已知(x’, y’)求(X’, Y’)。
求解的方法,通过矩阵求逆便可容易得出。
四元数部分按照3Blue1Brown的视频,进行叙述。
重 点 : 找 到 实 轴 , 找 到 虚 轴 , 实 轴 和 虚 轴 组 成 平 面 , 发 生 旋 转 \color{red}{重点:找到实轴,找到虚轴,实轴和虚轴组成平面,发生旋转} 重点:找到实轴,找到虚轴,实轴和虚轴组成平面,发生旋转
根据线性代数内容,线性变换矩阵存在特征向量,在变换过程中,方向不发生改变,对应旋转矩阵,这个特征向量就是旋转轴。知道旋转轴和旋转角度,可以得到四元数。
c o s ( α 2 ) + s i n ( α 2 ) ( x i + y j + z k ) = w + a i ⃗ + b j ⃗ + c k ⃗ (4.1) cos(\frac{\alpha}{2})+sin(\frac{\alpha}{2})(xi+yj+zk)=w+a\vec{i}+b\vec{j}+c\vec{k} \tag{4.1} cos(2α)+sin(2α)(xi+yj+zk)=w+ai+bj+ck(4.1)
将点p(三位空间中向量表示),进行旋转,旋转结果用四元数表示为:
f ( p ) = q p q T (4.2) f(p)=qpq^T \tag{4.2} f(p)=qpqT(4.2)
将点p第一次旋转成p’,再进行旋转一次成p’’,已知第一次旋转对应的四元数q0和最终状态对应的四元数q2,计算第二次相对于第一次的四元数q1以及相对旋转角θ。
q 1 = q 2 ∗ q T q_1=q_{2} * q^T q1=q2∗qT
1.为什么点旋转是公式4.2的形式,qp有什么意义?
2.为什么四元数公式4.1中,使用 α 2 \frac{\alpha}{2} 2α,而不是 α \alpha α
下面先用球极投影描述四元数相乘.
图中的复向量 v ⃗ ( 2 , i ) \vec{v}(2,i) v(2,i)将单位向量变换到了当前复向量的位置。
任意的一个向量w,和该向量的乘积 v ⃗ ∗ w ⃗ \vec{v}*\vec{w} v∗w表示。
球极投影可以描述旋转效应,具有降维的效果,一维可以描述二维旋转,这样就可以用三位空间中的球极投影表示四元数。这也要求球极投影针对的向量的模为1。
二维空间中单位圆上的点,可以用球极投影表示,球极投影的优点是降低了数据的维数(2维变成1维),四元数变换后的结果就可以在三维的球极投影上表示了。
在三维空间中,此时虚轴用 ( i , j ) (i,j) (i,j)线性组合而成。
从三位空间开始,球极投影开始变得复杂了,为了直观的表示球极投影的效果,重点关注实轴和球与虚平面的交线经过变换后的球极投影(即其在 ( i , j ) (i,j) (i,j)上的投影)
( i , j , k ) (i,j,k) (i,j,k)对应的向量是作为球极投影映射的方向,实轴坐标在 [ c o s ( − π / 2 ) , c o s ( π / 2 ) ] [cos(-\pi/2),cos(\pi/2)] [cos(−π/2),cos(π/2)]在单位球的内部;
实轴对应 [ c o s ( π / 2 ) , c o s ( − π / 2 ) ] [cos(\pi/2),cos(-\pi/2)] [cos(π/2),cos(−π/2)]在单位球的外部。
实轴和三个虚轴的关系:实轴和三个虚轴全部垂直。
( i , j , k ) (i,j,k) (i,j,k)线性组合成旋转轴,当 ( i , j , k ) (i,j,k) (i,j,k)对应坐标全为0时,表示没有旋转。
类比于矩阵变换,矩阵变换包含了旋转和放缩。
对于四元数而言,只有单位四元数才只包含旋转。 四 元 数 乘 法 和 d o t p r o d u c t 是 两 回 事 \color{red}{四元数乘法和dot product是两回事} 四元数乘法和dotproduct是两回事
对于单位四元数,四元数的逆就是该四元数的共轭。
p − 1 = p T p^{-1}=p^T p−1=pT