3层的控制--从决策层到控制层

--本文为几年前旧文,原来写在网易博客,但是转不过来,故粘贴于此--

一般来说3层的动作控制方法目前来看仅采用动力学的方式是比较困难的,根据<<双足机器人行走控制与优化>>这本书,该书将控制方法分为:

1基于轨迹预规划的机器人行走控制方法

2仿生控制方法

3非周期的全身运动规划

4被动行走

其中

1是建立在对双足机器人运动平衡精确的动力学和静力学分析的基础上,速度太慢不能满足行走实时性控制要求

2源于神经生物学的研究,分析生物的行为模式和运动形式,在我看来更应该归结于2层上

3不直接运用经典运动学以及静力学进行轨迹规划,可统称示教学习或模仿学习,这类方法的主体思想在于首先通过生成基本粗略的全身运动,再通过ZMP等稳定性判据以及避障等方法对运动进行全身运动模式的变换以保证机器人能够在满足约束条件先完成,并最终通过传感器反馈,实现闭环控制。

4比较新颖,该方法利用机械结构的精巧设计,在适当的初始条件下,机器人能够实现有节律的运动,但该方法大多只能完成简单的前向行走,也无法处理意外。

从目前所学资料来看,大部分的游戏动画中是采取方式3,我也认为这种方法是比较有前途的,不过与<<双足机器人行走控制与优化>>书中不同的是,我将ZMP等稳定性等问题处理放到了2层处理,同时在3层也不进行全身运动模式变换等工作,我认为这部分的工作具有全局性,最好放到2层处理。当然,这样处理有可能导致系统的设定不是最优的,而是局部优化值,以后研究吧。目前及随后所有的分析都是基于方式3的。

3层要把2层的决策目标转化为动作目标,对于2轮小车而言比较简单,根据上篇的分析,决策层已经给出了左右两轮的目标速度了,控制层直接将此速度传给4层即可,对于双足或多足机器人来说就不是那么回事了,要复杂的多。这有两个问题:

1确定关节目标:确定哪个关节动作,动作的大小是多少?

2确定关节执行器目标:将关键目标转化为执行器的目标

也就是说3层实际上也是要分成两层的。分别为关节控制层(3.1层)和执行器控制层(3.2层)

需要说明的是,在游戏动画中,智能体的动作或动画序列主要采用两种基本形式:实时动画(real-time animation)和逐帧动画(frame-by-frame animation)。(计算机图形学,第三版,Donald Hearn,清华大学出版社, p583),很多情况下我们需要的是实时动画。

实时动画可以采用的技术有关键帧技术和运动描述技术。

关键帧技术设计动作关键帧,然后在相邻帧直接进行插值,插值的方法有多种,一般采用线性插值

运动描述技术有直接运动描述,运动学和动力学,方向动力学等

生成动画的一项基本技术是关键链形体建模,关键链形体就是通过一组通过旋转节点连接的刚性连杆组成的层次结构,这将动画对象建模为移动的棍状形体或简化了的骨架。机器人与之类似,不过其旋转节点的自由度不像动画对象,可能只有一个方向,而动画对象可能是全向的。

直接描述法就是用公式描述每一个旋转节点的运动,可用于简单的动作序列

动力学方法利用物理规律,设定运动轨迹,进而控制各个关节节点,但是运动轨迹的设定工作,或运动轨迹规划是一个比较复杂的工作,反向动力学在确定的时间内,由初始位置和最终位置,反算关节移动参数。该方法常用于复杂对象,给定对象末端节点(如手或脚)的位置和方向,由系统确定实现所需运动的其他节点的运动参数。

下面以双足机器人为例分析:智能体从静止向目标前进

首先2层分析决定智能体以指定左右速度向目标前进

3.1层分析智能体状况及动作空间状况:

a当智能体处于静止状态,所以3.1层决定从静止到步行(或跑步状态,具体根据2层的决策,3.1层分析),并设定转换过渡时间Time和转换方式,转换方式一般设定为线性插值方式,设定步行动作为周期性动作,周期为T,可能还有幅度等。 

双足机器人其动作一般为周期性的,一般设定相同,为同一个周期T。也有非周期的。这些动作表现为关节动作目标

b当智能体处于静止到步行的过渡状态,不设定

c当智能体处于步行状态,可能会调整动作目标

将动作目标借鉴了steering behavior控制的思想,属于其中的路径跟随控制,将其以力或者力矩的形式表现出来。

这些动作的设定方式有两种:1关键帧法; 2IK反向解算,不管何种形式,某个关节的运动最终都表现为受到一个力或者力矩B作用的形式

在IK反向解算时要用到目标点,这是由2层来设定的。

3.1层随后分析周围动作空间的状况,是否有可能发生碰撞,是否有障碍物等,有斜面等(类似于墙面),这些都表现为对关节的力或力矩形式B‘。

最好将一个动作表现为一个函数,并将其压缩在0~2π范围,人的上肢,下肢动作一般都是左右对称的,只是一般相差约π而已。也就是说将动作标准化处理。

上述分析控制算法主要适用于采用动力学FK,反向动力学IK和关键帧方法,需要的计算量是比较大的,还有一种比较简单的方法,就是动作帧方法,每一帧记录一个动作的瞬间,这些帧有序排列,在设计动作时,往往要在动作的流畅性和系统资源占用之间做出平衡,打多数情况下,这些动作可能保存在一个单独的文件中,按照动作规律形成有序的序列。这些动作帧在系统启动前预先设计,甚至3.2层也可以取消了。

动作帧方法的主要问题是处理原地动作比较简单,但是一旦涉及移动和与环境交互的话比较困难,按存储的动作执行的话有可能出问题,如双足机器人行走在平坦路面与行走在斜坡上的动作是类似的,但是动作帧方法无法处理,同时斜坡不同倾斜程度,其行走方式也略有不同,而这些都是动作帧方法所无法处理的。(能否将动作帧转化为没个关节的目标,进而转化为受的力或力矩呢?如此一来可能所有的方法就都统一了。)也就是说动作帧方法动作可能比较生硬,没有灵活性。

3.2层根据3.1层的设定,采用C=B0(t)*(1-t/T)+t/T*B1(t)+B‘设定关节目标,其中t为从静止过渡到步行的时间,关节的目标状态B1,当前状态为B0,C为各个关节的所受的综合力或综合力矩。这种线性插值的方法容易出现的问题是过渡不平滑。

根据各个关节所受的力矩,其质量,惯量等,计算执行器目标速度,角速度,位移,角位移等,传送给4层。

3.2层需要注意的是机器人末端关节所受的力和力矩,其转动惯量等会向后传递,应该在这一层予以计算考虑,这将影响下一节执行器输出的速度,力矩等。

4层的执行器等等主要是电机等设备,其所受的惯量通常时时变的,非线性的,解算比较复杂,用经典的控制算法一般难以达到效果,这就是所谓的很多论文中所采用的滑模控制,模糊控制等(猜的),其实3.2层可能也是需要的,以后再研究。

发布了27 篇原创文章 · 获赞 3 · 访问量 5561

猜你喜欢

转载自blog.csdn.net/wxg_wuchujie88/article/details/103948397