旋转矩阵详解

动机

在阅读全局式SfM文献时,Rotation Averaging 和 Translation Averaging过程中涉及到3维旋转矩阵的计算,大体上理解,但是不透彻。3维旋转矩阵和2维旋转矩阵大多内容都是一致的,但在2维这些理论理解起来更方便,本文的目的就是通过理解2维旋转矩阵的一些理论来理解3维旋转矩阵的对应理论。

问题抽象

在这里插入图片描述

求解

设:op两点间距离为r。
\because
x i = r cos α x_i = r \cdot \cos \alpha
y i = r sin α y_i = r \cdot \sin \alpha
x j = r cos ( α + β ) = r cos α cos β r sin α sin β x_j = r \cdot \cos(\alpha + \beta) = r \cdot \cos \alpha \cdot \cos \beta - r \cdot \sin \alpha \cdot \sinβ
y j = r sin ( α + β ) = r sin α cos β + r sin β cos α y_j = r \cdot \sin(\alpha + \beta) = r \cdot \sin \alpha \cdot \cos \beta + r \cdot \sin \beta \cdot \cos \alpha
\therefore
x j = x i cos β y i sin β x_j = x_i \cdot \cos \beta - y_i \cdot \sin \beta
y j = x i sin β + y i cos β y_j = x_i \cdot \sin \beta + y_i \cdot \cos \beta
写成矩阵形式:
p j = R i j p i R i j = [ cos β sin β sin β cos β ] p_j = R_{ij} \cdot p_i ;R_{ij} = \begin {bmatrix} \cos \beta & -\sin \beta \\ \sin \beta & \cos \beta \\ \end {bmatrix}

旋转矩阵

前一节提到的 R i j = [ cos β sin β sin β cos β ] R_{ij} = \begin {bmatrix} \cos \beta & -\sin \beta \\ \sin \beta & \cos \beta \\ \end {bmatrix} 就是我们所说得旋转矩阵,显然旋转矩阵是正交矩阵。

几个值得思考的问题

  • 旋转角度的正负:将坐标系 i i (旧坐标系)旋转一角度β,得到坐标系 j j (新坐标系)。显然顺时针旋转和逆时针旋转得到的旋转矩阵是不同的,在上一节的推导中,我们默认顺时针旋转时,旋转角度为正值,逆时针旋转时,旋转角度为负值(顺 + 逆 - ),即当为顺时针旋转时将β带入上述矩阵 R i j R_{ij} ,当为逆时针旋转时将 -β 带入上述矩阵 R i j R_{ij} ,即得到旋转矩阵。
  • 旋转矩阵的相对性:单纯地说我有一个旋转矩阵 R R ,是没有意义的,我不知道它是将 i i 坐标系下的坐标转换为 j j 坐标系下的坐标还是将 j j 坐标系下的坐标转化为 i i 坐标系下的坐标,即旋转矩阵必须表明 “旋转矩阵是从谁到谁的” 。通常我们采用下标的方式表明旋转矩阵的相对性,例如 R i j R_{ij} 表示 “ 从 i i 坐标系到 j j 坐标系的旋转矩阵” ,它可以将 i i 坐标系下的坐标转换为 j j 坐标系下的坐标,即, p j = R i j p i p_j = R_{ij} \cdot p_i
  • 旋转矩阵 R i j R_{ij} 的作用:旋转矩阵 R i j R_{ij} 一方面,可以还原从坐标系 i i 到坐标系 j j 的旋转过程(先计算出旋转角 β ,然后就可以脑补出坐标系 i i 旋转到坐标系 j j 的过程),另一方面,我门可以完成不同坐标系间的坐标转换任务(即: p j = R i j p i p_j = R_{ij} \cdot p_i )。

旋转矩阵公式

  1. R i j R j i = E R_{ij} \cdot R_{ji} = E
    证明:
    \because
    p j = R i j p i p_j = R_{ij} \cdot p_i
    p i = R j i p j p_i = R_{ji} \cdot p_j
    \therefore
    p j = R i j R j i p j p_j = R_{ij} \cdot R_{ji} \cdot p_j
    \therefore
    R i j R j i = E R_{ij} \cdot R_{ji} = E
  2. R i k = R j k R i j R_{ik} = R_{jk} \cdot R_{ij}
    证明:
    \because
    p j = R i j p i p_j = R_{ij} \cdot p_i
    p k = R j k p j p_k = R_{jk} \cdot p_j
    \therefore
    p k = R j k R i j p i p_k = R_{jk} \cdot R_{ij} \cdot p_i
    \because
    p k = R i k p i p_k = R_{ik} \cdot p_i
    \therefore
    R i k = R j k R i j R_{ik} = R_{jk} \cdot R_{ij}

全局旋转矩阵

之前的旋转矩阵 R i j R_{ij} 都描述的是 坐标系 i i 和坐标系 j j 之间旋转关系。全局旋转矩阵表明了,某个坐标系 与全局坐标系(这里用坐标系 g g 表示)之间的旋转关系(可以将全局坐标系 g g 下的坐标转换为其它坐标系(e.g. 坐标系 i i )下的坐标,即: R g i R_{gi} )。因为全局旋转矩阵都是相对于全局坐标系 g g 的,所以可以将下标 g g 统一省略掉,即, R g i = R i R_{gi} = R_i 。因此当一个旋转矩阵只有一个下标时,那它就是一个全局旋转矩阵,但别忘了它的本质:它实际上是一个相对旋转矩阵( R g i = R i R_{gi} = R_i )。

全局旋转矩阵公式

  1. 根据全局旋转矩阵计算相对旋转矩阵: R i j = R j R i T R_{ij} = R_j \cdot R_i^\mathrm{T}
    证明:
    R i j = R g j R i g = R g j R g i T = R j R i T R_{ij} = R_{gj} \cdot R_{ig} = R_{gj} \cdot R_{gi}^\mathrm{T} = R_j \cdot R_i^\mathrm{T}

猜你喜欢

转载自blog.csdn.net/qq_24309981/article/details/87698510