--本文为几年前旧文,原来写在网易博客,但是转不过来,故粘贴于此,并进行修改--
看了好长时间的《游戏人工智能编程案例精粹》,《游戏物理引擎开发》,主要是对机器人的动作控制感兴趣,希望从中获得灵感,学习如何控制机器人,比如说如何控制一个机器人从A点运动到B点,下面是我这段时间学习和思考的总结
机器人系统应该有感知层,决策层,控制层,执行层
首先感知层就是获取外界信息(环境,位姿,命令等),并将其转化为系统能够理解的形式;----有什么
然后决策层根据获取的信息,决策层进行分析,做出决策(是跑呢,还是躲避?); ----做什么
接着控制层根据决策信息和自身信息规划各个关节(或电机)的动作目标; ----怎么做
最终执行层根据动作目标执行最终的动作(电机转动等,相当于肌肉控制骨骼) ----做
比如说一个机器人(轮式,多足式等):
----1)发现一个目标(激光,超声、图像等方式获取),检测周围环境及自身状态,或发生某个事件等,进行环境建模
PS:SLAM是属于第1层
----2)制定或调整决策,决定躲避(根据当前位置,规划了一条从A点移动到B点的路径,路径规划等),可根据状态机的,或制定层次化目标
----3)根据动力学方法FK,反向动力学方法IK,关键帧方法keyframe、动作帧方法、碰撞检测 或操控行为方法steering behavior等确定各个执行机构的目标(角度,位移等),动作规划等。
PS:这一部分的内容和目前国内的机器人学的内容关系匪浅,如机械手动作的规划等就属于这部分内容,机械本体的结构也是本部分重点关注的内容。
PS:是否将碰撞检测也放到1层?理论上来看是可以的
PS:工业机器人、机械手2、3层可能并为1层:运动规划
----4)执行机构(电动机)执行目标(PS:大学的自动控制研究的是这部分内容)
对于游戏动画而言,执行层貌似是没有的
现在机器人所谓的三大核心部件是控制器、伺服电机、减速机,实际上目前控制器属于1、2、3层部件,目前主要是3层;而伺服电机和减速机属于4层部件
目前其中的重点是3层,难点是2层,2层主要是AI,1层的机器视觉也是目前比较热门的领域,至于4层,因为系统一般属于时变,非线性系统,控制器的实现也比较困难。(后记:确切地说,目前国际上流行的重点是1,2层,但是我的重点是3层。1层如slam,机器视觉,机器学习、神经网络等都是热门,2层是信息的综合应用,人工智能的,3层、4层偏基础,是根基,是运动控制,目前主要是动态控制,主要是研究机器人的动态性能。对波士顿动力公司的Bigdog人们之所以惊叹,刚开始时是因为其能够实现四足运动,踹一脚Bigdog能够自动调节身姿,能够行走在崎岖路面,这都是3,4层实现的功能;而其atlas让人惊叹的原因是1:摔倒后能够起(规划一系列动作,2层);2识别物品,并将其搬用(1层,2层);至于后面的开门等更是1,2层实现的功能了;老美的DARPR目前也更关注此处,国内外差距还是比较大的。)
PS:可以说人工智能是1、2、3层的基础技术,及其重要
PS:控制器有机器人控制器和电机控制器,这个一定要做区分
以例说明,首先以两轮的轮式机器人为例说明,以走迷宫为例
A迷宫地图未知时(随机运动,游荡):
1发射超声,发现前方有一堵墙,记录下信息,根据车体速度(位移)与轮的速度(角位移)等确定车体位姿
2根据已有的策略,决定左转(右转,停止,后退等)根据障碍物,速度,位置、姿态等确定车体控制目标速度(可采用steering behavior方法确定)
3根据角速度、线速度等确定两个电机的各自目标转速及角位移
4根据速度、位移等控制电机转速及角位移(PID等方式)
B迷宫地图已知时(路径跟随):
1获取位姿及环境等信息(GPS,加速度记,电机编码器,电子指南针,超声等)
2规划整体目标路径(一般第一次就已经规划好了),执行路径跟随,根据位置信息及路径信息,根据steering behgavior方法确定车体速度,位移目标等。
3根据车体速度与轮的速度关系确定两个电机的各自目标转速,位移等
4控制电机转速、位移(PID等方式)
可以看出3层基本相同,主要的差别在2层规划了跟随路径,在3层steering behavior中智能体的动作实际是多种动作的综合
如果在上述过程中更有随机的障碍,更要考虑3层了,一般是采用steering behavior方法
再次以两足机器人为例说明,同样走迷宫
因为1,2,4层基本相同,不再叙述了
A迷宫地图未知时(随机运动,游荡):
2根据已知信息,采用steering behavior等方法确定车体(整体)速度,位移等目标。
3采用IK,或关键帧等方法确定各个关节的位姿目标,根据各个关节的位姿确定各个关节执行器(电机)的速度位移等(采用steering behavior方法),IK和关键帧本质上也是属于路径跟随方法,此时2,3可以合并
需要注意的是整体速度,位移等不一定容易根据steering behavior方法,采用动力学方法得出,参数要仔细调节。
确定各个关节执行器的动作是路径跟随方式,在其中可能要有多种因素考虑,比如说碰撞,主要是考虑各个关节及与环境之间的碰撞问题
在确定整体的steering behavior 控制时,把智能体最为一个整体(看成一个点或一个球?),忽略关节等细节
B迷宫地图已知时(路径跟随):
由轮式机器人的运动控制分析,基本可以确定2层确定跟随路径,其他相同
在3层中可能涉及到动作和姿态的切换,一个动作和姿态通常是一个周期性的动作,从一种动作A(姿势a)到另一种动作B(姿势b)通常采用的方法是设定一个过渡时间,两种动作的权重A不住降低,动作B的权重不住增加
在这里综述一下steering behavior控制,我认为这是一种非常重要的控制方式,它将各种因素转换为对智能体的一种作用力(引力,或斥力),如目标点就要引力,障碍就是斥力等,并根据具体情况给各种力分配不同的权重,这个也是要不停的调校的,可阅读《游戏人工智能编程案例精粹》了解,《游戏物理引擎开发》中对点或刚体的处理也是最终转换为作用在点或刚体上的各种力的综合效益,有异曲同工之妙。
多关节系统的动态控制性能应该说是目前研究的一个重点,其研究的问题就是给各个关节下达何种指令或给各个关节设置何种目标,可以让机器人性能最优(功耗最小,动态稳定等)《双足机器人行走控制与优化 》内容基本是这方面内容,涉及到两个内容:1具体指标是什么?2如何实现最优
对于功耗最小已经有指标了,就是如何实现最优,该书设计了多种动作
对于动态稳定,首先就涉及到以什么指标来判定是否稳定,该书介绍一般采用零力矩点(ZMP)来判断,也有些其他指标或ZMP的变形等,至于如何实现就是仁者见仁,智者见智了,一般要在机器人的足部设定力感应器来计算ZMP,然后确定动作(?难),设定关节目标等,然后采用类似steering behavior或IK,关键帧等方式来控制关节动作
猜测波士顿动力公司的BigDog控制方式:
A 正常状态:目标跟随、路径跟随等,3层确定动作采用关键帧方式,ZMP一直是稳定的
B意外状态:忽然受到冲击,不稳了
1) 检测到ZMP不在投影区,说明动态性能变差
2)确定目标位姿设定整体目标(?)
3)以IK方式确定关节动作目标,以steering behavior确定各个关节的动作
4)控制执行器
另外波士顿动力公司的Atlas能够搬用物体,其控制方式猜测如下:
1)检测物体位置
2) 判断是否在操作范围内,不是则向物体运动(目标靠近),是执行搬用动作
3)根据2层的决策设定目标靠近或搬用动作的目标
4)执行
而其开门的动作决策也是在2层确定的,至于在执行过程中出现失稳,要进行动作调节也是在2层