【机器人学】从线性变换的角度理解机器人坐标变换

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η=(XC)η=X(Cη)

从而有
ξ = C ⋅ η 或者 η = C − 1 ⋅ ξ \bm{\xi} = \bold{C} \cdot \bm{\eta} \quad 或者 \quad \bm{\eta} = \bold{C}^{-1} \cdot \bm{\xi} ξ=Cη或者η=C1ξ
这称为坐标变换公式,表示同一个向量在不同基下的坐标表示之间的关系。

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} BX 轴单位向量分解到旧坐标系 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)1pA或者pA=ATBpB

2.3 二维旋转的例子

为了便于理解,下面给出一个最简单的二维旋转例子。

如下图所示,坐标系 A \bold{A} A (坐标轴分别为 MN)逆时针旋转了 θ \theta θ 度后,得到了坐标系 B \bold{B} B(坐标轴分别为 UV),现在想求坐标系 B \bold{B} B 相对于坐标系 A \bold{A} A 之间的旋转变换 A R B {^A}R_B ARB
在这里插入图片描述

根据上面结论,先将新坐标系 B \bold{B} B 的坐标轴UV 上的单位向量分解到旧坐标系 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=ARBpB
展开为:
[ 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]
这里表明,两种方式的结果是一样的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值