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