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