机械臂运动学--欧拉角和四元数

1.Introduction

本文尝试从几何直观的角度理解欧拉角和四元数,主要参考3Blue1Grown的四元数系列视频。

2.欧拉角

根据wiki上对于欧拉角的介绍,根据旋转方式分为Proper Euler angle和Tait–Bryan angle,目前传感器使用最多的是yaw-pitch-roll(对应的旋转顺序是ZYX)。
机械臂运动学--欧拉角和四元数_第1张图片
根据对应的旋转顺序,可以根据XYZ对应的单位向量在原坐标系xyz上的投影上的投影反算欧拉角。

  • 第一次旋转
    原x轴单位向量旋转到了 N τ N^\tau Nτ
    机械臂运动学--欧拉角和四元数_第2张图片
    s i n ( ψ ) = x 2 / 1 − x 3 2 sin(\psi)=x2/\sqrt{1-x_3^2} sin(ψ)=x2/1x32
  • 第二次旋转
    绕着 y τ y^\tau yτ将x‘旋转到了最终的位置X。
    s i n ( θ ) = x 3 sin(\theta)=x_3 sin(θ)=x3
  • 第三次旋转
    y τ y^\tau yτ旋转到了最终的位置Y,将z’旋转到了最终的位置Z,观察ZY平面。
    机械臂运动学--欧拉角和四元数_第3张图片
    在Y0Z平面内,满足
    s i n ( ϕ ) = Y τ sin(\phi)=Y^\tau sin(ϕ)=Yτ
    Y τ c o s ( θ ) = Y 3 Y^\tau cos(\theta)=Y_3 Yτcos(θ)=Y3
    s i n ( ϕ ) = Y 3 / 1 − x 3 2 sin(\phi)=Y_3/\sqrt{1-x_3^2} sin(ϕ)=Y3/1x32

3.frame transform 和 point transform

3.1 变换公式

3.1.1 变换关系

以二维线性变换为例(Rotate, transform and scale这三种变换属于线性变换)。
机械臂运动学--欧拉角和四元数_第4张图片
( 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} v1 X+v2 Y=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} [v1 v2 ][XY]=[xy](3.1)
注意(X’, Y’)对应旋转后的坐标系上对应的坐标值,(x’, y’)基坐标系对应的坐标值。

3.1.2 记住公式

根据 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

3.2 坐标变换和点变换的关系

3.2.2 点变换

对点进行变换自然左乘一个变换矩阵。
M [ x y ] = [ x ′ y ′ ] M \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} x' \\ y' \end{bmatrix} M[xy]=[xy]

3.2.2 坐标变换

坐标变换,点在坐标系上的位置并没有发生变化,反求新坐标系上相对于新基底的坐标值,
根据公式3.1,已知(x’, y’)求(X’, Y’)。
求解的方法,通过矩阵求逆便可容易得出。

4.四元数

四元数部分按照3Blue1Brown的视频,进行叙述。
重 点 : 找 到 实 轴 , 找 到 虚 轴 , 实 轴 和 虚 轴 组 成 平 面 , 发 生 旋 转 \color{red}{重点:找到实轴,找到虚轴,实轴和虚轴组成平面,发生旋转} :

4.1 四元数定义

根据线性代数内容,线性变换矩阵存在特征向量,在变换过程中,方向不发生改变,对应旋转矩阵,这个特征向量就是旋转轴。知道旋转轴和旋转角度,可以得到四元数。
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)

4.1.1 旋转变换的四元数表达

将点p(三位空间中向量表示),进行旋转,旋转结果用四元数表示为:
f ( p ) = q p q T (4.2) f(p)=qpq^T \tag{4.2} f(p)=qpqT(4.2)

4.1.2 两次旋转的相对旋转角

将点p第一次旋转成p’,再进行旋转一次成p’’,已知第一次旋转对应的四元数q0和最终状态对应的四元数q2,计算第二次相对于第一次的四元数q1以及相对旋转角θ。
q 1 = q 2 ∗ q T q_1=q_{2} * q^T q1=q2qT

4.1.3 questions

1.为什么点旋转是公式4.2的形式,qp有什么意义?
2.为什么四元数公式4.1中,使用 α 2 \frac{\alpha}{2} 2α,而不是 α \alpha α
下面先用球极投影描述四元数相乘.

4.1.4 复向量乘积

图中的复向量 v ⃗ ( 2 , i ) \vec{v}(2,i) v 2,i将单位向量变换到了当前复向量的位置。
机械臂运动学--欧拉角和四元数_第5张图片
任意的一个向量w,和该向量的乘积 v ⃗ ∗ w ⃗ \vec{v}*\vec{w} v w 表示。
机械臂运动学--欧拉角和四元数_第6张图片

4.2球极投影

球极投影可以描述旋转效应,具有降维的效果,一维可以描述二维旋转,这样就可以用三位空间中的球极投影表示四元数。这也要求球极投影针对的向量的模为1。

4.2.1 二维空间

机械臂运动学--欧拉角和四元数_第7张图片
二维空间中单位圆上的点,可以用球极投影表示,球极投影的优点是降低了数据的维数(2维变成1维),四元数变换后的结果就可以在三维的球极投影上表示了。
机械臂运动学--欧拉角和四元数_第8张图片

4.2.2 三维空间

在三维空间中,此时虚轴用 ( i , j ) (i,j) (i,j)线性组合而成。

机械臂运动学--欧拉角和四元数_第9张图片
从三位空间开始,球极投影开始变得复杂了,为了直观的表示球极投影的效果,重点关注实轴和球与虚平面的交线经过变换后的球极投影(即其在 ( i , j ) (i,j) (i,j)上的投影)

4.2.3 四维空间

( 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)]在单位球的外部。
机械臂运动学--欧拉角和四元数_第10张图片
实轴和三个虚轴的关系:实轴和三个虚轴全部垂直。
机械臂运动学--欧拉角和四元数_第11张图片
( i , j , k ) (i,j,k) i,j,k线性组合成旋转轴,当 ( i , j , k ) (i,j,k) i,j,k对应坐标全为0时,表示没有旋转。
机械臂运动学--欧拉角和四元数_第12张图片

  • 可视化三位空间中的球极投影
    对于四位空间的球极投影,通过
    1.单位向量 i , j , k 和 实 轴 i,j,k和实轴 i,j,k单位向量经过变换后的投影数值,
    2.如果绕j旋转,画出 i k ik ik组成的圆环。
    3. i , j , k i,j,k i,j,k经过旋转变换后组成的超球。
    机械臂运动学--欧拉角和四元数_第13张图片
  • 旋转轴变换后的球极投影(对应着变换的模长)
    假设现在旋转轴是 j j j,分析 f ( j ) f(j) f(j)(这个很重要,我们希望四元数旋转过后并不改变向量的模长)
    再回到之前的一个图,
    如果绕j轴,右手旋转,越来越远,如上图。
    如果绕j轴,左手旋转,f(j)被转回来了。
    机械臂运动学--欧拉角和四元数_第14张图片
    右手逆时针旋转 θ \theta θ
    机械臂运动学--欧拉角和四元数_第15张图片
    左手顺时针旋转 θ \theta θ
    机械臂运动学--欧拉角和四元数_第16张图片
    旋转用四元数相关的公式表示:
    f ( p ) = q 1 p q 2 f(p)=q_{1}pq_{2} f(p)=q1pq2
    q 2 是 q 1 q_2是q_1 q2q1的共轭时,此时沿着旋转轴旋转了两次,并且模长为1。这也就解释了4.1中的问题。

4.3 四元数变换

类比于矩阵变换,矩阵变换包含了旋转和放缩。
机械臂运动学--欧拉角和四元数_第17张图片
对于四元数而言,只有单位四元数才只包含旋转。 四 元 数 乘 法 和 d o t p r o d u c t 是 两 回 事 \color{red}{四元数乘法和dot product是两回事} dotproduct
机械臂运动学--欧拉角和四元数_第18张图片

4.3.1 四元数乘法

机械臂运动学--欧拉角和四元数_第19张图片
机械臂运动学--欧拉角和四元数_第20张图片

4.3.2 四元数的逆

对于单位四元数,四元数的逆就是该四元数的共轭。
p − 1 = p T p^{-1}=p^T p1=pT

5. References

  1. https://eater.net/quaternions
  2. https://en.wikipedia.org/wiki/Euler_angles
  3. https://www.youtube.com/watch?v=d4EgbgTm0Bg

你可能感兴趣的:(机器人理论基础)