【数理知识】旋转矩阵的推导过程,基于向量的旋转来实现,同时解决欧式变换的非线性局限

序号 内容
1 【数理知识】自由度 degree of freedom 及自由度的计算方法
2 【数理知识】刚体 rigid body 及刚体的运动
3 【数理知识】刚体基本运动,平动,转动
4 【数理知识】向量数乘,内积,外积,matlab代码实现
5 【数理知识】协方差,随机变量的的协方差,随机变量分别是单个数字和向量时的协方差
6 【数理知识】旋转矩阵的推导过程,基于向量的旋转来实现,同时解决欧式变换的非线性局限

1. 点和向量的表示

点(Point):是空间中的基本元素,没有长度,没有体积。

假设在三维空间中有一点 a a a,其坐标可以表示为 [ x , y , z ] T \left[\begin{matrix}x, y, z\end{matrix}\right]^\text{T} [x,y,z]T

而把两个点连接起来就构成了向量。


向量(Vector):可以看成某点指向另一点的一个箭头,请不要把向量与它的坐标这两个概念混淆,一个向量是空间当中的一样东西,比如说向量 a ⃗ \vec{a} a 。这里 a ⃗ \vec{a} a 并不是和若干个实数相关联。只有当我们指定这个三维空间中的某个坐标系时,才可以谈论该向量在此坐标系下的坐标,也就是找到若干个实数对应这个向量。

向量 a ⃗ \vec{a} a 在线性空间基 [ e ⃗ 1 , e ⃗ 2 , e ⃗ 3 ] \left[\begin{matrix}\vec{e}_1, \vec{e}_2, \vec{e}_3\end{matrix}\right] [e 1,e 2,e 3] 下的坐标为 [ x , y , z ] T \left[\begin{matrix}x, y, z\end{matrix}\right]^\text{T} [x,y,z]T,那么存在以下公式

a ⃗ = [ e ⃗ 1 e ⃗ 2 e ⃗ 3 ] [ x y z ] = e ⃗ 1 x + e ⃗ 2 y + e ⃗ 3 z = x e ⃗ 1 + y e ⃗ 2 + z e ⃗ 3 \begin{aligned} \vec{a} = \left[\begin{matrix} \vec{e}_1 & \vec{e}_2 & \vec{e}_3 \end{matrix}\right] \left[\begin{matrix} x \\ y \\ z \\ \end{matrix}\right] = \vec{e}_1x + \vec{e}_2 y + \vec{e}_3 z \\ = x \vec{e}_1+ y \vec{e}_2 + z \vec{e}_3 \end{aligned} a =[e 1e 2e 3] xyz =e 1x+e 2y+e 3z=xe 1+ye 2+ze 3


2. 基于向量推导旋转矩阵 R R R

对于同一个向量 a ⃗ \vec{a} a ,设在单位正交基 [ e ⃗ 1 , e ⃗ 2 , e ⃗ 3 ] \left[\begin{matrix}\vec{e}_1, \vec{e}_2, \vec{e}_3\end{matrix}\right] [e 1,e 2,e 3] 下的坐标为 [ x , y , z ] T \left[\begin{matrix}x, y, z\end{matrix}\right]^\text{T} [x,y,z]T
经过一次旋转,单位正交基变成了 [ e ⃗ 1 ′ , e ⃗ 2 ′ , e ⃗ 3 ′ ] \left[\begin{matrix}\vec{e}_1^\prime, \vec{e}_2^\prime, \vec{e}_3^\prime\end{matrix}\right] [e 1,e 2,e 3],而向量 a ⃗ \vec{a} a 在新的正交基下的坐标为 [ x ′ , y ′ , z ′ ] T \left[\begin{matrix}x^\prime, y^\prime, z^\prime\end{matrix}\right]^\text{T} [x,y,z]T

由于该向量并没有随着坐标系的旋转而发生运动,因此根据坐标的定义,我们有

a ⃗ = [ e ⃗ 1 e ⃗ 2 e ⃗ 3 ] [ x y z ]   = [ e ⃗ 1 ′ e ⃗ 2 ′ e ⃗ 3 ′ ] [ x ′ y ′ z ′ ] \begin{aligned} \vec{a} &= \left[\begin{matrix} \vec{e}_1 & \vec{e}_2 & \vec{e}_3 \end{matrix}\right] \left[\begin{matrix} x \\ y \\ z \\ \end{matrix}\right]\ \\ &= \left[\begin{matrix} \vec{e}_1^\prime & \vec{e}_2^\prime & \vec{e}_3^\prime \end{matrix}\right] \left[\begin{matrix} x^\prime \\ y^\prime \\ z^\prime \\ \end{matrix}\right] \end{aligned} a =[e 1e 2e 3] xyz  =[e 1e 2e 3] xyz

扫描二维码关注公众号,回复: 16877219 查看本文章

假如在等式两边同时左乘矩阵 [ e ⃗ 1 T e ⃗ 2 T e ⃗ 3 T ] \left[\begin{matrix}\vec{e}_1^\text{T} \\ \vec{e}_2^\text{T} \\ \vec{e}_3^\text{T}\end{matrix}\right] e 1Te 2Te 3T ,有

[ e ⃗ 1 T e ⃗ 2 T e ⃗ 3 T ] [ e ⃗ 1 e ⃗ 2 e ⃗ 3 ] [ x y z ] = [ e ⃗ 1 T e ⃗ 2 T e ⃗ 3 T ] [ e ⃗ 1 ′ e ⃗ 2 ′ e ⃗ 3 ′ ] [ x ′ y ′ z ′ ] [ e ⃗ 1 T e ⃗ 1 e ⃗ 1 T e ⃗ 2 e ⃗ 1 T e ⃗ 3 e ⃗ 2 T e ⃗ 1 e ⃗ 2 T e ⃗ 2 e ⃗ 2 T e ⃗ 3 e ⃗ 3 T e ⃗ 1 e ⃗ 3 T e ⃗ 2 e ⃗ 3 T e ⃗ 3 ] [ x y z ] = [ e ⃗ 1 T e ⃗ 1 ′ e ⃗ 1 T e ⃗ 2 ′ e ⃗ 1 T e ⃗ 3 ′ e ⃗ 2 T e ⃗ 1 ′ e ⃗ 2 T e ⃗ 2 ′ e ⃗ 2 T e ⃗ 3 ′ e ⃗ 3 T e ⃗ 1 ′ e ⃗ 3 T e ⃗ 2 ′ e ⃗ 3 T e ⃗ 3 ′ ] [ x ′ y ′ z ′ ] \begin{aligned} \left[\begin{matrix} \vec{e}_1^\text{T} \\ \vec{e}_2^\text{T} \\ \vec{e}_3^\text{T} \\ \end{matrix}\right] \left[\begin{matrix} \vec{e}_1 & \vec{e}_2 & \vec{e}_3 \end{matrix}\right] \left[\begin{matrix} x \\ y \\ z \\ \end{matrix}\right] &= \left[\begin{matrix} \vec{e}_1^\text{T} \\ \vec{e}_2^\text{T} \\ \vec{e}_3^\text{T} \\ \end{matrix}\right] \left[\begin{matrix} \vec{e}_1^\prime & \vec{e}_2^\prime & \vec{e}_3^\prime \end{matrix}\right] \left[\begin{matrix} x^\prime \\ y^\prime \\ z^\prime \\ \end{matrix}\right] \\ \left[\begin{matrix} \vec{e}_1^\text{T} \vec{e}_1 & \vec{e}_1^\text{T} \vec{e}_2 & \vec{e}_1^\text{T} \vec{e}_3 \\ \vec{e}_2^\text{T} \vec{e}_1 & \vec{e}_2^\text{T} \vec{e}_2 & \vec{e}_2^\text{T} \vec{e}_3 \\ \vec{e}_3^\text{T} \vec{e}_1 & \vec{e}_3^\text{T} \vec{e}_2 & \vec{e}_3^\text{T} \vec{e}_3 \\ \end{matrix}\right] \left[\begin{matrix} x \\ y \\ z \\ \end{matrix}\right] &= \left[\begin{matrix} \vec{e}_1^\text{T} \vec{e}_1^\prime & \vec{e}_1^\text{T} \vec{e}_2^\prime & \vec{e}_1^\text{T} \vec{e}_3^\prime \\ \vec{e}_2^\text{T} \vec{e}_1^\prime & \vec{e}_2^\text{T} \vec{e}_2^\prime & \vec{e}_2^\text{T} \vec{e}_3^\prime \\ \vec{e}_3^\text{T} \vec{e}_1^\prime & \vec{e}_3^\text{T} \vec{e}_2^\prime & \vec{e}_3^\text{T} \vec{e}_3^\prime \\ \end{matrix}\right] \left[\begin{matrix} x^\prime \\ y^\prime \\ z^\prime \\ \end{matrix}\right] \end{aligned} e 1Te 2Te 3T [e 1e 2e 3] xyz e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 xyz = e 1Te 2Te 3T [e 1e 2e 3] xyz = e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 xyz

显而易见有

e ⃗ 1 T e ⃗ 1 = 1 , e ⃗ 1 T e ⃗ 2 = 0 , e ⃗ 1 T e ⃗ 3 = 0 , e ⃗ 2 T e ⃗ 1 = 0 , e ⃗ 2 T e ⃗ 2 = 1 , e ⃗ 2 T e ⃗ 3 = 0 , e ⃗ 3 T e ⃗ 1 = 0 , e ⃗ 3 T e ⃗ 2 = 0 , e ⃗ 3 T e ⃗ 3 = 1 , \begin{aligned} \vec{e}_1^\text{T} \vec{e}_1 = 1, \quad & \vec{e}_1^\text{T} \vec{e}_2 = 0, \quad & \vec{e}_1^\text{T} \vec{e}_3 = 0, \quad \\ \vec{e}_2^\text{T} \vec{e}_1 = 0, \quad & \vec{e}_2^\text{T} \vec{e}_2 = 1, \quad & \vec{e}_2^\text{T} \vec{e}_3 = 0, \quad \\ \vec{e}_3^\text{T} \vec{e}_1 = 0, \quad & \vec{e}_3^\text{T} \vec{e}_2 = 0, \quad & \vec{e}_3^\text{T} \vec{e}_3 = 1, \quad \\ \end{aligned} e 1Te 1=1,e 2Te 1=0,e 3Te 1=0,e 1Te 2=0,e 2Te 2=1,e 3Te 2=0,e 1Te 3=0,e 2Te 3=0,e 3Te 3=1,

因此,可进一步化简为

[ e ⃗ 1 T e ⃗ 1 e ⃗ 1 T e ⃗ 2 e ⃗ 1 T e ⃗ 3 e ⃗ 2 T e ⃗ 1 e ⃗ 2 T e ⃗ 2 e ⃗ 2 T e ⃗ 3 e ⃗ 3 T e ⃗ 1 e ⃗ 3 T e ⃗ 2 e ⃗ 3 T e ⃗ 3 ] [ x y z ] = [ e ⃗ 1 T e ⃗ 1 ′ e ⃗ 1 T e ⃗ 2 ′ e ⃗ 1 T e ⃗ 3 ′ e ⃗ 2 T e ⃗ 1 ′ e ⃗ 2 T e ⃗ 2 ′ e ⃗ 2 T e ⃗ 3 ′ e ⃗ 3 T e ⃗ 1 ′ e ⃗ 3 T e ⃗ 2 ′ e ⃗ 3 T e ⃗ 3 ′ ] [ x ′ y ′ z ′ ] [ x y z ] = [ e ⃗ 1 T e ⃗ 1 ′ e ⃗ 1 T e ⃗ 2 ′ e ⃗ 1 T e ⃗ 3 ′ e ⃗ 2 T e ⃗ 1 ′ e ⃗ 2 T e ⃗ 2 ′ e ⃗ 2 T e ⃗ 3 ′ e ⃗ 3 T e ⃗ 1 ′ e ⃗ 3 T e ⃗ 2 ′ e ⃗ 3 T e ⃗ 3 ′ ] [ x ′ y ′ z ′ ] = d e f R [ x ′ y ′ z ′ ] \begin{aligned} \left[\begin{matrix} \vec{e}_1^\text{T} \vec{e}_1 & \vec{e}_1^\text{T} \vec{e}_2 & \vec{e}_1^\text{T} \vec{e}_3 \\ \vec{e}_2^\text{T} \vec{e}_1 & \vec{e}_2^\text{T} \vec{e}_2 & \vec{e}_2^\text{T} \vec{e}_3 \\ \vec{e}_3^\text{T} \vec{e}_1 & \vec{e}_3^\text{T} \vec{e}_2 & \vec{e}_3^\text{T} \vec{e}_3 \\ \end{matrix}\right] \left[\begin{matrix} x \\ y \\ z \\ \end{matrix}\right] &= \left[\begin{matrix} \vec{e}_1^\text{T} \vec{e}_1^\prime & \vec{e}_1^\text{T} \vec{e}_2^\prime & \vec{e}_1^\text{T} \vec{e}_3^\prime \\ \vec{e}_2^\text{T} \vec{e}_1^\prime & \vec{e}_2^\text{T} \vec{e}_2^\prime & \vec{e}_2^\text{T} \vec{e}_3^\prime \\ \vec{e}_3^\text{T} \vec{e}_1^\prime & \vec{e}_3^\text{T} \vec{e}_2^\prime & \vec{e}_3^\text{T} \vec{e}_3^\prime \\ \end{matrix}\right] \left[\begin{matrix} x^\prime \\ y^\prime \\ z^\prime \\ \end{matrix}\right] \\ \left[\begin{matrix} x \\ y \\ z \\ \end{matrix}\right] &= \left[\begin{matrix} \vec{e}_1^\text{T} \vec{e}_1^\prime & \vec{e}_1^\text{T} \vec{e}_2^\prime & \vec{e}_1^\text{T} \vec{e}_3^\prime \\ \vec{e}_2^\text{T} \vec{e}_1^\prime & \vec{e}_2^\text{T} \vec{e}_2^\prime & \vec{e}_2^\text{T} \vec{e}_3^\prime \\ \vec{e}_3^\text{T} \vec{e}_1^\prime & \vec{e}_3^\text{T} \vec{e}_2^\prime & \vec{e}_3^\text{T} \vec{e}_3^\prime \\ \end{matrix}\right] \left[\begin{matrix} x^\prime \\ y^\prime \\ z^\prime \\ \end{matrix}\right] \\ & \overset{def}{=} R \left[\begin{matrix} x^\prime \\ y^\prime \\ z^\prime \\ \end{matrix}\right] \end{aligned} e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 xyz xyz = e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 xyz = e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 xyz =defR xyz

这个 R R R 描述了向量的旋转,称为旋转矩阵(Rotation Matrix)。


上述推导过程是基于向量的代数关系来的,还有使用三维坐标轴旋转角度的推导过程,可以参考文章:第3章-数理知识基础 -> 坐标转换


旋转矩阵 R R R 有性质:

  • 旋转矩阵 R R R 是一个行列式为 1 的正交矩阵。反之,行列式为 1 的正交矩阵也是一个旋转矩阵。所有 n n n 维旋转矩阵构成特殊正交群 S O ( n ) SO(n) SO(n) S O ( n ) = { R ∈ R n × n ∣ R R T = I , det ( R ) = I } SO(n) = \{ R \in \R^{n \times n} | RR^\text{T} = I, \text{det}(R) = I \} SO(n)={ RRn×nRRT=I,det(R)=I}

  • 旋转矩阵 R R R 是正交矩阵(Orthogonal Matrix,正交矩阵即逆为自身转置的矩阵),旋转矩阵的逆 R − 1 R^{-1} R1 描述了一个相反的旋转


3. 向量的欧式变换

在计算机视觉和机器人技术中,欧式变换(Euclidean/Rigid Translation,或称为刚性变换)是一种非常常见的变换。

欧式变换包括两个部分:

  1. 旋转:它可以通过旋转矩阵来表示。
  2. 平移:它可以通过平移向量来表示。

不清楚的可以参考文章:【数理知识】刚体基本运动,平动,转动

假设有如下旋转和平移过程:世界坐标系中存在一个向量 a ⃗ 1 \vec{a}_1 a 1,经过一次旋转 R 1 t 2 R_{1t2} R1t2 和一次平移 t 1 t 2 t_{1t2} t1t2 后,得到了向量 a ⃗ 2 \vec{a}_2 a 2,那么有如下关系
a ⃗ 2 = R 1 t 2 a ⃗ 1 + t 1 t 2 \vec{a}_2 = R_{1t2} \vec{a}_1 + t_{1t2} a 2=R1t2a 1+t1t2


4. 欧式变换具有非线性的局限性

欧式变换是刚性变换,它包括了旋转和平移。虽然平移是线性的,但旋转却是非线性的。

对于旋转,我们可以使用旋转矩阵、四元数或旋转轴和旋转角来描述。不论是哪种描述方式,旋转的性质都是非线性的。

假如我们进行两次变换: R 1 t 2 , t 1 t 2 R_{1t2}, t_{1t2} R1t2,t1t2 R 2 t 3 , t 2 t 3 R_{2t3}, t_{2t3} R2t3,t2t3

a ⃗ 2 = R 1 t 2 a ⃗ 1 + t 1 t 2 a ⃗ 3 = R 2 t 3 a ⃗ 2 + t 2 t 3 = R 2 t 3 ( R 1 t 2 a ⃗ 1 + t 1 t 2 ) + t 2 t 3 \begin{aligned} \vec{a}_2 &= R_{1t2} \vec{a}_1 + t_{1t2} \\ \vec{a}_3 &= R_{2t3} \vec{a}_2 + t_{2t3} \\ &= R_{2t3} (R_{1t2} \vec{a}_1 + t_{1t2}) + t_{2t3} \end{aligned} a 2a 3=R1t2a 1+t1t2=R2t3a 2+t2t3=R2t3(R1t2a 1+t1t2)+t2t3

上述变换里有两个旋转矩阵,但是两次旋转的组合 R 2 t 3 × R 1 t 2 R_{2t3} \times R_{1t2} R2t3×R1t2不等于两个旋转矩阵的简单线性组合,比如说加法。

同理,如果我们使用四元数来描述旋转,四元数的乘法也是非线性的。


5. 使用变换矩阵 T T T 解决非线性

针对欧式变换的非线性问题,我们可以通过齐次坐标(Homogeneous Coordinates)的方法进行解决。

齐次坐标通过添加一个额外的坐标来扩展标准坐标。可以用单个矩阵表示旋转和平移,使得变换更简单。


具体解决办法是通过向三维向量的末尾添加 1,将其变为一个四维向量,称为齐次坐标。针对此欧式变换

a ⃗ 2 = R 1 t 2 a ⃗ 1 + t 1 t 2 \vec{a}_2 = R_{1t2} \vec{a}_1 + t_{1t2} a 2=R1t2a 1+t1t2

将旋转矩阵和平移向量写进同一个变换矩阵(Transformation Matrix)中,同时扩张维度后为

[ a ⃗ 2 1 ] = [ R 1 t 2 t 1 t 2 0 1 × 3 1 ] [ a ⃗ 1 1 ] = T [ a ⃗ 1 1 ] \begin{aligned} \left[\begin{matrix} \vec{a}_2 \\ 1 \end{matrix}\right] &= \left[\begin{matrix} R_{1t2} & t_{1t2} \\ 0_{1 \times 3} & 1 \\ \end{matrix}\right] \left[\begin{matrix} \vec{a}_1 \\ 1 \\ \end{matrix}\right] \\ &= T \left[\begin{matrix} \vec{a}_1 \\ 1 \\ \end{matrix}\right] \end{aligned} [a 21]=[R1t201×3t1t21][a 11]=T[a 11]

T T T 即为变换矩阵。

在这里插入图片描述


齐次坐标的意义就在于将欧式变换表示为线性关系。

因此欧式变换变成齐次坐标后有

a ⃗ 2 = R 1 t 2 a ⃗ 1 + t 1 t 2 [ a ⃗ 2 1 ] = T [ a ⃗ 1 1 ] \begin{aligned} \vec{a}_2 &= R_{1t2} \vec{a}_1 + t_{1t2} \\ \left[\begin{matrix} \vec{a}_2 \\ 1 \end{matrix}\right] &= T \left[\begin{matrix} \vec{a}_1 \\ 1 \\ \end{matrix}\right]\end{aligned} a 2[a 21]=R1t2a 1+t1t2=T[a 11]


变换矩阵 T T T 的性质:

  • 变换矩阵 T T T 构成特殊欧式群 S E SE SE
    S E ( 3 ) = { T = [ R t 0 1 × 3 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } SE(3) = \{ T = \left[\begin{matrix} R & t \\ 0_{1\times3} & 1 \\ \end{matrix}\right] \in \R^{4\times4} | R \in SO(3), t \in \R^3 \} SE(3)={ T=[R01×3t1]R4×4RSO(3),tR3}

  • 变换矩阵的逆表示一个反向的变换:
    T − 1 = [ R T − R T t 0 1 × 3 1 ] T^{-1} = \left[\begin{matrix} R^\text{T} & -R^\text{T} t \\ 0_{1\times3} & 1 \\ \end{matrix}\right] T1=[RT01×3RTt1]


Ref

  1. 《视觉SLAM十四讲从理论到实践》第3讲 三维空间刚体运动 - 知乎
  2. SLAM学习笔记(一)第三讲三维空间刚体运动
  3. [Sorkine-Hornung O, Rabinovich M. Least-squares rigid motion using svd[J]. Computing, 2017, 1(1): 1-5.]

猜你喜欢

转载自blog.csdn.net/weixin_36815313/article/details/132157447
今日推荐