武荣甲 张燕 夏庆锋
摘要:针对多关节水中机器鱼在全局视觉组水中角力项目中出现的撞击点不准确,后期动力匮乏的问题,该文提出“基于机器鱼运行三态”的角力算法。通过将机器鱼寻找的撞击点转换为一个小范围的撞击区域,在双方僵持时增强甩尾力量的方法,本文实现了对机器鱼物理特性的最大利用。经过实验,该算法效果明显优于找点类算法,并解决了其他同类算法没有解决的动力缺乏问题。
关键词:多关节机器鱼;水中角力;算法
中图分类号:TP301 文献标识码:A 文章编号:1009-3044(2018)15-0257-03
ArtWrestling Algorithm Multi-joint Robot Fish Based on Tri-state Operation
WU Rong-jia, ZHANG Yan, XIA Qing-feng
(Jinling College, Nanjing University, Nanjing 210089, China)
Abstract: In order to solve the problem of inaccurate impact points in the global vision group water wrestle project in multi-joint underwater robotic fish, and the problem of lack of power in the later stage, the author put forward the “three-state operation based on robotic fish” algorithm. By transforming the impact points found by robotic fish into a small-scale impact zone and enhancing the tail-flying force when both parties are deadlocked, the author has achieved the greatest utilization of the physical characteristics of robotic fish. After the experiment, the algorithm is obviously better than the point-of-sight algorithm, and solves the lack of motivation that other similar algorithms do not solve.
Key words: multi-joint robot fish;water wrestling; algorithm
近年来,各种机器人比赛的蓬勃发展极大地推 进了机器人技术的进步[1]。机器人水中角力比赛是以智能仿生机器鱼为主体,进行类似拔河的激烈的对抗性比赛。它不但涉及仿生机器鱼应用的各种技术,还涉及水动力学分析、水下通讯、抗干 扰技术等多方面的内容,既具有很强的技术挑战性,又有很高的观赏性,是科研和科普的完美结合[2]。机器人角力比赛的基本形式是两队机器鱼进行对抗,占有圆形漂浮物面积方多者为胜。参赛队伍要想取胜,就必须占有更多的面积,这就涉及一项基本的技术——顶圈。如何根据机器鱼和呼啦圈的不同位置确定了最佳的进攻方向和顶球点[3]决定顶圈算法的优劣,并直接决定着比赛最终的胜负。
1多关节机器鱼
笔者所介绍的是拥有类似于自然界中鱼体的外形、运动模式甚至交互模式的仿生智能机器鱼。它具有三个关节,仿生人的手指。角力比赛需要充分利用关节特性以获取机器鱼的最大能力。
机器鱼的摆尾幅度分为十五个等级,分别为0到15。其中0至6为向左摆尾,并且0力度最大,7为直行,8至15为向右摆尾,并且15力度最大。
由7-0,7-15,机器鱼的甩尾力度逐渐增大。熟悉机器鱼的机械特性对笔者提出的“基于机器鱼运行三态”的角力算法具有很重要的指导作用。
2全局视觉水中角力比赛的要求
参赛队各派一条机器鱼参加比赛。以水池两个长边池壁的中点连线为分界线,将水池划分为左区和右区两个区域。比赛开始时,裁判员将漂浮物放入水中,要求其圆心与水池中心重合并保持静止,同时将比赛双方的机器鱼如图2所示位姿静止放入漂浮物的内部。
水中角力比赛项目由主裁进行评判:
1) 比赛前机器鱼以及漂浮物必须静止,裁判鸣哨后方能启动机器鱼,不得遥控机器鱼。
2) 比赛开始前,双方参赛队抽签决定率先进攻左区或右区,接下来两场依次交换场地。
3) 若在 1 分钟内,A队机器鱼率先将漂浮物完全顶入左区,则 A队获胜,比赛结束;反之,则 B队获胜,比赛结束。若上述两种情况均未出现,则比较 1 分钟达到时刻双方占有漂浮物的面积,面积较大一方获胜,比赛结束。
3 算法提出背景
3.1 机器鱼运行三态的划分
在水中机器鱼比赛中的水中角力項目比赛过程中,通常有三个阶段。第一阶段是开始阶段,双方的鱼在各自的控制算法下开始游向规定的方向。这一阶段我们划分为机器鱼运行三态中的状态一:初始状态,简称“初态”。这一状态种找方向的准确性取决于各自算法的设计。水下环境的复杂性和不确定性给系统带来的大量的干扰,降低了控制的效率和准确度[4]。因此良好的设计可以减少时间,在前期就能获得优势。第二阶段是调整阶段,双方的鱼在各自找到方向后进行顶圈。在此过程中,我们将机器鱼的运行状态划分为机器鱼运行三态中的状态二:过程状态,简称“过程态”。激烈的比赛中,由于比赛场地中的水波扰动和激烈对抗的影响,很容易造成机器鱼的“丢标”,即我们失去对机器鱼的控制,如果我们不能及时再进行对机器的标记,机器鱼会在比赛场地内“打圈”。所以,在此状态下,控制机器鱼如何在失去控制后重新进行调整并迅速回到比赛是“过程态”解决的重要问题。第三个阶段为结束状态。这一阶段我们划分为机器鱼运行三态中的状态三,终结状态,简称“终态”。比赛双方都可以准确地到达自己预定的撞击位置,但是由于机器鱼动力相差无几,造成水圈停在水池中央,很难发生移动。并且水中阻力较小,目前比赛中用到的机器鱼没有制动机构,不能做到旋停,也不能倒退运动,即使尾部摆动频率降为零,机器鱼仍将沿着原来的运动方向漂移。[5]导致不可能采取让鱼倒退一段距离再向前猛烈撞击来获得更大动力的、的解决方案。所以,如何在“终态”获得较强动力,并且获得比赛优势直至胜利是此状态下解决的问题。
3.2 以往算法的局限性
在过往所采取的角力算法中,设计者们往往会选择去优化“初态”和“过程态”中的寻找撞击位置的算法。这种思想主要分为两种方式,一种是基于撞击点寻找的算法,另一种则是基于角度的优化。但是这两种算法都有自己的局限性。
“找点”类算法预先设定了大量的撞击点,在比赛开始阶段找点可能会很顺利的进行,但是在失去控制再重新找回控制后的调整可能会造成一点困难。撞击点的划分太过于精细,导致机器鱼在调整时需要不断进行细小的变化来找到撞击点,而细小的调整对于机器鱼的机械特性来说并不是十分友好。这类算法并没有很好的考虑到机器的机械性能。
“角度”类算法则是设定一点的角度,在哪些角度范围内直行撞击,在哪些角度内基于什么样的方向进行撞击。这类算法并不会受到機器鱼的机械特性的桎梏,但是此类算法存在的问题则是容易造成极大的误差。相比于“找点”类算法的精准,“角度”类算法显得条件过于宽泛。我们可能会明显发现基于角度的撞击算法控制的机器鱼的运行轨迹是不规则的。
而在以往的算法中,笔者没有见到对“终态”中机器鱼动力缺乏问题提出解决方案的。基于此,笔者选择在将“找点”类算法和“角度”类算法结合,并在“终态”阶段提出一种“加强甩尾力度”的解决方案。通过对该算法的运用,笔者在实验和实际的比赛中得到了明显的效果。
4 算法思想
4.1前期区域划分
整个比赛场地范围实际上为一个水圈,我们经过前期测量可得整个水圈圈的半径为105个像素点(以下像素点都以px表示)。系统以水池的两条边为X轴,Y轴,建立了如图3所示的坐标系,其中O点为呼啦圈的圆心,由系统自动获得。
因为该算法是采用加大甩尾力度的方式来加强动力,此时就对机器鱼的控制提出了极高的要求。常规控制机器鱼运行的算法都是设定某些特定的撞击点来控制机器鱼的运行方式。撞击点的设置极大地限制了机器鱼的特性,比赛过程中机器鱼将大量的时间浪费在计算寻找撞击点上,这在对抗性极强的水中角力比赛中显得十分笨拙,严重延误了机器鱼的撞击决策。这种算法对机器鱼的控制过于死板,没有考虑到机器鱼的机械特性是由三个“关节”决定的。机器鱼无法像人一样在撞击出现偏差后立刻实现调整,它的机械特性不允许它做精准的变化。因此我们既要熟悉机器鱼的物理特性,又要极大可能的实现对机器鱼的精准控制。因此该算法前期准备中尝试将水圈内的区域进行划分,在不同区域和机器鱼的不同姿态情况下选择不同的控制策略,借此来实现基于机器鱼物理性质的小范围误差内的精准控制。
如图4所示,我们将整个圈内的区域分成三个区域。区域Ⅱ是与圆心y坐标值相差50px的区域,区域Ⅰ是除区域Ⅱ下方的部分,区域Ⅲ则是区域Ⅱ上方的部分。同时我们在左侧圆圈内弧标记了A,B,C三点,A,B两点到达直径BO的距离为10px。由三角函数sinα=10/105≈0.095得,α=6°,所以我们易得∠AOB=6°,∠AOC=12°。借此,我们将机器鱼的撞击区域限制在弧ABC。接下来笔者将基于机器鱼向左侧进攻的策略来进行对算法的描叙述,即左侧A,B,C三点。
4.2算法流程
4.2.1 寻找撞击区域
此处我们仅使用机器鱼在开始比赛之前垂直于X轴放置在Ⅰ区域中,并向左侧顶圈的过程作为实例过程来讲解。首先,由于机器鱼的体长较长,所以鱼头的位置在开始时就处于下一半的Ⅱ区域之中,因此鱼采取在Ⅱ区域中的控制算法进行操作。我们定义的角度为鱼头的行进方向和X轴负半轴所形成的夹角的角度。因此当鱼头处于Ⅱ区域中,此时我们需要再对鱼的行进方向与X轴的负半轴形成的夹角大小进行判断。由于笔者采取将“找点”和“找角度”结合起来的方案,所以每次决策都是基于运行方向及其所处的区域有关。机器鱼在“初态”阶段的处理决策如下:
①如果夹角大于20°,此时直接选择撞击B点;
②如果角度处于10°—20°中间时,机器鱼将水平向左游动20px,之后再进行一次判断;
③如果角度小于10°,我们将直接操作鱼水平最大速度水平撞击呼啦圈。
伪代码如下:
if fishDirection>20°
then strike point B
if fishDirection>10°&&fishDirection;<20°
then swim2Left 20px
IffishDirection<10°
then swim2Left
在水中角力比赛中,由于对抗激烈,并且水池的水波在比赛过程中较大,导致平台对机器鱼的锁定标记追踪显得不是十分稳定。常常会出现鱼脱离标记的意外情形,机器鱼也会因此而失控。基于此,我们也设定了机器鱼在区域Ⅱ和区域Ⅲ的控制策略,即机器鱼在“过程态”的处理决策:
④当机器鱼的鱼头误入区域Ⅰ,机器鱼将强制去撞击点C;
⑤当机器鱼的鱼头误入区域Ⅲ,机器鱼将强制撞击A点。
伪代码如下:
if fishHead in AreaⅠ
then strike point C
if fishHead in Area Ⅲ
then strike point A
当角度越小时,越会选择近似于直行的策略,这样可以尽块实现对水圈的撞击,并且产生的误差在可接受范围以内,不会影响后续的调整。而角度越大我们就需要调整,使得角度变小,因此选择直接去撞击B点,在此过程进行角度的调整。当角度介于两者直接时,我们再进行微调,借此我们可以实现寻找撞击区域的速度和控制的精准性的两者最大化的效果。
4.2.2 加强甩尾
基于以上操作,我们可以实现在较短时间的范围内使得机器鱼寻找到撞击区域。此时,我们已经完成了大部分的工作,下面一步就是如何再进一步增强鱼的撞击力度。
由于在“终态”情形下,双方的鱼动力在相差不大的情形下,会出水圈“静止”的状况。为了获得更强的撞击力,我们第一反应是让机器鱼后退一段距离,然后再向前撞击,但是,由于机器鱼的机械特性决定了我们无法控制鱼的后退,因此我们无法使用这种策略。
设计人员每次在实验室运行新设计的运行策略时,总会发现在“终态”情形下,机器鱼尽管处于直行速度最快的那一档,但是我们明显发现机器鱼的甩尾力度小于没有障碍物时的情形。鉴于这种现象,笔者提出一种想法:人为地将强机器鱼甩尾的力度。
但是这种策略同时会带来新的问题,人为的加强甩尾力度更容易让机器鱼“丢标”,这样机器鱼状态又将转为“过程态”,尽管“过程态”可以保证机器鱼的运行状态尽快重新进入“终态”,但是过于强力甩尾力度又将使机器鱼进入“过程态”。此时的问题就开始显现出来,机器鱼将在“过程态”和“终态”两种状态种来回切换。尽管可以获得强动力,但是状态间的差别直接导致算法决策的差异,切换决策方案的时间差和处理决策的时间差将直接被对手的所利用。
因此,如何在增強机器鱼甩尾力度的同时最大化降低其对机器鱼运行方向的影响是“终态”策略的难点。
基于这种思想,本文在实验室对机器鱼运行进行了多次的实验,最终发现向左5,向右9是对于本文实验室现存机器鱼最佳的甩尾力度。由于机器鱼之间的机械特性的差别,该甩尾力度不具有普适应,需要对具体的机器鱼进行具体的实验获得最佳的甩尾力度。
本论文经过多次测试以及比赛实际的情况的确认,该算法极大地改善了机器鱼在陷入僵持后的动力不足问题。使得获得更大的动力,大大地提高了比赛获胜的概率。
5 总结
机器鱼水中角力算法的改善基于两个方面,一个方面强调的是控制的准确性,另一个方面则是如何获得强动力。笔者在本篇论文中提出“基于机器鱼运行三态”的角力算法,首创性地将控制精确性方面“找点”和“角度”两类算法结合;同时在“终态”下提出了加强动力的一种思路:加强甩尾力度。
机器鱼水中角力项目对机器鱼的控制地提出了很高的要求,我们不能忽略机器鱼这一“硬件”的特定的物理属性。任何策略算法的提出都必须基于机器鱼的机械特性,不然算法再精妙都不能在机器鱼上得到完全的体现。
机器鱼算法策略的完善是一个渐进的过程,笔者的算法也有自身存在的局限性。我们需要继续努力,推动机器鱼算法的进步和机器人应用技术的进步。
参考文献:
[1] KIM J H. Third call for participation : micro - robot world cup soccer tournament 1996 (MiroSot96 ) [EB/OL].
[2] 北京大学. 机器人水球比赛项目推介书[M]. 北京: 北京大学, 2009.
[3] 基于状态变化的机器鱼水中角力策略[J]兵工自动化,2014(12)
[4] 黎章. 多水下机器人协作控制[R]. 北京: 北京大学, 2008.
[5] 陶金, 孔峰, 谢广明. 基于动作决策的机器鱼顶球算法[J]. 兵工自动化, 2010,29(11): 70-73.