机器人逆动力学(Robot Inverse Dynamics)

        (作者建议您在这里下载本文pdf版获得更清晰的阅读方式)。

        逆动力学问题是指:已知某一时刻机器人各关节的位置 clip_image002,关节速度clip_image004及关节加速度clip_image006,求此时施加在机器人各杆件上的驱动力(力矩)clip_image008

        逆动力学问题在机器人控制与计算机动画领域都有广泛的应用。例如当给出期望的机器人运动状态时,我们可以通过逆动力学解算来分析其力矩是否可以由作动系统实现。在计算机动画领域,可以利用优化算法求解力矩消耗最小的动画过程(如文献[1])来得到一个自然的动画。另外,逆动力学也常作为正动力学的一个子部分来求解正动力学(正动力学指已知力和力矩,求系统状态)。

        逆动力学可以利用牛顿欧拉(Newton-Euler)方程来求解,也可以利用拉格朗日(Lagrange)方程来求解(二者的等价性与区别读者可以参看文献[2]中的2.3节)。本文旨在讲解如何基于牛顿欧拉(Newton-Euler)方程来求解机器人逆动力学,其算法被称为“迭代牛顿欧拉算法(Recursive Newton-Euler Algorithm)”。

1. 预备知识

        在介绍“迭代牛顿欧拉算法(Recursive Newton-Euler Algorithm)”之前,让我们先看一下什么是牛顿欧拉方程:

clip_image010

        其中clip_image012表示线加速度,clip_image014表示角加速度(角速度的导数),等式左边的求和符号表示公式中应该使用合力与合力矩。关于如何得出牛顿欧拉方程,请参看我的前一篇文章:《刚体动力学》http://www.cnblogs.com/ArenAK/archive/2010/06/07/1753427.html

2. 迭代牛顿欧拉算法

        下面我们说明什么是“迭代牛顿欧拉算法(Recursive Newton-Euler Algorithm)”,即它如何从系统状态求解出力矩,之后在下一节本文将说明为什么要进行“迭代”计算,从而导出此算法的复杂度。

        迭代牛顿欧拉算法包含两个迭代过程:

        (1)第一个迭代过程由机器人运动系统的根节点开始,逐步向各个叶子节点进行迭代。在此迭代过程中各个杆件的运动速度(线速度clip_image016、角速度clip_image018)、运动加速度(线加速度clip_image020、角加速度clip_image022)被依次求出,从父节点向子节点迭代的直观原因是父节点会带动子节点运动,因此子节点的速度/加速度要在父节点的速度/加速度求出后迭代求出:

clip_image024

clip_image026

clip_image028

clip_image030

        其中速度(线速度clip_image032、角速度clip_image034)和加速度(线加速度clip_image036、角加速度clip_image038)都表示在杆件clip_image040的局部坐标系clip_image042中;
        线速度clip_image036[1]和线加速度clip_image038[1]为杆件clip_image040[1]局部坐标系原点的运动速度(表示在局部坐标系clip_image042[1]中);
        clip_image044为杆件clip_image040[2]的运动轴(平移轴或旋转轴)在坐标系clip_image042[2]中的方向;
        clip_image046clip_image048为测量得到的杆件clip_image040[3]旋转的速度和加速度数值(是标量);
        clip_image050为由坐标系clip_image052到坐标系clip_image042[3]的旋转矩阵;
        clip_image054为坐标系clip_image042[4]的原点在坐标系clip_image052[1]中的位置。

        同时由于各个杆件所受的合力、合力矩只与加速度有关,因此在此迭代过程中各杆件所受的合力、合力矩也可以被求出:

clip_image056

clip_image058

        其中clip_image060clip_image062分别为杆件clip_image040[4]的质心所受到合力、合力矩。
        clip_image064为杆件clip_image040[5]的质量,clip_image066为杆件clip_image040[6]的质心在坐标系clip_image042[5]中的坐标,clip_image068为坐标系clip_image042[6]中以质心为参考点杆件clip_image040[7]的惯量阵。

        (2)第二个迭代过程的方向由叶子节点开始,逐步向根节点进行迭代,目的是求出各个杆件之间的相互作用力。每个杆件受到的力(力矩)包括父杆件作用于本杆件的力(力矩),子杆件作用于本杆件的力(力矩),以及重力。对于最末端的叶子杆件,不存在子杆件的作用力(即下式中clip_image070clip_image072),因此可以从子杆件开始算起,逐步推导出各个杆件之间的相互作用力(力矩)。

clip_image074

clip_image076

         其中clip_image078clip_image080分别为杆件clip_image040[8]经由关节clip_image040[9]而受到的力、力矩。

         最后可求出杆件在某个轴向上所受到的力矩的大小(标量):

clip_image082

3. 迭代计算的优越性

        现在我们已经知道了如何利用迭代牛顿欧拉算法进行计算,我们再来看看为何要进行“迭代”计算。实际上,不进行迭代也可以计算出结果,然而不进行迭代将会存在过多的冗余计算,大大影响计算效率。我们将以速度的计算为例来说明,为了叙述简单,我们设各个关节只有一个自由度,各个速度量表示在一个公共坐标系(而不是各个杆件的局部坐标系)下。因此利用递归方法杆件clip_image040[10]的速度表达式为:

clip_image084

        设根节点处的速度为clip_image086。非递归方法杆件clip_image040[11]的速度表达式为:

clip_image088

        设clip_image090代表一个标量与向量相乘的计算代价,clip_image092代表两个向量进行相加的计算代价。那么调用一次递归式的计算代价为clip_image094,调用一次非递归式的计算代价为clip_image096,则利用递归式计算机器人前clip_image098个杆件的计算代价为clip_image100,而利用非递归式进行相应计算的代价为clip_image102。因此,利用递归计算式获得了复杂度为clip_image104的高效率计算,而利用非递归计算式则获得复杂度为clip_image106的低效率计算。

非递归式计算效率低的原因在于进行了过多的冗余计算:

clip_image108

        可见clip_image110这一项被重复计算了clip_image098[1]次,clip_image113被计算了clip_image115次,等等。递归算法避免了此类冗余计算,因而获得了高效率。

        当公式越复杂时,递归与非递归获得的效率差别更大。例如利用递归来计算加速度,则复杂度由clip_image117降为clip_image104[1],而力矩的计算则更是从复杂度clip_image120降为clip_image104[2]。因此迭代牛顿欧拉算法实现了复杂度为clip_image104[3]的逆动力学计算。

 

        说明:本文3、4节内容大多参考了文献[3]。

 

[1] C. Rose, et al., "Efficient generation of motion transitions using spacetime constraints," presented at the Proceedings of the 23rd annual conference on Computer graphics and interactive techniques, 1996.

[2] 霍伟, 机器人动力学与控制: 高等教育出版社, 2005.

[3] R. Featherstone, Rigid Body Dynamics Algorithms: Springer-Verlag New York, Inc., 2007.

你可能感兴趣的:(dynamic)