【机器人学】从线性变换的角度理解机器人坐标变换
1. 矩阵论中的线性变换
1.1 基变换公式
在线性空间 Vn\bm{V}^nVn 中,同一个向量在不同的基下的坐标表示是不一样的。当由一个基 x1,x2,...,xn\bold{x}_1, \bold{x}_2, ..., \bold{x}_nx1,x2,...,xn 变换为另一个基 y1,y2,...,yn\bold{y}_1, \bold{y}_2, ..., \bold{y}_ny1,y2,...,yn 时,由基的定义可得:
y1=c11x1+c21x2+...+cn1xny2=c12x1+c22x2+...+cn2xn...yn=c1nx1+c2nx2+...+cnnxn
\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=XC
\bold{Y} = \bold{X} \bold{C}
Y=XC
这称为基变换公式,表示同一个线性空间中两个基之间的变换关系,其中矩阵 C\bold{C}C 为:
[c11c12...c1nc21c22...c2n............cn1cn2...cnn] \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=[y1y2...yn],X=[x1x2...xn]
\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]
注意:这里的 x1,x2,...,xn\bold{x}_1, \bold{x}_2, ... , \bold{x}_nx1,x2,...,xn 和 y1,y2,...,yn\bold{y}_1, \bold{y}_2, ... , \bold{y}_ny1,y2,...,yn 都是线性空间 Vn\bm{V}^nVn 中的列向量。(列向量的形式很关键,这是后续写机器人坐标系之间的变换矩阵时的依据。)
1.2 坐标变换公式
假设由一个基 x1,x2,...,xn\bold{x}_1, \bold{x}_2, ..., \bold{x}_nx1,x2,...,xn 变换为另一个基 y1,y2,...,yn\bold{y}_1, \bold{y}_2, ..., \bold{y}_ny1,y2,...,yn 的过渡矩阵为 C\bold{C}C,而向量 x\bold{x}x 在基 x1,x2,...,xn\bold{x}_1, \bold{x}_2, ..., \bold{x}_nx1,x2,...,xn 和基 y1,y2,...,yn\bold{y}_1, \bold{y}_2, ..., \bold{y}_ny1,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 坐标系的变换矩阵 ATB^A\bm{T}_BATB ,应该怎么做?
首先明白,这里的坐标系 A\bold{A}A 和 B\bold{B}B 其实就是三维欧氏空间(一个特殊的线性空间)中的两个基,分别由各自三个方向的坐标轴向量 xA,yA,zA\bm{x}_A, \bm{y}_A, \bm{z}_AxA,yA,zA 或者 xB,yB,zB\bm{x}_B, \bm{y}_B, \bm{z}_BxB,yB,zB 组成,而现在待求的变换矩阵 ATB^A\bm{T}_BATB 其实就是坐标系 A\bold{A}A 到坐标系 B\bold{B}B 的过渡矩阵,其关系可以表示为
[xB, yB, zB]=[xA, yA, zA]⋅ATB[\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=XC\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 上(比如将 y1\bold{y}_1y1 分解为 c11x1+c21x2+...+cn1xnc_{11}\bold{x}_1 +c_{21}\bold{x}_2 + ... + c_{n1}\bold{x}_nc11x1+c21x2+...+cn1xn),然后将分解得到的权重按列向量来写,组成过渡矩阵 C\bold{C}C 的第1列。同理将 y2\bold{y}_2y2, y3\bold{y}_3y3, … , yn\bold{y}_nyn 都进行分解,得到 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 坐标系的变换矩阵 ATB^A\bm{T}_BATB 。
2.2 空间点在新旧坐标系下的坐标关系
假设一个空间点 P 在旧坐标系 A 的表示为 pA\bm{p}_ApA,在新坐标系 B 的表示为 pB\bm{p}_BpB,而新坐标系B相对于旧坐标系A的变换矩阵为ATB^A\bm{T}_BATB,那么根据坐标变换公式,可以得到两个坐标之间的关系为
pB=(ATB)−1⋅pA或者pA=ATB⋅pB\bm{p}_B = (^A\bm{T}_B)^{-1} \cdot \bm{p}_A \quad 或者 \quad \bm{p}_A = {^A\bm{T}_B} \cdot \bm{p}_BpB=(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 之间的旋转变换 ARB{^A}R_BARB。

根据上面结论,先将新坐标系 B\bold{B}B 的坐标轴U、V 上的单位向量分解到旧坐标系A\bold{A}A:
xU=cosθ⋅xM+sinθ⋅yN,yV=−sinθ⋅xM+cosθ⋅yN \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}_NxU=cosθ⋅xM+sinθ⋅yN,yV=−sinθ⋅xM+cosθ⋅yN
然后将分解的权重按照列来写,则可以得到:
ARB=[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下的表示为 pA(m,n)\bm{p}_A(m, n)pA(m,n),新坐标系 B\bold{B}B 下的表示为 pB(u,v)\bm{p}_B(u, v)pB(u,v),那么根据上面的坐标变换结论,两者之间的关系为:
pA=ARB⋅pB \bm{p}_A = {^A}\bm{R}{_B}\cdot\bm{p}_B pA=ARB⋅pB
展开为:
[mn]=[cosθ−sinθsinθcosθ]⋅[uv] \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 cos θ−v sin θn=u sin θ+v cos θ m = u\:cos\,\theta - v\:sin\,\theta \\
n = u\:sin\,\theta + v\:cos\,\theta m=ucosθ−vsinθn=usinθ+vcosθ
表示为矩阵形式:
[mn]=[cosθ−sinθsinθcosθ][uv] \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]
这里表明,两种方式的结果是一样的。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)