在SLAM经常需要谈论一件事情,就是坐标系变换与坐标变换,坐标系变换和坐标变换是不一样的,要注意区分两者的不同。在nnn维线性空间中,任意nnn个线性无关的向量都可取作它的基或坐标系。但是对于不同的基或坐标系,同一个向量的坐标是不同的,下面讨论当基改变时,向量的坐标是如何变化的。
一、基变换
设x1\pmb x_{1}xxx1,x2\pmb x_{2}xxx2,…,xn\pmb x_{n}xxxn是旧基,y1\pmb y_{1}yyy1,y2\pmb y_{2}yyy2,…,yn\pmb y_{n}yyyn是新基,则根据基的定义可以知道
或者形式的写成
其中矩阵C\pmb CCCC称作由旧基到新基的过渡矩阵,过渡矩阵代表了坐标系变换或者基变换,可以证明过渡矩阵是非奇异矩阵。
二、坐标变换
当我们知道了坐标系的变换之后就可以求解坐标变换的问题了,假设一个向量p\pmb pppp在旧基下的坐标为(ξ1,ξ2,...,ξn)T(\xi_{1},\xi_{2},...,\xi_{n})^T(ξ1,ξ2,...,ξn)T,在新基下的坐标为(η1,η2,...,ηn)T(\eta_{1},\eta_{2},...,\eta_{n})^T(η1,η2,...,ηn)T,那么有:
p=ξ1x1+ξ2x2+...+ξnxn=η1y1+η2y2+...+ηnyn\pmb p=\xi_{1}\pmb x_{1}+\xi_{2}\pmb x_{2}+...+\xi_{n}\pmb x_{n}=\eta_{1}\pmb y_{1}+\eta_{2}\pmb y_{2}+...+\eta_{n}\pmb y_{n}ppp=ξ1xxx1+ξ2xxx2+...+ξnxxxn=η1yyy1+η2yyy2+...+ηnyyyn
根据过渡矩阵,可以得到:
(η1,η2,...,ηn)T=C−1(ξ1,ξ2,...,ξn)T(\eta_{1},\eta_{2},...,\eta_{n})^T = C^{-1}(\xi_{1},\xi_{2},...,\xi_{n})^T(η1,η2,...,ηn)T=C−1(ξ1,ξ2,...,ξn)T
上式即为同一向量在不同坐标系下的坐标变换,可以看到坐标变换矩阵是基变换矩阵的逆。
三、旋转矩阵与平移向量
在视觉SLAM中,相机运动属于刚体运动,而刚体运动可以分解为旋转和平移。当定义好了相机坐标系后,相机坐标系的旋转可以用旋转矩阵来表示,平移可以用平移向量来表示,注意,这里旋转矩阵和平移向量一般在世界坐标系下的表达。假设相机坐标系1经过旋转和平移变成了坐标系2,将坐标系1设为世界坐标系,旋转矩阵为R\pmb RRRR,平移向量为t\pmb tttt,某向量在坐标系1中的坐标为a=(a1,a2,a3)T\pmb a=(a_{1},a_{2},a_{3})^Taaa=(a1,a2,a3)T,在坐标系2中的坐标系为b=(b1,b2,b3)T\pmb b=(b_{1},b_{2},b_{3})^Tbbb=(b1,b2,b3)T,则
a=Rb+t\pmb a=\pmb R\pmb b+\pmb taaa=RRRbbb+ttt
旋转矩阵是正交阵,自然也是非奇异矩阵。上述坐标是用非齐次坐标来表示的,如果改成齐次坐标:a′=(a1,a2,a3,1)T\pmb a^{'}=(a_{1},a_{2},a_{3},1)^Taaa′=(a1,a2,a3,1)T和b′=(b1,b2,b3,1)T\pmb b^{'}=(b_{1},b_{2},b_{3},1)^Tbbb′=(b1,b2,b3,1)T
则上式可以写成更简单的表达方式:
a′=Tb′\pmb a^{'}=\pmb T\pmb b^{'}aaa′=TTTbbb′
其中
T\pmb TTTT称作变换矩阵(Transformation Matrix),用于描述欧式变换。
那么旋转矩阵和基变换是什么关系呢?答:旋转矩阵就是基变换,但旋转矩阵和平移向量构成的变换不是基变换。
四、位姿
位姿在视觉SLAM中是指每一帧对应的相机坐标系相对于世界坐标系(或初始帧相机坐标系)的刚体运动:即旋转矩阵和平移向量,故位姿是坐标系的变换而非坐标变换。有了每一帧的位姿,我们就可以得到相机的运动轨迹。