本文转载自微信公众号ROBOTICS

 

上一篇文章(点这里查看),我们利用拉格朗日力学,推导出了一道简洁优美的机械臂动力学方程:

 

这个方程,把机械臂的动力学模型归结为三个部分:

 

1.由质量矩阵描述的、关节加速度的“贡献”

2.由神秘的v描述的、关节速度的“贡献

3.由g描述的、只与关节位置有关的保守力的贡献

 

理解机械臂的动力学方程,我们可以从这三部分分别入手。

 

质量矩阵对角项的物理意义


在上一篇文章中,我们从动能的表达式出发推导出了质量矩阵M。我们有:

 

从动能的表达式出发定义质量矩阵比较抽象,实际上,质量矩阵是有明确的物理意义的。想要对质量矩阵有一个更直观的理解,最好的方法就是看一些具体的例子。

 

假设现在我们有一个两自由度的RP机械臂,如下图所示

 

其中圆形十字交叉标明了连杆的质心位置,m为连杆质量,I为连杆的惯性张量。简单起见,我们的惯性张量为对角矩阵:

 

按照上一篇文章定义的质量矩阵,我们需要先求雅可比矩阵。(雅可比矩阵怎么求?请参考这篇文章)则我们可以得到

注意这里我们求的不是end effector的雅可比矩阵,而是每一根连杆的质心的运动相对于关节运动的雅可比矩阵(在求解时可以把质心当作end effector来理解)。

 

最后,我们可以得到这个RP机械臂的质量矩阵:

 

这个质量矩阵看起来非常简单!第一,它的非对角项都是零;第二,它的对角项看起来也很熟悉。这两点说明什么呢?

 

先来看左上角对角项,这种 ml平方加I的形式你会想到什么呢?对了,就是惯性张量的平行轴定理(parallel axis theorem)!平行轴定理说,刚体对某一轴的转动惯量,可以通过刚体对通过质心且与这个轴平行的轴的转动惯量求得:假设刚体质量为m,刚体对通过质心的轴的转动惯量为I,两平行轴距离为d,则刚体对此轴的转动惯量为I+md^2。

 

现在看这一项的表达式:m1l1^2+Izz1 正是第一根连杆对第一个关节的转动惯量;m2l2^2+Izz2则是第二根连杆对第一个关节的转动惯量——这一项正是这两根连杆对第一个关节转轴的惯量相加

 

右下角的对角项就更简单了,它不正是第二根连杆对第二个关节的惯量吗?由此,我们可以推理:一个n x n的质量矩阵的第i个对角项,表示的正是机械臂从第i到第n根连杆相对于第i个关节的质量或惯量之和,更准确一点说,是第i个关节加速运动时它需要克服的其它所有连杆的质量或惯量。对旋转关节,我们可以用平行轴定理求得连杆的转动惯量;对平移关节,这一项就是每根连杆的质量。

 

现在看下图这样一个机械臂,你能马上把它的对角项写出来吗?

 

看一看上文黑体字的内容,我相信答案已经呼之欲出了。(在看答案之前不妨先自己写一写,需要注意到是,质心到转轴的距离是有可能随关节位置而变化的!)

 

写出来质量矩阵的对角项应该是这样的:

这里最容易出错的应该是中间这一项,随着第三关节角度的改变,第三根连杆的质心到第二关节转轴的距离也在改变——画个草图,用余弦定理即可求出。

 

质量矩阵非对角项的物理意义


说完了对角项,我们要来啃一啃非对角项了。在第一个例子中,质量矩阵的非对角项都是零,这对第二个例子来说还成立吗?在我们理解非对角项的物理意义、能够一眼看出这个问题的答案之前,我们不妨先老老实实地用雅可比矩阵大法把质量矩阵求出来。

 

(希望你算完再来看答案,毕竟CC也是好几页草稿纸手算的……一个小提示是,从质量矩阵的式子可以很容易地推论:质量矩阵是一个对称矩阵。所以我们其实只需要求矩阵里的三个项就够了。)

 

结果如下:

 

乍一看这式子也太复杂了——我们不妨先不管第三个关节,假设m3为0,那么这就是一个PR形式的二自由度机械臂,它的质量矩阵的非对角项为m2 × l2 × cos(q2)。

 

这个式子的物理意义,我们可以先从几何意义入手,比如说,l2 x cos(q2)是什么呢?

 

从上图可以清楚看出,l2c2是第二根连杆的质心到第一根关节轴的距离。考虑这样一个问题:当第二个关节以a的角加速度从静止开始转动时(为了暂时先不考虑角速度的影响,我们假设这个瞬间角速度为0),第一个关节需要承受/施加多大的力才能保持静止?

 

显然,角加速度a会在质心m2形成大小为a x l2的线加速度,这个线加速度在第一个关节轴上的分量大小为a x l2 x cos(q2),则我们说这根连杆在第一个关节轴方向的惯性力为m2 x a x l2 x cos(q2),为了保持系统平衡,第一个关节则需要施加大小与这个惯性力相等、方向相反的力。

 

这就很有意思了——第二个关节运动的”后果“需要第一个关节来承担,而质量矩阵中的这一项乘以第二个关节的加速度,反映的正是第二个关节运动时第一个关节需要承担的惯性力。反观本文的第一个例子中的RP机械臂,第二个平移关节不管怎么运动,都不会对第一个关节产生影响(而是由机械结构承担了);也因此,它的质量矩阵非对角项都是零。这种另一个关节运动会都一个关节产生影响的情况,我们把它称为关节之间的动力学耦合(dynamic coupling)。注意到质量矩阵是一个对称矩阵,关节的耦合也是相互的:在这个例子中,第一个关节的加速运动同样会造成第二个关节需要施加额外的力矩以维持其运动状态,而且这个质量系数是一样的,你可以自己推导下。

 

为了加深理解,我们把之前被我们忽略掉的第三个关节和m3带回来。再看下完整的质量矩阵非对角项:

 

刚才我们讲了第1行第2列加号左边的表达式,相信你也能很快看出加号右边的表达式的物理意义是什么——它说的是第二个关节加速转动时,第一个关节需要承受的由第三个质心运动对它“施加”的惯性力的系数。第1行第3列的式子也同理,这里不再赘述。

 

现在我们再来看看第2行第3列的式子:按照前面的思路,这个表达式表达的是第二个关节由于第三个关节的加速运动而受到的惯性力。我们可以把它抽离出来成为一个单独的问题:如下图,当右边的旋转关节从0加速旋转时,左边旋转关节需要施加多大的扭矩以保持静止——你能求出来吗?

 

最终答案已经有了,具体的求解过程,感兴趣的请后台讨论。

 

质量矩阵物理意义的总结


通过对质量矩阵对角项及非对角项的分别研究,你是否对它的物理意义有了更深入的理解?我们把它放到动力学方程里看,由关节加速度“贡献”的每个关节的扭矩可以写成如下形式:

 

它正是由每个关节自身加速运动(驱动所有在其之后的连杆加速运动)所需要的扭矩,与其他关节加速运动(造成其之后的连杆加速运动)对这个关节的影响叠加而成。

 

由于动力学耦合的存在,对机械臂的每一个关节进行单独控制必然会遇到这样的困难:一个关节的控制回路需要时刻对另一个关节运动造成的“后果”进行调整;如果另外的关节加速度很大、或者惯性很大,那么这个关节控制器需要调整的幅度很大、频率很高,这就会造成它无法快速准确地跟随命令、甚至可能会有抖动的情况发生。

 

不过,加速度造成的耦合只是一部分——注意到我们前面讨论时总是把关节的瞬时速度假设为0,如果关节速度不为0,是不是还应该有其他的惯性力作用呢?这个问题暂时留给你去思考了,我们会在下篇中一起探讨。