1. 矩阵论中的线性变换
1.1 基变换公式
在线性空间
V
n
\bm{V}^n
Vn 中,同一个向量在不同的基下的坐标表示是不一样的。当由一个基
x
1
,
x
2
,
.
.
.
,
x
n
\bold{x}_1, \bold{x}_2, ..., \bold{x}_n
x1,x2,...,xn 变换为另一个基
y
1
,
y
2
,
.
.
.
,
y
n
\bold{y}_1, \bold{y}_2, ..., \bold{y}_n
y1,y2,...,yn 时,由基的定义可得:
y
1
=
c
11
x
1
+
c
21
x
2
+
.
.
.
+
c
n
1
x
n
y
2
=
c
12
x
1
+
c
22
x
2
+
.
.
.
+
c
n
2
x
n
.
.
.
y
n
=
c
1
n
x
1
+
c
2
n
x
2
+
.
.
.
+
c
n
n
x
n
\bold{y}_1 = c_{11}\bold{x}_1 +c_{21}\bold{x}_2 + ... + c_{n1}\bold{x}_n \\ \bold{y}_2 = c_{12}\bold{x}_1 +c_{22}\bold{x}_2 + ... + c_{n2}\bold{x}_n \\ ... \\ \bold{y}_n = c_{1n}\bold{x}_1 +c_{2n}\bold{x}_2 + ... + c_{nn}\bold{x}_n
y1=c11x1+c21x2+...+cn1xny2=c12x1+c22x2+...+cn2xn...yn=c1nx1+c2nx2+...+cnnxn
或用矩阵形式写为:
Y
=
X
C
\bold{Y} = \bold{X} \bold{C}
Y=XC
这称为基变换公式,表示同一个线性空间中两个基之间的变换关系,其中矩阵
C
\bold{C}
C 为:
[
c
11
c
12
.
.
.
c
1
n
c
21
c
22
.
.
.
c
2
n
.
.
.
.
.
.
.
.
.
.
.
.
c
n
1
c
n
2
.
.
.
c
n
n
]
\left[ \begin{matrix} c_{11} & c_{12} & ... & c_{1n} \\ c_{21} & c_{22} & ... & c_{2n} \\ ... & ... & ... & ... \\ c_{n1} & c_{n2} & ... & c_{nn} \\ \end{matrix} \right]
c11c21...cn1c12c22...cn2............c1nc2n...cnn
称为由 旧基
X
\bold{X}
X 到 新基
Y
\bold{Y}
Y 的过渡矩阵。
Y
=
[
y
1
y
2
.
.
.
y
n
]
,
X
=
[
x
1
x
2
.
.
.
x
n
]
\bold{Y} = \left[ \begin{matrix} \bold{y}_1 & \bold{y}_2 & ... & \bold{y}_n \end{matrix} \right], \quad \bold{X} = \left[ \begin{matrix} \bold{x}_1 & \bold{x}_2 & ... & \bold{x}_n \end{matrix} \right]
Y=[y1y2...yn],X=[x1x2...xn]
注意:这里的 x 1 , x 2 , . . . , x n \bold{x}_1, \bold{x}_2, ... , \bold{x}_n x1,x2,...,xn 和 y 1 , y 2 , . . . , y n \bold{y}_1, \bold{y}_2, ... , \bold{y}_n y1,y2,...,yn 都是线性空间 V n \bm{V}^n Vn 中的列向量。(列向量的形式很关键,这是后续写机器人坐标系之间的变换矩阵时的依据。)
1.2 坐标变换公式
假设由一个基
x
1
,
x
2
,
.
.
.
,
x
n
\bold{x}_1, \bold{x}_2, ..., \bold{x}_n
x1,x2,...,xn 变换为另一个基
y
1
,
y
2
,
.
.
.
,
y
n
\bold{y}_1, \bold{y}_2, ..., \bold{y}_n
y1,y2,...,yn 的过渡矩阵为
C
\bold{C}
C,而向量
x
\bold{x}
x 在基
x
1
,
x
2
,
.
.
.
,
x
n
\bold{x}_1, \bold{x}_2, ..., \bold{x}_n
x1,x2,...,xn 和基
y
1
,
y
2
,
.
.
.
,
y
n
\bold{y}_1, \bold{y}_2, ..., \bold{y}_n
y1,y2,...,yn 的坐标表示分别为
ξ
=
[
ξ
1
,
ξ
2
,
.
.
.
,
ξ
n
]
T
,
η
=
[
η
1
,
η
2
,
.
.
.
,
η
n
]
T
\bm{\xi} = [\xi_1, \xi_2, ... , \xi_n]^T, \quad \bm{\eta} = [\eta_1, \eta_2, ... , \eta_n]^T
ξ=[ξ1,ξ2,...,ξn]T,η=[η1,η2,...,ηn]T
则有
x
=
X
⋅
ξ
=
Y
⋅
η
=
(
X
⋅
C
)
⋅
η
=
X
⋅
(
C
⋅
η
)
\bold{x} = \bold{X} \cdot \bm{\xi} = \bold{Y} \cdot \bm{\eta} = (\bold{X} \cdot \bold{C}) \cdot \bm{\eta} = \bold{X} \cdot ( \bold{C} \cdot \bm{\eta})
x=X⋅ξ=Y⋅η=(X⋅C)⋅η=X⋅(C⋅η)
从而有
ξ
=
C
⋅
η
或者
η
=
C
−
1
⋅
ξ
\bm{\xi} = \bold{C} \cdot \bm{\eta} \quad 或者 \quad \bm{\eta} = \bold{C}^{-1} \cdot \bm{\xi}
ξ=C⋅η或者η=C−1⋅ξ
这称为坐标变换公式,表示同一个向量在不同基下的坐标表示之间的关系。
2. 机器人学中的坐标系变换
2.1 如何直接写出两个坐标系之间的变换矩阵?
假设现在为机器人定义了两个坐标系 A \bold{A} A 和 B \bold{B} B,比如 A \bold{A} A代表机器人搭载的相机坐标系, B \bold{B} B代表机器人本体坐标系,如果现在想要直接得到 B 坐标系相对于 A 坐标系的变换矩阵 A T B ^A\bm{T}_B ATB ,应该怎么做?
首先明白,这里的坐标系
A
\bold{A}
A 和
B
\bold{B}
B 其实就是三维欧氏空间(一个特殊的线性空间)中的两个基,分别由各自三个方向的坐标轴向量
x
A
,
y
A
,
z
A
\bm{x}_A, \bm{y}_A, \bm{z}_A
xA,yA,zA 或者
x
B
,
y
B
,
z
B
\bm{x}_B, \bm{y}_B, \bm{z}_B
xB,yB,zB 组成,而现在待求的变换矩阵
A
T
B
^A\bm{T}_B
ATB 其实就是坐标系
A
\bold{A}
A 到坐标系
B
\bold{B}
B 的过渡矩阵,其关系可以表示为
[
x
B
,
y
B
,
z
B
]
=
[
x
A
,
y
A
,
z
A
]
⋅
A
T
B
[\bm{x}_B, \: \bm{y}_B, \:\bm{z}_B] = [\bm{x}_A, \: \bm{y}_A, \:\bm{z}_A] \cdot {^A}\bm{T}{_B}
[xB,yB,zB]=[xA,yA,zA]⋅ATB
明白这点之后,接下来我们对照前面的基变换公式: Y = X C \bold{Y} = \bold{X} \bold{C} Y=XC,那么这里机器人的相机坐标系 A \bold{A} A 就是公式中的旧基 X \bold{X} X,本体坐标系 B \bold{B} B 是公式中的新基 Y \bold{Y} Y。
根据上面基变换公式推导的过程可以得到 C \bold{C} C 的求解过程:将新基 Y \bold{Y} Y 的每个向量都分解到旧基 X \bold{X} X 上(比如将 y 1 \bold{y}_1 y1 分解为 c 11 x 1 + c 21 x 2 + . . . + c n 1 x n c_{11}\bold{x}_1 +c_{21}\bold{x}_2 + ... + c_{n1}\bold{x}_n c11x1+c21x2+...+cn1xn),然后将分解得到的权重按列向量来写,组成过渡矩阵 C \bold{C} C 的第1列。同理将 y 2 \bold{y}_2 y2, y 3 \bold{y}_3 y3, … , y n \bold{y}_n yn 都进行分解,得到 C \bold{C} C 的第2列、第3列 … 第n列。
同样的,机器人坐标系之间的变换矩阵也可以这样求解:将新坐标系 B \bold{B} B 的 X 轴单位向量分解到旧坐标系 A \bold{A} A 的三个坐标轴方向上,然后将得到的三维向量按列来写,构成变换矩阵的第1列。以此类推,将 B \bold{B} B 的 Y 轴和 Z 轴单位向量分解到 A \bold{A} A 坐标系,然后构成第2列、第3列,就得到了 B 坐标系相对于 A 坐标系的变换矩阵 A T B ^A\bm{T}_B ATB 。
2.2 空间点在新旧坐标系下的坐标关系
假设一个空间点 P 在旧坐标系 A 的表示为
p
A
\bm{p}_A
pA,在新坐标系 B 的表示为
p
B
\bm{p}_B
pB,而新坐标系B相对于旧坐标系A的变换矩阵为
A
T
B
^A\bm{T}_B
ATB,那么根据坐标变换公式,可以得到两个坐标之间的关系为
p
B
=
(
A
T
B
)
−
1
⋅
p
A
或者
p
A
=
A
T
B
⋅
p
B
\bm{p}_B = (^A\bm{T}_B)^{-1} \cdot \bm{p}_A \quad 或者 \quad \bm{p}_A = {^A\bm{T}_B} \cdot \bm{p}_B
pB=(ATB)−1⋅pA或者pA=ATB⋅pB
2.3 二维旋转的例子
为了便于理解,下面给出一个最简单的二维旋转例子。
如下图所示,坐标系
A
\bold{A}
A (坐标轴分别为 M 和 N)逆时针旋转了
θ
\theta
θ 度后,得到了坐标系
B
\bold{B}
B(坐标轴分别为 U 和 V),现在想求坐标系
B
\bold{B}
B 相对于坐标系
A
\bold{A}
A 之间的旋转变换
A
R
B
{^A}R_B
ARB。
根据上面结论,先将新坐标系
B
\bold{B}
B 的坐标轴U、V 上的单位向量分解到旧坐标系
A
\bold{A}
A:
x
U
=
cos
θ
⋅
x
M
+
sin
θ
⋅
y
N
,
y
V
=
−
sin
θ
⋅
x
M
+
cos
θ
⋅
y
N
\bm{x}_U = \cos\theta \cdot \bm{x}_M + \sin \theta \cdot \bm{y}_N, \quad \bm{y}_V = -\sin\theta \cdot \bm{x}_M + \cos\theta \cdot \bm{y}_N
xU=cosθ⋅xM+sinθ⋅yN,yV=−sinθ⋅xM+cosθ⋅yN
然后将分解的权重按照列来写,则可以得到:
A
R
B
=
[
cos
θ
−
sin
θ
sin
θ
cos
θ
]
{^A}\bm{R}{_B} = \left[ \begin{matrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{matrix} \right]
ARB=[cosθsinθ−sinθcosθ]
同一空间点
P
\bold{P}
P 在旧坐标系
A
\bold{A}
A下的表示为
p
A
(
m
,
n
)
\bm{p}_A(m, n)
pA(m,n),新坐标系
B
\bold{B}
B 下的表示为
p
B
(
u
,
v
)
\bm{p}_B(u, v)
pB(u,v),那么根据上面的坐标变换结论,两者之间的关系为:
p
A
=
A
R
B
⋅
p
B
\bm{p}_A = {^A}\bm{R}{_B}\cdot\bm{p}_B
pA=ARB⋅pB
展开为:
[
m
n
]
=
[
cos
θ
−
sin
θ
sin
θ
cos
θ
]
⋅
[
u
v
]
\left[ \begin{matrix} m \\ n \end{matrix} \right] = \left[ \begin{matrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{matrix} \right] \cdot \left[ \begin{matrix} u \\ v \end{matrix} \right]
[mn]=[cosθsinθ−sinθcosθ]⋅[uv]
为了验证结果的正确性,可以将同一个空间点
P
\bold{P}
P 分解到两个坐标系下,如下所示:
根据几何关系可以得到两组坐标(m, n)和(u, v)之间的关系:
m
=
u
c
o
s
θ
−
v
s
i
n
θ
n
=
u
s
i
n
θ
+
v
c
o
s
θ
m = u\:cos\,\theta - v\:sin\,\theta \\ n = u\:sin\,\theta + v\:cos\,\theta
m=ucosθ−vsinθn=usinθ+vcosθ
表示为矩阵形式:
[
m
n
]
=
[
cos
θ
−
sin
θ
sin
θ
cos
θ
]
[
u
v
]
\left[ \begin{matrix} m \\ n \end{matrix} \right] = \left[ \begin{matrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{matrix} \right] \left[ \begin{matrix} u \\ v \end{matrix} \right]
[mn]=[cosθsinθ−sinθcosθ][uv]
这里表明,两种方式的结果是一样的。