动机
在阅读全局式SfM文献时,Rotation Averaging 和 Translation Averaging过程中涉及到3维旋转矩阵的计算,大体上理解,但是不透彻。3维旋转矩阵和2维旋转矩阵大多内容都是一致的,但在2维这些理论理解起来更方便,本文的目的就是通过理解2维旋转矩阵的一些理论来理解3维旋转矩阵的对应理论。
问题抽象
求解
设:op两点间距离为r。
∵
xi=r⋅cosα;
yi=r⋅sinα;
xj=r⋅cos(α+β)=r⋅cosα⋅cosβ−r⋅sinα⋅sinβ;
yj=r⋅sin(α+β)=r⋅sinα⋅cosβ+r⋅sinβ⋅cosα;
∴
xj=xi⋅cosβ−yi⋅sinβ;
yj=xi⋅sinβ+yi⋅cosβ;
写成矩阵形式:
pj=Rij⋅pi;Rij=[cosβsinβ−sinβcosβ]
旋转矩阵
前一节提到的
Rij=[cosβsinβ−sinβcosβ] 就是我们所说得旋转矩阵,显然旋转矩阵是正交矩阵。
几个值得思考的问题
- 旋转角度的正负:将坐标系
i(旧坐标系)旋转一角度β,得到坐标系
j(新坐标系)。显然顺时针旋转和逆时针旋转得到的旋转矩阵是不同的,在上一节的推导中,我们默认顺时针旋转时,旋转角度为正值,逆时针旋转时,旋转角度为负值(顺 + 逆 - ),即当为顺时针旋转时将β带入上述矩阵
Rij,当为逆时针旋转时将 -β 带入上述矩阵
Rij,即得到旋转矩阵。
- 旋转矩阵的相对性:单纯地说我有一个旋转矩阵
R ,是没有意义的,我不知道它是将
i 坐标系下的坐标转换为
j 坐标系下的坐标还是将
j 坐标系下的坐标转化为
i 坐标系下的坐标,即旋转矩阵必须表明 “旋转矩阵是从谁到谁的” 。通常我们采用下标的方式表明旋转矩阵的相对性,例如
Rij 表示 “ 从
i 坐标系到
j 坐标系的旋转矩阵” ,它可以将
i 坐标系下的坐标转换为
j 坐标系下的坐标,即,
pj=Rij⋅pi 。
- 旋转矩阵
Rij 的作用:旋转矩阵
Rij 一方面,可以还原从坐标系
i 到坐标系
j 的旋转过程(先计算出旋转角 β ,然后就可以脑补出坐标系
i 旋转到坐标系
j 的过程),另一方面,我门可以完成不同坐标系间的坐标转换任务(即:
pj=Rij⋅pi )。
旋转矩阵公式
-
Rij⋅Rji=E
证明:
∵
pj=Rij⋅pi
pi=Rji⋅pj;
∴
pj=Rij⋅Rji⋅pj;
∴
Rij⋅Rji=E。
-
Rik=Rjk⋅Rij
证明:
∵
pj=Rij⋅pi;
pk=Rjk⋅pj;
∴
pk=Rjk⋅Rij⋅pi;
又
∵
pk=Rik⋅pi;
∴
Rik=Rjk⋅Rij。
全局旋转矩阵
之前的旋转矩阵
Rij 都描述的是 坐标系
i 和坐标系
j 之间旋转关系。全局旋转矩阵表明了,某个坐标系 与全局坐标系(这里用坐标系
g 表示)之间的旋转关系(可以将全局坐标系
g 下的坐标转换为其它坐标系(e.g. 坐标系
i )下的坐标,即:
Rgi )。因为全局旋转矩阵都是相对于全局坐标系
g的,所以可以将下标
g 统一省略掉,即,
Rgi=Ri 。因此当一个旋转矩阵只有一个下标时,那它就是一个全局旋转矩阵,但别忘了它的本质:它实际上是一个相对旋转矩阵(
Rgi=Ri )。
全局旋转矩阵公式
- 根据全局旋转矩阵计算相对旋转矩阵:
Rij=Rj⋅RiT
证明:
Rij=Rgj⋅Rig=Rgj⋅RgiT=Rj⋅RiT。