心得记录
变换矩阵的左乘和右乘的运动解释是不同的:变换顺序「从右向左」,指明运动是相对固定坐标系而言的;变换顺序「从左向右」,指明运动是相对运动坐标系而言的
结论:相对 基准坐标系 做变换是左乘,相对 当前坐标系 做变换是右乘
左乘和右乘的概念
存在一坐标系{A},坐标系{A}进行齐次坐标变换,得到{B},此时的变换矩阵 TBAT_B^ATBA;坐标系{B}再进行一次齐次坐标变换,得到{C}, 此时的变换矩阵为 TCA=TCBTBAT_C^A = T_C^BT_B^ATCA=TCBTBA 时称为左乘,为 TCA=TBATCBT_C^A = T_B^AT_C^BTCA=TBATCB 时称为右乘。
变换矩阵的由来
坐标系{A}中的一矢量 ppp,记此时 ppp 为 p0p_0p0(p0p_0p0 与坐标系{A}固连);p0p_0p0经过坐标系{A}的变换得到坐标系{B}后,相应的得到一个新位置,记此时 ppp 为 p1p_1p1(p1p_1p1 与坐标系{B}固连,注意 p1p_1p1 在坐标系{B}中的坐标值就是 p0p_0p0);p1p_1p1经过坐标系{B}的变换得到坐标系{C}后,也相应的得到一个新位置,记此时 ppp 为 p2p_2p2(p2p_2p2 与坐标系{B}固连,注意 p2p_2p2 在坐标系{B}中的坐标值也是 p0p_0p0)。
变换矩阵 TBAT_B^ATBA 的含义是坐标系{A}变换到坐标系{B}的变换矩阵(并没有提到变换的方式),但这里有一个问题(左乘和右乘区别的来源):TBAT_B^ATBA 是怎么计算的?——TBA=[RBAPBoA 01]T_B^A = \left[ \begin{matrix} R_B^A & P_{B_o}^A \\\ 0 & 1\end{matrix} \right]TBA=[RBA 0PBoA1],其中的 RBAR_B^ARBA 与 PBoAP_{B_o}^APBoA 的计算直接导致了左乘和右乘。
以旋转矩阵为例,在坐标系{B}变换到坐标系{C}的过程中,RBA=Rot(x,θ)R_B^A = Rot(x,\theta)RBA=Rot(x,θ) 中 xxx 的来源(坐标系{A}?坐标系{B}?)
现给出 p1=Rot(x,θ)p0p_1 = Rot(x, \theta) p_0p1=Rot(x,θ)p0(没有进行平移变换),其中 x 轴是指坐标系{A}中的 x 轴。
注意上式中各个变量的意义:
- p1p_1p1:矢量 ppp 变换后的坐标
- p0p_0p0:矢量 ppp 变换前的坐标(原坐标)
- Rot(x,θ)Rot(x, \theta)Rot(x,θ):以矢量 p0p_0p0(原坐标)所在的坐标系的轴为旋转轴进行旋转(角度为 θ\thetaθ)
也就是说 TBAT_B^ATBA 的基准坐标系是 坐标系{A}(原坐标系)
左乘与右乘
- 坐标系{B}变换到坐标系{C},变换基准是坐标系{A}
变换前 ppp 在{A}中的坐标为 p1p_1p1,变换后 ppp 在{A}中的坐标为 p2p_2p2,得到
p2=TCBp1p_2 = T_C^B p_1p2=TCBp1
因此有
p2=TCAp1=TCB(TBAp0)=TCBTBAp0p_2 = T_C^A p_1 = T_C^B (T_B^A p_0) = T_C^B T_B^A p_0p2=TCAp1=TCB(TBAp0)=TCBTBAp0
==> TCA=TCBTBAT_C^A = T_C^B T_B^ATCA=TCBTBA(左乘)
- 坐标系{B}变换到坐标系{C},变换基准是坐标系{B}
变换前 ppp 在{B}中的坐标为 p1Bp_1^Bp1B,变换后 ppp 在{B}中的坐标为 p2Bp_2^Bp2B,得到
p2B=TCBp1Bp_2^B = T_C^B p_1^Bp2B=TCBp1B
现在来看 p1B,p2Bp_1^B,p_2^Bp1B,p2B 与 p0,p1,p2p_0, p_1, p_2p0,p1,p2 之间的关系
p1B=p0p_1^B = p_0p1B=p0
p2=TBAp2Bp_2 = T_B^A p_2^Bp2=TBAp2B
因此有
{p2=TBAp2B=TBA(TCBp1B)=TBA(TCBp0)=TBATCBp0p2=TCAp0
\left\{
\begin{array}{l}
p_2 = T_B^A p_2^B = T_B^A (T_C^B p_1^B) = T_B^A (T_C^B p_0) = T_B^A T_C^B p_0 \\
p_2 = T_C^A p_0
\end{array}
\right.
{p2=TBAp2B=TBA(TCBp1B)=TBA(TCBp0)=TBATCBp0p2=TCAp0
==> TCA=TBATCBT_C^A = T_B^AT_C^BTCA=TBATCB(右乘)
关于一些细节的说明
- 教材《机器人学基础》里的 齐次变换矩阵 是在 2.3齐次坐标变换 中提出来的,但我个人认为齐次坐标矩阵只是齐次坐标变换问题的求解工具,而齐次变换矩阵本身的求解需要依靠坐标系变换(即上文内容)。
- 关于变换矩阵的求解使用的是单独的矢量而不是坐标系的原因:请注意求解过程中矢量本身的值对求解过程并无作用(即矢量可以是任意值),而且,坐标系的本质也是一组基向量,所以可以直接将对坐标系的操作和这个对矢量的操作等同。
一些碎碎念
- 一些零碎的吐槽记录
首先是最现实的解题:题目中常常会出现对于一个给定的点 ppp 问其在另一个坐标系中的坐标。这种问题也就是上面提到过的齐次坐标变换中提出的最核心的问题,但是这里面一点和上文有着极大的不同:ppp 是不会变的!这让我对本文方法求解出的齐次变换矩阵求解这种题时相当的迷惑
另外就是这本书中对于左乘和右乘并没有详细解释,唯一的说明就是本文开头的运动解释……好像也够做题了……
最后要吐槽的一个大的问题就是:关于左乘和右乘有一种说法:矢量问题是左乘,坐标系问题是右乘。刚开始变换矩阵的时候,这句话让我烦恼了两天……
如有错误欢迎指正