花样游泳动态图案的设计与实现

2021-03-22 02:53徐瑞温源张玺
电脑知识与技术 2021年4期
关键词:碰撞

徐瑞 温源 张玺

摘要:基于 URWPGSim2D 仿真平台,结合2020年国际水中机器人大赛2D仿真组花样游泳项目中的评分规则,经过对花样游泳项目的研究,该文提出了在花样游泳项目中一种新的比赛策略,即通过动态图案、动态区域及避障功能的设计与实现来降低黄鱼对于生成图案的干扰。由此介绍了Dribbleexptop追随算法,设计了两个动态图案,实验结果表明:运用此策略的机器鱼能够较好的避免黄鱼的干扰同时增强黄鱼的参与度,使得形成后的造型兼具协作性与艺术性,契合花样游泳项目的主题,由此在比赛过程中获得裁判的加分,通过比赛证明此策略可作为花样游泳比赛项目的参考策略。

关键词:仿真机器鱼;跟随;碰撞;动态路径

中图分类号:TP242.6      文献标识码:A

文章编号:1009-3044(2021)04-0253-03

1 背景

2020年9月23日,由中国仿生协会主办的第十三届国际水中机器人大赛在青岛落下帷幕,大赛分为2D仿真组、创新创业组、全局视觉组等多个组别,其中2D仿真中组中的花样游泳项目是一个通过控制仿真鱼位置和方向而摆出兼具协作性与美观性的具有极高观赏性和艺术性的项目,比赛采用的仿真环境基于北京大学开发的URWPGSim2D[1]仿真平台,项目本身的性质是由单一队伍参加的非对抗性项目,比赛场地采用1.5倍尺寸的模拟标准场地,即规格为4500毫米乘3000毫米尺寸的场地。具体的项目规则为:场地上有10条仿真鱼,其中1号黄鱼不受控制,其他9条红鱼受策略的控制,在比赛要求的时间内配合1号黄鱼摆出符合大赛主题的动作。但是在实际执行策略的过程内,处于运行状态且不受控制的1号鱼总会干扰或打乱其他9条鱼的配合而形成的图案,这样不可预知的随机性干扰使得无论是生成的静态图案又或是动态图案都相当难以保持稳定,令比赛的难度大幅度提升,但与此同时如果1号鱼能参加动作的形成又会给予加分。为了能让1号鱼在参与进动作形成的过程中同时不干扰生成图案的位置,笔者对于花样游泳项目已有的文献进行了研究,文献[2-4]利用平台自带的函数研究了对仿真鱼点到点的位置控制以及仿真鱼形成动作的过程;文献[5]改进了仿真鱼的直线游动算法,使得仿真鱼能真正避免平台水流的干扰做到直线游动;文献[6]针对比赛规则对标准动作和自由动作分别进行了探讨;文献[7]根据2017年的竞赛规则,研究了仿真鱼的动静态结合的策略。基于此,为更好地实现图案的完整性和避免黄鱼的干扰,笔者针对代码里的跟随函数进行了改进和优化,在此基础上采用了一种更为积极的策略来规避黄鱼的干扰。

2 队形形成

2.1 动态图案的设计思想

由于黄鱼初始的生成位置与运动方向的不确定性,无论是在生成静态图案又或是生成动态图案的过程中,黄鱼的随机性都会成为整体图案设计的不稳定所在。大部分队伍对于此问题的解决方法都是在图案设计的过程中将黄鱼排除在外,然后尽可能将设计的图案摆在水面中心位置并分散排列,以降低黄鱼随机性的干扰。然而这种方法的实现虽简单可行,也能在实际运行过程中一定程度上减少黄鱼的干扰,但是却很难在比赛中获得较高的分数。因为在实际评判动作的过程中,黄鱼的参与感是裁判比较重视的加分项。而对于增加黄鱼参与感的这样一个问题的改进,大部分参赛者的解决方案却又过于单一,只是单纯地让一条红鱼跟随黄鱼而已,在增加黄鱼参与感的同时却再次降低了图案整体的稳定性。

综合以上两种方法,我们发现在面对稳定性和黄鱼参与感这两个问题时,现有的方法都很难在增强黄鱼参与感的情况下降低图案随机性的影响。为此我们决定设计一个由黄鱼引导的动态图案,该图案由图1的预设图案以及图4的曲线图案两部分组成,并设置一个恰当的区域,当黄鱼在区域内时,形成图1的预设图案,而当运动出此区域时,形成图4的曲线图案,由此人为地避免整体图案碰壁的问题,同时在让黄鱼完全参加进图案的情况下保持图案的稳定性。

2.2 动态图案的具体实现

1)为了尽量降低在实际生成图形的过程中受黄鱼随机性影响较大的问题,参考之前参赛者减少黄鱼随机性干扰的方式,对于区域内预设图案的设计,我们采取了三列红鱼排列这样的图案形式,目的便是减少图案本身的复杂性,为此我们设计先让黄鱼如图1和9条红鱼共同构成一个预设图案,之后9条红鱼作为一个整体,共同跟随着黄鱼角度的变化而原地变化角度,而当黄鱼的位置运动到三行红鱼的头部位置时,预设图形便随着黄鱼整体移动。经过多次实验,在跟随黄鱼旋转及运动的过程中始终保持稳定的情况下能实现不错的效果。对于一开始如图1预设图案中三行红鱼排列这样的静态图案的设计,采用了先判断位置,后判断角度的做法。即一开始先声明各目标点的坐标,之后采用Dribbleexptop函数(Dribbleexptop(ref Decision decision, RoboFish fish,float angleTheta1, float angleTheta2, float disThreshold, int VCode1, int VCode2, int cycles, int msPerCycle, bool flag, xna.Vector3 GoalPoint),decision: 每周期机器鱼执行策略;f is h:目的机器鱼的参数;d e stPtMm:目的点;destDirRad:目的角度;angleThetal1、angleThetal2:魚身角度与目的角度差的临界值

disThreshold:间距阈值;VCode1,VCode2:直线游动速度;cycles:速度与转向档位间改变所需周期数经验值,flag:仿真鱼坐标选择的标准;GoalPoint:仿真鱼的运动的目的点,该函数的功能是控制某条鱼直线游动到目标位置[8]并设置鱼游动的角速度和线速度到达指定位置,并设定鱼在运动到目标点的过程中的角速度与线速度,在到达指定位置后,判断是否到达了目标角度,若角度在(x-Π,x)以最大角速度右转,若角度在(x,x+Π),便以最大角速度右转直到红鱼满足初始的角度要求。

2)当黄鱼的位置不处于整个图案的头部位置时,由红鱼摆出的三行造型只做跟随黄鱼的角度进行原地旋转的动作,并保证9条红鱼组成的一个整体和黄鱼的朝向时时相等。跟随黄鱼旋转的实现方法与1.2.1中提到的策略基本相同,只是此时的x不用再设置了,直接采用fish_yellow.BodyDirectionRad(即1号黄鱼的当前角度)的值即可。同时对于Vcode(对于机器鱼的控制主要是通过设置线速度 VCode和角速度TCode 来实现的。其中TCode与VCode的 取值范围均为 0至14,需要注意的是,TCode和VCode的取值必须为整数,因此只有15种速度与方向的选择范围)的设置,经测试发现Vcode为0、Tcode为14时旋转速度过慢,为此我们取Vcode为1。

3)当黄鱼的位置处于整个图案的头部位置时,9条红鱼构成的整体便开始随着黄鱼的运动而开始运动,在运动过程中只需要判断是否fishx.BodyDirectionRad(x取值1-9,表示1-9号红鱼的角度)与黄鱼的角度两者的数值之差在(-0.1 , 0.1)这样一个区间内即可,若角度差在此区间只需让红鱼保持直线运动,若不在此区间则按照1.2.1的方法变换角度,以此来实现和黄鱼保持同方向运动的策略。而判断黄鱼位置是否位于整个图案头部位置的方法,则是通过将整个水池的角度分为四个象限进行讨论的方法来得到,当黄鱼的位于第一象限时,只需要让黄鱼的横坐标x大于2,3,4号鱼横坐标的x,纵坐标y小于2,5,8号鱼纵坐标的y即可(即黄鱼位于红鱼摆出的图形外),其余象限的坐标以此类推,当黄鱼处于整个图案的头部位置时才能引导整体图案运动的原因有两个,一是在感官上增强整体图案的协作性与艺术性,二是减少黄鱼的随机性导致的整体图形碰壁的可能。

3 队形改变

3.1 区域间图形变换的实现思想

通过将水池分为几个区域,根据黄鱼运动到的位置的不同来实现各异的图案,实现动态图案的切换。由于我们设计的动态图案中两个图案的运动靠的都是黄鱼的驱动,因此无法按照静态图案中红鱼行至目标点的方法来判断图案的形成,从而实现图案与图案之间的转换,对于这个问题的解决,我们选择通过区域划分的方式来实现两个动态图形间的自动转换。

3.2 区域间图形变换的具体实现

在4500mm*3000mm的水池中,我们将水池的区域分为了如图5所示的两大部分,当黄鱼位于区域内部中时,红鱼先摆出如图1所示的预设图案,在预设图案形成后,根据黄鱼在图案中相对位置的不同,选择图2及图3两种不同的方式进行切换,而当黄鱼游出该区域内时,动态图案便开始变换为如图4所示的动态曲线。而当图案由该顺序变换时,考虑到之前设计的动态图案中红鱼的位置,为了使得曲线生成所需的时间能尽可能小,我们又设置了Y < 0与Y > 0 两部分区域,按照实际情况选择曲线排列的顺序。当黄鱼纵坐标Y > 0时,红鱼选择追随顺序一 9 < 6 < 3 < 4 < 7 < 10 < 8 < 5 < 2来运动,而当 Y < 0时,红鱼则选择追随顺序二 8 < 5 < 2 < 4 < 7 < 10 < 9 < 6 < 3来运动,以此来减少生成动态图案的时间。

对于黄鱼引导着的曲线的实现,仍然是利用Dribbleexptop函数实现鱼和鱼之间的追随,最终连为一条曲线。设计的详细流程图见图6。

4 避免碰撞

对于碰撞问题的优化[9],解决的方法首先是设置一个安全距离S,当两条机器鱼之间的距离小于这个预设的距離S时,便判断其现在处为危险状态,此时两条机器鱼按照实际情况各旋转一定角度后再继续游动,直到其距离大于安全距离S后才向目标点继续游动。经大量测试后我们将安全距离设为350mm,运用Distance函数(平台提供的距离函数)实时计算所有鱼之间的距离,当其中的两鱼距离在此范围内时,我们判断这两条鱼运动方向的差值是否大于Π/2,若大于该角度,两条鱼同向转动,若差值小于该角度,两条鱼反向转动,以此实现两条红鱼避免碰撞的运动。

经测试发现,在相同条件下采用该方法运动的机器鱼基本能够避免两条鱼因为运动路径交叉而发生的碰撞(如图7图8),即使因为黄鱼在形成图案时的随机性发生了碰撞,也能很快调整,旋转一定角度后再进行运动,不会再发生之前生成图案的过程中两条机器鱼锁死的状况。

5 结束语

“诚者,天之道也;思诚者,人之道也”,这是在今年的水中机器人大赛中2D仿真组花样游泳项目的主题,笔者针对这一主题进行了分析,以与众不同的黄鱼比作“玉”,通过如上的让红鱼追随黄鱼,以黄鱼驱动整个图案运动的设计方案,寓意红鱼像追求玉一样追求诚信,在黄鱼的带领下,最终形成了优美且复杂的动作,在比赛中以此动作收尾,可以不受时间的限制。笔者的这个策略,打破了黄鱼只能“干扰”预设图案的概念,在众多裁判面前焕然一新,并获得二等奖,结果表明,该动作是可以实现且符合比赛要求的。不过,虽然通过这种动态图案的实行,提升了图案动作的复杂性,通过让黄鱼参加进图案的方式减少了黄鱼的干扰,但是由于预设动作的存在,实现起来所需要的准备时间会显得过长,因此如何降低生成图形的时间,将是接下来改进的目标。

参考文献:

[1] 王梅娟,李易凡,范彬彬.基于URWPGSim2D仿真平台的测试分析与策略改进[J].兵工自动化,2015,34(12):82-85.

[2] 贺明飞,马天增,谢良松.基于URWPGSim2D仿真新平台的花样游泳策略[J].兵工自动化,2016,35(12):93-96.

[3] 吴辉辉,卜韵凯,刘冬兰,等.水中机器人2D仿真比赛技术分析[J].机器人技术与应用,2010(4):23-25.

[4] 仇红剑,赵伟,夏庆锋.水中机器人2D仿真的策略优化[J].兵工自动化,2011,30(12):91-93,96.

[5] 杨云,王浩男,李辉,等.一种改进的仿真机器鱼花样游泳策略[J].兵工自动化,2016,35(12):87-88.

[6] 杨洋,李淑琴.2D仿真水中机器人花样游泳动作研究与实现[J].兵工自动化,2016,35(12):82-86.

[7] 苗荟,李淑琴,黄一洋.水中机器人花样游泳新动作的设计与实现[J].兵工自动化,2018,37(4):89-92.

[8] 谢良松,冯志国,汤惠杰,等.水中机器人2D仿真平台的直线优化算法[J].兵工自动化,2018,37(4):83-84.

[9] 安永跃,李淑琴.基于行为规划的多机器鱼编队策略的研究[J].计算机仿真,2013,30(11):369-373.

【通联编辑:谢媛媛】

猜你喜欢
碰撞
微博文化与当前高校思想政治教育的碰撞与融合
留白,为思考插上翅膀
动量守恒定律应用中“n”次碰撞问题探讨
范成大仕宦时期儒家思想的凸显