天天看点

关于机器人运动学中变换矩阵左乘右乘的理解(2)-变换的观点

(0)缘由

这年复习考研,对矩阵有了更深入的理解,但对线性变换与基变换是有点混淆,偶然看了去年写的关于机器人运动学的文章,豁然开朗,遂写这篇文章分享一下所得,也是对上一片文章的拓展,所以读这篇文章前建议先看看前一片文章(还有想理解线代可以看看bilibili上3Blue1Brown的关于线性代数本质的视频,知乎上也有人整理过)。

(1)从两种变换到矩阵左右乘

{ 线 性 变 换 : u 1 ⃗ = A u 0 ⃗ 基 变 换 : u 1 ⃗ = A u 0 ⃗ \begin{cases} 线性变换: \vec{u_1}=A\vec{u_0}\\ 基变换:\vec{u_1}=A\vec{u_0}\end{cases} {线性变换:u1​

​=Au0​

​基变换:u1​

​=Au0​

​​

一看名字就知道这两种变换不是同一种东西,但它们的表达式竟然一模一样,让人不禁怀疑两个东西是不是等价的。
拿出这张图:
关于机器人运动学中变换矩阵左乘右乘的理解(2)-变换的观点
为了解释直观方便,我们这里的矩阵 A A A是一个2x2的正交方阵(也就是机器人运动学中旋转矩阵常见到的那种),当然,矩阵 A A A非正交,只要它是一个行列式不为0的方阵,线性变换与基变换都是满足的,至于为什么,参见bilibili线性代数的本质视频。
根据上图很容易得到:
( x 1 y 1 ) = ( c o s ( β ) − s i n ( β ) s i n ( β ) c o s ( β ) ) ∗ ( x 0 y 0 ) \begin{pmatrix} x_1\\ y_1 \end{pmatrix}= \begin{pmatrix} cos(\beta) & -sin(\beta)\\ sin(\beta) & cos(\beta) \end{pmatrix}* \begin{pmatrix} x_0\\ y_0 \end{pmatrix} (x1​y1​​)=(cos(β)sin(β)​−sin(β)cos(β)​)∗(x0​y0​​)

对应到矩阵的线性变换: u 1 ⃗ = A u 0 ⃗ \vec{u_1}=A\vec{u_0} u1​

​=Au0​

​,这个变换的作用就是将向量 u 0 ⃗ \vec{u_0} u0​

​在坐标系0中旋转了 β \beta β度,因为是一个正交矩阵,矩阵的行列式为1,所以向量前后长度未发生改变。

再看这副图:
关于机器人运动学中变换矩阵左乘右乘的理解(2)-变换的观点
同样很容易得到:
( x 1 y 1 ) = ( c o s ( β ) − s i n ( β ) s i n ( β ) c o s ( β ) ) ∗ ( x 0 y 0 ) \begin{pmatrix} x_1\\ y_1 \end{pmatrix}= \begin{pmatrix} cos(\beta) & -sin(\beta)\\ sin(\beta) & cos(\beta) \end{pmatrix}* \begin{pmatrix} x_0\\ y_0 \end{pmatrix} (x1​y1​​)=(cos(β)sin(β)​−sin(β)cos(β)​)∗(x0​y0​​)

我们发现形式竟然和上面的形式一模一样,但这里表示的意义就不同了,这里的向量并未发生变化,只是我们转动了一下我们的视角,从另外一个坐标系去看这个向量,我们怎么转换我们的视角呢?我们将坐标系旋转了 − β -\beta −β度。所以这里的基变换: u 1 ⃗ = A u 0 ⃗ \vec{u_1}=A\vec{u_0} u1​

​=Au0​

​的意思是,我们已知在末端执行器坐标系下的向量为 u 0 ⃗ \vec{u_0} u0​

​,我们将坐标系旋转了 − β -\beta −β度,这样恰好变回了基坐标系中,在基坐标系下,向量的坐标为 u 1 ⃗ \vec{u_1} u1​

​。

(2)比较

v 2 = M 2 ∗ M 1 ∗ v 0 v_2=M_2*M_1*v_0 v2​=M2​∗M1​∗v0​(固定角)

v 2 = M 1 ∗ M 2 ∗ v 0 v_2=M_1*M_2*v_0 v2​=M1​∗M2​∗v0​(欧拉角)

对于固定角,在平面内旋转了两次 a a a与 β \beta β,最后得到 v 2 v_2 v2​

对于欧拉角,末端执行器坐标系先旋转 − β -\beta −β度,再旋转 − a -a −a度,最后回到基坐标系,从末端执行器坐标系回到基坐标系,这是从左到右乘的;

若是从基坐标系到末端执行器坐标系:

v 0 = M 2 − 1 M 1 − 1 v 2 v_0=M_2^{-1}M_1^{-1}v_2 v0​=M2−1​M1−1​v2​

这又是从右到左乘的了,但它与固定角有实质的区别;可以发现欧拉角的右乘是根据欧拉角变化的逆(从基坐标到末端执行器坐标)的左乘推导而来的(定义的欧拉角是想从末端执行器坐标转换到基坐标)

这里同样可以发现,对于二维旋转 M 2 ∗ M 1 M_2*M_1 M2​∗M1​与 M 1 ∗ M 2 M_1*M_2 M1​∗M2​的效果是相同的(实际上二维的 M 2 ∗ M 1 = M 1 ∗ M 2 M_2*M_1=M_1*M_2 M2​∗M1​=M1​∗M2​),但三维的效果就不同了,因为可能旋转轴的方向发生了改变,这时两种变换就不再相同了,但仍然可以通过线性变换与基变换的方式进行理解,因为在固定角中,坐标轴不会变,只是向量的变换;而在欧拉角中,相邻两次的坐标系他们有一个轴的方向不会发生变化,那就是旋转轴的方向。

(3)更直观的类比

好比你坐在火车上,你坐的火车不动旁边的火车向前开(线性变换),与你做的火车向后开旁边的火车不动(基变换),你眼前所见到的景象都是一样的,但本质是不同的。