2-4 变换的计算
#学习笔记 #机器人模块 #机器人理论 #机器人运动学 #空间描述与坐标变换
上几节讲述了关于变换的相关内容,下一步就是研究如何计算变换。这节主要介绍变换的乘法和变换的逆运算。
# 复合变换

在图中,已知 $^CP$ 求 $^AP$
已知坐标系{C}相对于坐标系{B},并已知坐标系{B}相对于坐标系{A}。
$$
{C}\rightarrow{B} \quad{B}\rightarrow{A}
$$
将 $^CP$ 变换为 $^BP$ :
$$
^BP=^B_{C}T^CP
$$
然后将 $^BP$ 变换为 $^AP$ :
$$
^AP=^A_{B}T^BP
$$
将两式联合可以得到:
$$
^AP=^A_{B}T^B_{C}T^CP
$$
由此可以定义:
$$
^A_{C}T=^A_{B}T^B_{C}T
$$
可以求出 $^A_{C}T$ :
$$
^A_{C}T=\begin{pmatrix}
^A_{B}R & ^AP_{BORG} \
0 & 1
\end{pmatrix}
\begin{pmatrix}
^B_{C}R & ^BP_{CORG} \
0 & 1
\end{pmatrix}
$$
然后求得:
$$
^A_{C}T
\left(\begin{array}{ccc:c}
&^A_{B}R^B_{C}R && ^A_{B}R^BP_{CORG}+^AP_{BORG} \
\hdashline
0 & 0 & 0 & 1
\end{array}\right)
$$
逆变换
已知{B}相对于{A}的描述,也就是 $^A_{B}T$ ,想要去求{A}相对于{B}的描述,也就是对已知的 $^A_{B}T$ 去求逆,想求得这个矩阵的逆可以直接进行求逆操作,但是这并没有利用到变换的性质,下面就要利用变换的性质对矩阵进行求逆。
由 [[2-1 描述位姿#姿态描述]]可以得到旋转矩阵的性质:
$$
^B_{A}R=^A_{B}R^T
$$
再利用到 [[2-2 坐标映射#一般变换]] 当中的性质,将 $^AP_{BORG}$ 转变为在{B}当中的描述:
对于 $^AP_{BORG}$ 可以得到:
$$
^AP_{BORG}=^A_{B}R^BP_{BORG}+^AP_{BORG}
$$
转换为在{B}的描述:
$$
^B(^AP_{BORG})=^B_{A}R^AP_{BORG}+^BP_{AORG}
$$
左边为零,可以得到:
$$
^BP_{AORG}=-^B_{A}R^AP_{BORG}=-^A_{B}R^T\ ^AP_{BORG}
$$
所以就可以求得 $^B_{A}T$ :
$$
^B_{A}T=\left(\begin{array} {ccc:c}
&^B_{A}R && ^BP_{AORG} \
\hdashline
0 & 0 & 0 & 1
\end{array}\right)
=\left(\begin{array}{ccc:c}
&^A_{B}R^T && -^A_{B}R^T\ ^AP_{BORG} \
\hdashline
0 & 0 & 0 & 1
\end{array}\right)
$$
常用于变换矩阵求逆:
$$
^B_{A}T=^A_{B}T^{-1}=\left(\begin{array}{ccc:c}
&^A_{B}R^T && -^A_{B}R^T\ ^AP_{BORG} \
\hdashline
0 & 0 & 0 & 1
\end{array}\right)
$$
例 2.5-求逆应用
坐标系{B}绕着坐标系{A}的 $\hat{Z}$ 轴旋转 30 度,沿着 $\hat{X}{A}$ 平移 4,沿着 $\hat{Y}{A}$ 平移 3,得到 $^A_{B}T$,求 $^B_{A}T$
定义坐标系{B}
$$
^A_{B}T=\left(\begin{array} \
\frac{\sqrt{ 3 }}{2} & \frac{1}{2} & 0 & 4 \
\frac{1}{2} & \frac{\sqrt{ 3 }}{2} & 0 & 3 \
0 & 0 & 1 & 0 \
0 & 0 & 0 & 1
\end{array}\right)
$$
用上面公式进行求逆
$$
^B_AT=\begin{pmatrix}
\frac{\sqrt{ 3 }}{2} & \frac{1}{2} & 0 & -2\sqrt{ 3 }-\frac{3}{2} \
-\frac{1}{2} & \frac{\sqrt{ 3 }}{2} & 0 & 2-\frac{3\sqrt{ 3 }}{2} \
0 & 0 & 1 & 0 \
\hline
0 & 0 & 0 & 1
\end{pmatrix}
$$
也就是旋转的部分转置一下,平移的部分计算一个 $-^A_{B}R^T\ ^AP_{BORG}$
变换方程
图中{D}可以通过两种不同的方式表达成变换相乘的形式
第一种:
$$
^U_{D}T=^U_{A}T^A_{D}T
$$
第二种:
$$
^U_{D}T=^U_{B}T^B_{C}T^C_{D}T
$$
两个表达式构造成一个变换方程,,两个式子右边部分相等:
$$
^U_{A}T^A_{D}T=^U_{B}T^B_{C}T^C_{D}T
$$
假设上个式子当中除了 $^B_{C}T$ 以外均为已知,则目前有一个变换方程和一个未知变换,可以解出:
$$
^B_{C}T=^U_{B}T^{-1}\ ^U_{A}T\ ^A_{D}T\ ^C_{D}T^{-1}
$$
假设有 n 个未知变换以及 n 个变换方程,变换就可以由变换方程解出,例如上面的式子就是通过一个变换方程来接触一个未知变换
关于计算问题
计算成本的降低可以促进机器人产业的发展,然而在操作系统的设计当中,高效的计算能力始终是一个重要的问题。
在之前几节当中时常使用齐次变换,但是在典型工业机器人上使用的变换软件并不直接采用齐次变换,因为使用齐次变换会浪费大量的时间在数字 0 和 1 的相乘上面
当计算相同的内容时,不同的计算顺序会导致计算量的差别很大,例如对矢量的多次旋转:
$$
^AP=^A_{B}R\ ^B_{C}R\ ^C_{D}R \ ^DP
$$
有两种计算顺序:
- 先将三个旋转矩阵相乘得到 $^A_{D}R$,共需要 63 次乘法和 42 次加法运算
- 一次做一个矩阵计算,对 $^DP$ 顺着进行计算,计算需要 27 次乘法和 18 次加法运算
从计算次数可以看到,同样的计算内容,两种计算顺序的差异十分巨大