徐瑞 溫源 張璽
摘要:基于 URWPGSim2D 仿真平臺,結合2020年國際水中機器人大賽2D仿真組花樣游泳項目中的評分規(guī)則,經(jīng)過對花樣游泳項目的研究,該文提出了在花樣游泳項目中一種新的比賽策略,即通過動態(tài)圖案、動態(tài)區(qū)域及避障功能的設計與實現(xiàn)來降低黃魚對于生成圖案的干擾。由此介紹了Dribbleexptop追隨算法,設計了兩個動態(tài)圖案,實驗結果表明:運用此策略的機器魚能夠較好的避免黃魚的干擾同時增強黃魚的參與度,使得形成后的造型兼具協(xié)作性與藝術性,契合花樣游泳項目的主題,由此在比賽過程中獲得裁判的加分,通過比賽證明此策略可作為花樣游泳比賽項目的參考策略。
關鍵詞:仿真機器魚;跟隨;碰撞;動態(tài)路徑
中圖分類號:TP242.6? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)04-0253-03
1 背景
2020年9月23日,由中國仿生協(xié)會主辦的第十三屆國際水中機器人大賽在青島落下帷幕,大賽分為2D仿真組、創(chuàng)新創(chuàng)業(yè)組、全局視覺組等多個組別,其中2D仿真中組中的花樣游泳項目是一個通過控制仿真魚位置和方向而擺出兼具協(xié)作性與美觀性的具有極高觀賞性和藝術性的項目,比賽采用的仿真環(huán)境基于北京大學開發(fā)的URWPGSim2D[1]仿真平臺,項目本身的性質(zhì)是由單一隊伍參加的非對抗性項目,比賽場地采用1.5倍尺寸的模擬標準場地,即規(guī)格為4500毫米乘3000毫米尺寸的場地。具體的項目規(guī)則為:場地上有10條仿真魚,其中1號黃魚不受控制,其他9條紅魚受策略的控制,在比賽要求的時間內(nèi)配合1號黃魚擺出符合大賽主題的動作。但是在實際執(zhí)行策略的過程內(nèi),處于運行狀態(tài)且不受控制的1號魚總會干擾或打亂其他9條魚的配合而形成的圖案,這樣不可預知的隨機性干擾使得無論是生成的靜態(tài)圖案又或是動態(tài)圖案都相當難以保持穩(wěn)定,令比賽的難度大幅度提升,但與此同時如果1號魚能參加動作的形成又會給予加分。為了能讓1號魚在參與進動作形成的過程中同時不干擾生成圖案的位置,筆者對于花樣游泳項目已有的文獻進行了研究,文獻[2-4]利用平臺自帶的函數(shù)研究了對仿真魚點到點的位置控制以及仿真魚形成動作的過程;文獻[5]改進了仿真魚的直線游動算法,使得仿真魚能真正避免平臺水流的干擾做到直線游動;文獻[6]針對比賽規(guī)則對標準動作和自由動作分別進行了探討;文獻[7]根據(jù)2017年的競賽規(guī)則,研究了仿真魚的動靜態(tài)結合的策略?;诖耍瑸楦玫貙崿F(xiàn)圖案的完整性和避免黃魚的干擾,筆者針對代碼里的跟隨函數(shù)進行了改進和優(yōu)化,在此基礎上采用了一種更為積極的策略來規(guī)避黃魚的干擾。
2 隊形形成
2.1 動態(tài)圖案的設計思想
由于黃魚初始的生成位置與運動方向的不確定性,無論是在生成靜態(tài)圖案又或是生成動態(tài)圖案的過程中,黃魚的隨機性都會成為整體圖案設計的不穩(wěn)定所在。大部分隊伍對于此問題的解決方法都是在圖案設計的過程中將黃魚排除在外,然后盡可能將設計的圖案擺在水面中心位置并分散排列,以降低黃魚隨機性的干擾。然而這種方法的實現(xiàn)雖簡單可行,也能在實際運行過程中一定程度上減少黃魚的干擾,但是卻很難在比賽中獲得較高的分數(shù)。因為在實際評判動作的過程中,黃魚的參與感是裁判比較重視的加分項。而對于增加黃魚參與感的這樣一個問題的改進,大部分參賽者的解決方案卻又過于單一,只是單純地讓一條紅魚跟隨黃魚而已,在增加黃魚參與感的同時卻再次降低了圖案整體的穩(wěn)定性。
綜合以上兩種方法,我們發(fā)現(xiàn)在面對穩(wěn)定性和黃魚參與感這兩個問題時,現(xiàn)有的方法都很難在增強黃魚參與感的情況下降低圖案隨機性的影響。為此我們決定設計一個由黃魚引導的動態(tài)圖案,該圖案由圖1的預設圖案以及圖4的曲線圖案兩部分組成,并設置一個恰當?shù)膮^(qū)域,當黃魚在區(qū)域內(nèi)時,形成圖1的預設圖案,而當運動出此區(qū)域時,形成圖4的曲線圖案,由此人為地避免整體圖案碰壁的問題,同時在讓黃魚完全參加進圖案的情況下保持圖案的穩(wěn)定性。
2.2 動態(tài)圖案的具體實現(xiàn)
1)為了盡量降低在實際生成圖形的過程中受黃魚隨機性影響較大的問題,參考之前參賽者減少黃魚隨機性干擾的方式,對于區(qū)域內(nèi)預設圖案的設計,我們采取了三列紅魚排列這樣的圖案形式,目的便是減少圖案本身的復雜性,為此我們設計先讓黃魚如圖1和9條紅魚共同構成一個預設圖案,之后9條紅魚作為一個整體,共同跟隨著黃魚角度的變化而原地變化角度,而當黃魚的位置運動到三行紅魚的頭部位置時,預設圖形便隨著黃魚整體移動。經(jīng)過多次實驗,在跟隨黃魚旋轉(zhuǎn)及運動的過程中始終保持穩(wěn)定的情況下能實現(xiàn)不錯的效果。對于一開始如圖1預設圖案中三行紅魚排列這樣的靜態(tài)圖案的設計,采用了先判斷位置,后判斷角度的做法。即一開始先聲明各目標點的坐標,之后采用Dribbleexptop函數(shù)(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: 每周期機器魚執(zhí)行策略;f is h:目的機器魚的參數(shù);d e stPtMm:目的點;destDirRad:目的角度;angleThetal1、angleThetal2:魚身角度與目的角度差的臨界值
disThreshold:間距閾值;VCode1,VCode2:直線游動速度;cycles:速度與轉(zhuǎn)向檔位間改變所需周期數(shù)經(jīng)驗值,flag:仿真魚坐標選擇的標準;GoalPoint:仿真魚的運動的目的點,該函數(shù)的功能是控制某條魚直線游動到目標位置[8]并設置魚游動的角速度和線速度到達指定位置,并設定魚在運動到目標點的過程中的角速度與線速度,在到達指定位置后,判斷是否到達了目標角度,若角度在(x-Π,x)以最大角速度右轉(zhuǎn),若角度在(x,x+Π),便以最大角速度右轉(zhuǎn)直到紅魚滿足初始的角度要求。
2)當黃魚的位置不處于整個圖案的頭部位置時,由紅魚擺出的三行造型只做跟隨黃魚的角度進行原地旋轉(zhuǎn)的動作,并保證9條紅魚組成的一個整體和黃魚的朝向時時相等。跟隨黃魚旋轉(zhuǎn)的實現(xiàn)方法與1.2.1中提到的策略基本相同,只是此時的x不用再設置了,直接采用fish_yellow.BodyDirectionRad(即1號黃魚的當前角度)的值即可。同時對于Vcode(對于機器魚的控制主要是通過設置線速度 VCode和角速度TCode 來實現(xiàn)的。其中TCode與VCode的 取值范圍均為 0至14,需要注意的是,TCode和VCode的取值必須為整數(shù),因此只有15種速度與方向的選擇范圍)的設置,經(jīng)測試發(fā)現(xiàn)Vcode為0、Tcode為14時旋轉(zhuǎn)速度過慢,為此我們?nèi)code為1。
3)當黃魚的位置處于整個圖案的頭部位置時,9條紅魚構成的整體便開始隨著黃魚的運動而開始運動,在運動過程中只需要判斷是否fishx.BodyDirectionRad(x取值1-9,表示1-9號紅魚的角度)與黃魚的角度兩者的數(shù)值之差在(-0.1 , 0.1)這樣一個區(qū)間內(nèi)即可,若角度差在此區(qū)間只需讓紅魚保持直線運動,若不在此區(qū)間則按照1.2.1的方法變換角度,以此來實現(xiàn)和黃魚保持同方向運動的策略。而判斷黃魚位置是否位于整個圖案頭部位置的方法,則是通過將整個水池的角度分為四個象限進行討論的方法來得到,當黃魚的位于第一象限時,只需要讓黃魚的橫坐標x大于2,3,4號魚橫坐標的x,縱坐標y小于2,5,8號魚縱坐標的y即可(即黃魚位于紅魚擺出的圖形外),其余象限的坐標以此類推,當黃魚處于整個圖案的頭部位置時才能引導整體圖案運動的原因有兩個,一是在感官上增強整體圖案的協(xié)作性與藝術性,二是減少黃魚的隨機性導致的整體圖形碰壁的可能。
3 隊形改變
3.1 區(qū)域間圖形變換的實現(xiàn)思想
通過將水池分為幾個區(qū)域,根據(jù)黃魚運動到的位置的不同來實現(xiàn)各異的圖案,實現(xiàn)動態(tài)圖案的切換。由于我們設計的動態(tài)圖案中兩個圖案的運動靠的都是黃魚的驅(qū)動,因此無法按照靜態(tài)圖案中紅魚行至目標點的方法來判斷圖案的形成,從而實現(xiàn)圖案與圖案之間的轉(zhuǎn)換,對于這個問題的解決,我們選擇通過區(qū)域劃分的方式來實現(xiàn)兩個動態(tài)圖形間的自動轉(zhuǎn)換。
3.2 區(qū)域間圖形變換的具體實現(xiàn)
在4500mm*3000mm的水池中,我們將水池的區(qū)域分為了如圖5所示的兩大部分,當黃魚位于區(qū)域內(nèi)部中時,紅魚先擺出如圖1所示的預設圖案,在預設圖案形成后,根據(jù)黃魚在圖案中相對位置的不同,選擇圖2及圖3兩種不同的方式進行切換,而當黃魚游出該區(qū)域內(nèi)時,動態(tài)圖案便開始變換為如圖4所示的動態(tài)曲線。而當圖案由該順序變換時,考慮到之前設計的動態(tài)圖案中紅魚的位置,為了使得曲線生成所需的時間能盡可能小,我們又設置了Y < 0與Y > 0 兩部分區(qū)域,按照實際情況選擇曲線排列的順序。當黃魚縱坐標Y > 0時,紅魚選擇追隨順序一 9 < 6 < 3 < 4 < 7 < 10 < 8 < 5 < 2來運動,而當 Y < 0時,紅魚則選擇追隨順序二 8 < 5 < 2 < 4 < 7 < 10 < 9 < 6 < 3來運動,以此來減少生成動態(tài)圖案的時間。
對于黃魚引導著的曲線的實現(xiàn),仍然是利用Dribbleexptop函數(shù)實現(xiàn)魚和魚之間的追隨,最終連為一條曲線。設計的詳細流程圖見圖6。
4 避免碰撞
對于碰撞問題的優(yōu)化[9],解決的方法首先是設置一個安全距離S,當兩條機器魚之間的距離小于這個預設的距離S時,便判斷其現(xiàn)在處為危險狀態(tài),此時兩條機器魚按照實際情況各旋轉(zhuǎn)一定角度后再繼續(xù)游動,直到其距離大于安全距離S后才向目標點繼續(xù)游動。經(jīng)大量測試后我們將安全距離設為350mm,運用Distance函數(shù)(平臺提供的距離函數(shù))實時計算所有魚之間的距離,當其中的兩魚距離在此范圍內(nèi)時,我們判斷這兩條魚運動方向的差值是否大于Π/2,若大于該角度,兩條魚同向轉(zhuǎn)動,若差值小于該角度,兩條魚反向轉(zhuǎn)動,以此實現(xiàn)兩條紅魚避免碰撞的運動。
經(jīng)測試發(fā)現(xiàn),在相同條件下采用該方法運動的機器魚基本能夠避免兩條魚因為運動路徑交叉而發(fā)生的碰撞(如圖7圖8),即使因為黃魚在形成圖案時的隨機性發(fā)生了碰撞,也能很快調(diào)整,旋轉(zhuǎn)一定角度后再進行運動,不會再發(fā)生之前生成圖案的過程中兩條機器魚鎖死的狀況。
5 結束語
“誠者,天之道也;思誠者,人之道也”,這是在今年的水中機器人大賽中2D仿真組花樣游泳項目的主題,筆者針對這一主題進行了分析,以與眾不同的黃魚比作“玉”,通過如上的讓紅魚追隨黃魚,以黃魚驅(qū)動整個圖案運動的設計方案,寓意紅魚像追求玉一樣追求誠信,在黃魚的帶領下,最終形成了優(yōu)美且復雜的動作,在比賽中以此動作收尾,可以不受時間的限制。筆者的這個策略,打破了黃魚只能“干擾”預設圖案的概念,在眾多裁判面前煥然一新,并獲得二等獎,結果表明,該動作是可以實現(xiàn)且符合比賽要求的。不過,雖然通過這種動態(tài)圖案的實行,提升了圖案動作的復雜性,通過讓黃魚參加進圖案的方式減少了黃魚的干擾,但是由于預設動作的存在,實現(xiàn)起來所需要的準備時間會顯得過長,因此如何降低生成圖形的時間,將是接下來改進的目標。
參考文獻:
[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仿真的策略優(yōu)化[J].兵工自動化,2011,30(12):91-93,96.
[5] 楊云,王浩男,李輝,等.一種改進的仿真機器魚花樣游泳策略[J].兵工自動化,2016,35(12):87-88.
[6] 楊洋,李淑琴.2D仿真水中機器人花樣游泳動作研究與實現(xiàn)[J].兵工自動化,2016,35(12):82-86.
[7] 苗薈,李淑琴,黃一洋.水中機器人花樣游泳新動作的設計與實現(xiàn)[J].兵工自動化,2018,37(4):89-92.
[8] 謝良松,馮志國,湯惠杰,等.水中機器人2D仿真平臺的直線優(yōu)化算法[J].兵工自動化,2018,37(4):83-84.
[9] 安永躍,李淑琴.基于行為規(guī)劃的多機器魚編隊策略的研究[J].計算機仿真,2013,30(11):369-373.
【通聯(lián)編輯:謝媛媛】