武榮甲 張燕 夏慶鋒
摘要:針對多關(guān)節(jié)水中機器魚在全局視覺組水中角力項目中出現(xiàn)的撞擊點不準確,后期動力匱乏的問題,該文提出“基于機器魚運行三態(tài)”的角力算法。通過將機器魚尋找的撞擊點轉(zhuǎn)換為一個小范圍的撞擊區(qū)域,在雙方僵持時增強甩尾力量的方法,本文實現(xiàn)了對機器魚物理特性的最大利用。經(jīng)過實驗,該算法效果明顯優(yōu)于找點類算法,并解決了其他同類算法沒有解決的動力缺乏問題。
關(guān)鍵詞:多關(guān)節(jié)機器魚;水中角力;算法
中圖分類號: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
近年來,各種機器人比賽的蓬勃發(fā)展極大地推 進了機器人技術(shù)的進步[1]。機器人水中角力比賽是以智能仿生機器魚為主體,進行類似拔河的激烈的對抗性比賽。它不但涉及仿生機器魚應(yīng)用的各種技術(shù),還涉及水動力學分析、水下通訊、抗干 擾技術(shù)等多方面的內(nèi)容,既具有很強的技術(shù)挑戰(zhàn)性,又有很高的觀賞性,是科研和科普的完美結(jié)合[2]。機器人角力比賽的基本形式是兩隊機器魚進行對抗,占有圓形漂浮物面積方多者為勝。參賽隊伍要想取勝,就必須占有更多的面積,這就涉及一項基本的技術(shù)——頂圈。如何根據(jù)機器魚和呼啦圈的不同位置確定了最佳的進攻方向和頂球點[3]決定頂圈算法的優(yōu)劣,并直接決定著比賽最終的勝負。
1多關(guān)節(jié)機器魚
筆者所介紹的是擁有類似于自然界中魚體的外形、運動模式甚至交互模式的仿生智能機器魚。它具有三個關(guān)節(jié),仿生人的手指。角力比賽需要充分利用關(guān)節(jié)特性以獲取機器魚的最大能力。
機器魚的擺尾幅度分為十五個等級,分別為0到15。其中0至6為向左擺尾,并且0力度最大,7為直行,8至15為向右擺尾,并且15力度最大。
由7-0,7-15,機器魚的甩尾力度逐漸增大。熟悉機器魚的機械特性對筆者提出的“基于機器魚運行三態(tài)”的角力算法具有很重要的指導(dǎo)作用。
2全局視覺水中角力比賽的要求
參賽隊各派一條機器魚參加比賽。以水池兩個長邊池壁的中點連線為分界線,將水池劃分為左區(qū)和右區(qū)兩個區(qū)域。比賽開始時,裁判員將漂浮物放入水中,要求其圓心與水池中心重合并保持靜止,同時將比賽雙方的機器魚如圖2所示位姿靜止放入漂浮物的內(nèi)部。
水中角力比賽項目由主裁進行評判:
1) 比賽前機器魚以及漂浮物必須靜止,裁判鳴哨后方能啟動機器魚,不得遙控機器魚。
2) 比賽開始前,雙方參賽隊抽簽決定率先進攻左區(qū)或右區(qū),接下來兩場依次交換場地。
3) 若在 1 分鐘內(nèi),A隊機器魚率先將漂浮物完全頂入左區(qū),則 A隊獲勝,比賽結(jié)束;反之,則 B隊獲勝,比賽結(jié)束。若上述兩種情況均未出現(xiàn),則比較 1 分鐘達到時刻雙方占有漂浮物的面積,面積較大一方獲勝,比賽結(jié)束。
3 算法提出背景
3.1 機器魚運行三態(tài)的劃分
在水中機器魚比賽中的水中角力項目比賽過程中,通常有三個階段。第一階段是開始階段,雙方的魚在各自的控制算法下開始游向規(guī)定的方向。這一階段我們劃分為機器魚運行三態(tài)中的狀態(tài)一:初始狀態(tài),簡稱“初態(tài)”。這一狀態(tài)種找方向的準確性取決于各自算法的設(shè)計。水下環(huán)境的復(fù)雜性和不確定性給系統(tǒng)帶來的大量的干擾,降低了控制的效率和準確度[4]。因此良好的設(shè)計可以減少時間,在前期就能獲得優(yōu)勢。第二階段是調(diào)整階段,雙方的魚在各自找到方向后進行頂圈。在此過程中,我們將機器魚的運行狀態(tài)劃分為機器魚運行三態(tài)中的狀態(tài)二:過程狀態(tài),簡稱“過程態(tài)”。激烈的比賽中,由于比賽場地中的水波擾動和激烈對抗的影響,很容易造成機器魚的“丟標”,即我們失去對機器魚的控制,如果我們不能及時再進行對機器的標記,機器魚會在比賽場地內(nèi)“打圈”。所以,在此狀態(tài)下,控制機器魚如何在失去控制后重新進行調(diào)整并迅速回到比賽是“過程態(tài)”解決的重要問題。第三個階段為結(jié)束狀態(tài)。這一階段我們劃分為機器魚運行三態(tài)中的狀態(tài)三,終結(jié)狀態(tài),簡稱“終態(tài)”。比賽雙方都可以準確地到達自己預(yù)定的撞擊位置,但是由于機器魚動力相差無幾,造成水圈停在水池中央,很難發(fā)生移動。并且水中阻力較小,目前比賽中用到的機器魚沒有制動機構(gòu),不能做到旋停,也不能倒退運動,即使尾部擺動頻率降為零,機器魚仍將沿著原來的運動方向漂移。[5]導(dǎo)致不可能采取讓魚倒退一段距離再向前猛烈撞擊來獲得更大動力的、的解決方案。所以,如何在“終態(tài)”獲得較強動力,并且獲得比賽優(yōu)勢直至勝利是此狀態(tài)下解決的問題。
3.2 以往算法的局限性
在過往所采取的角力算法中,設(shè)計者們往往會選擇去優(yōu)化“初態(tài)”和“過程態(tài)”中的尋找撞擊位置的算法。這種思想主要分為兩種方式,一種是基于撞擊點尋找的算法,另一種則是基于角度的優(yōu)化。但是這兩種算法都有自己的局限性。
“找點”類算法預(yù)先設(shè)定了大量的撞擊點,在比賽開始階段找點可能會很順利的進行,但是在失去控制再重新找回控制后的調(diào)整可能會造成一點困難。撞擊點的劃分太過于精細,導(dǎo)致機器魚在調(diào)整時需要不斷進行細小的變化來找到撞擊點,而細小的調(diào)整對于機器魚的機械特性來說并不是十分友好。這類算法并沒有很好的考慮到機器的機械性能。
“角度”類算法則是設(shè)定一點的角度,在哪些角度范圍內(nèi)直行撞擊,在哪些角度內(nèi)基于什么樣的方向進行撞擊。這類算法并不會受到機器魚的機械特性的桎梏,但是此類算法存在的問題則是容易造成極大的誤差。相比于“找點”類算法的精準,“角度”類算法顯得條件過于寬泛。我們可能會明顯發(fā)現(xiàn)基于角度的撞擊算法控制的機器魚的運行軌跡是不規(guī)則的。
而在以往的算法中,筆者沒有見到對“終態(tài)”中機器魚動力缺乏問題提出解決方案的。基于此,筆者選擇在將“找點”類算法和“角度”類算法結(jié)合,并在“終態(tài)”階段提出一種“加強甩尾力度”的解決方案。通過對該算法的運用,筆者在實驗和實際的比賽中得到了明顯的效果。
4 算法思想
4.1前期區(qū)域劃分
整個比賽場地范圍實際上為一個水圈,我們經(jīng)過前期測量可得整個水圈圈的半徑為105個像素點(以下像素點都以px表示)。系統(tǒng)以水池的兩條邊為X軸,Y軸,建立了如圖3所示的坐標系,其中O點為呼啦圈的圓心,由系統(tǒng)自動獲得。
因為該算法是采用加大甩尾力度的方式來加強動力,此時就對機器魚的控制提出了極高的要求。常規(guī)控制機器魚運行的算法都是設(shè)定某些特定的撞擊點來控制機器魚的運行方式。撞擊點的設(shè)置極大地限制了機器魚的特性,比賽過程中機器魚將大量的時間浪費在計算尋找撞擊點上,這在對抗性極強的水中角力比賽中顯得十分笨拙,嚴重延誤了機器魚的撞擊決策。這種算法對機器魚的控制過于死板,沒有考慮到機器魚的機械特性是由三個“關(guān)節(jié)”決定的。機器魚無法像人一樣在撞擊出現(xiàn)偏差后立刻實現(xiàn)調(diào)整,它的機械特性不允許它做精準的變化。因此我們既要熟悉機器魚的物理特性,又要極大可能的實現(xiàn)對機器魚的精準控制。因此該算法前期準備中嘗試將水圈內(nèi)的區(qū)域進行劃分,在不同區(qū)域和機器魚的不同姿態(tài)情況下選擇不同的控制策略,借此來實現(xiàn)基于機器魚物理性質(zhì)的小范圍誤差內(nèi)的精準控制。
如圖4所示,我們將整個圈內(nèi)的區(qū)域分成三個區(qū)域。區(qū)域Ⅱ是與圓心y坐標值相差50px的區(qū)域,區(qū)域Ⅰ是除區(qū)域Ⅱ下方的部分,區(qū)域Ⅲ則是區(qū)域Ⅱ上方的部分。同時我們在左側(cè)圓圈內(nèi)弧標記了A,B,C三點,A,B兩點到達直徑BO的距離為10px。由三角函數(shù)sinα=10/105≈0.095得,α=6°,所以我們易得∠AOB=6°,∠AOC=12°。借此,我們將機器魚的撞擊區(qū)域限制在弧ABC。接下來筆者將基于機器魚向左側(cè)進攻的策略來進行對算法的描敘述,即左側(cè)A,B,C三點。
4.2算法流程
4.2.1 尋找撞擊區(qū)域
此處我們僅使用機器魚在開始比賽之前垂直于X軸放置在Ⅰ區(qū)域中,并向左側(cè)頂圈的過程作為實例過程來講解。首先,由于機器魚的體長較長,所以魚頭的位置在開始時就處于下一半的Ⅱ區(qū)域之中,因此魚采取在Ⅱ區(qū)域中的控制算法進行操作。我們定義的角度為魚頭的行進方向和X軸負半軸所形成的夾角的角度。因此當魚頭處于Ⅱ區(qū)域中,此時我們需要再對魚的行進方向與X軸的負半軸形成的夾角大小進行判斷。由于筆者采取將“找點”和“找角度”結(jié)合起來的方案,所以每次決策都是基于運行方向及其所處的區(qū)域有關(guān)。機器魚在“初態(tài)”階段的處理決策如下:
①如果夾角大于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
在水中角力比賽中,由于對抗激烈,并且水池的水波在比賽過程中較大,導(dǎo)致平臺對機器魚的鎖定標記追蹤顯得不是十分穩(wěn)定。常常會出現(xiàn)魚脫離標記的意外情形,機器魚也會因此而失控?;诖?,我們也設(shè)定了機器魚在區(qū)域Ⅱ和區(qū)域Ⅲ的控制策略,即機器魚在“過程態(tài)”的處理決策:
④當機器魚的魚頭誤入?yún)^(qū)域Ⅰ,機器魚將強制去撞擊點C;
⑤當機器魚的魚頭誤入?yún)^(qū)域Ⅲ,機器魚將強制撞擊A點。
偽代碼如下:
if fishHead in AreaⅠ
then strike point C
if fishHead in Area Ⅲ
then strike point A
當角度越小時,越會選擇近似于直行的策略,這樣可以盡塊實現(xiàn)對水圈的撞擊,并且產(chǎn)生的誤差在可接受范圍以內(nèi),不會影響后續(xù)的調(diào)整。而角度越大我們就需要調(diào)整,使得角度變小,因此選擇直接去撞擊B點,在此過程進行角度的調(diào)整。當角度介于兩者直接時,我們再進行微調(diào),借此我們可以實現(xiàn)尋找撞擊區(qū)域的速度和控制的精準性的兩者最大化的效果。
4.2.2 加強甩尾
基于以上操作,我們可以實現(xiàn)在較短時間的范圍內(nèi)使得機器魚尋找到撞擊區(qū)域。此時,我們已經(jīng)完成了大部分的工作,下面一步就是如何再進一步增強魚的撞擊力度。
由于在“終態(tài)”情形下,雙方的魚動力在相差不大的情形下,會出水圈“靜止”的狀況。為了獲得更強的撞擊力,我們第一反應(yīng)是讓機器魚后退一段距離,然后再向前撞擊,但是,由于機器魚的機械特性決定了我們無法控制魚的后退,因此我們無法使用這種策略。
設(shè)計人員每次在實驗室運行新設(shè)計的運行策略時,總會發(fā)現(xiàn)在“終態(tài)”情形下,機器魚盡管處于直行速度最快的那一檔,但是我們明顯發(fā)現(xiàn)機器魚的甩尾力度小于沒有障礙物時的情形。鑒于這種現(xiàn)象,筆者提出一種想法:人為地將強機器魚甩尾的力度。
但是這種策略同時會帶來新的問題,人為的加強甩尾力度更容易讓機器魚“丟標”,這樣機器魚狀態(tài)又將轉(zhuǎn)為“過程態(tài)”,盡管“過程態(tài)”可以保證機器魚的運行狀態(tài)盡快重新進入“終態(tài)”,但是過于強力甩尾力度又將使機器魚進入“過程態(tài)”。此時的問題就開始顯現(xiàn)出來,機器魚將在“過程態(tài)”和“終態(tài)”兩種狀態(tài)種來回切換。盡管可以獲得強動力,但是狀態(tài)間的差別直接導(dǎo)致算法決策的差異,切換決策方案的時間差和處理決策的時間差將直接被對手的所利用。
因此,如何在增強機器魚甩尾力度的同時最大化降低其對機器魚運行方向的影響是“終態(tài)”策略的難點。
基于這種思想,本文在實驗室對機器魚運行進行了多次的實驗,最終發(fā)現(xiàn)向左5,向右9是對于本文實驗室現(xiàn)存機器魚最佳的甩尾力度。由于機器魚之間的機械特性的差別,該甩尾力度不具有普適應(yīng),需要對具體的機器魚進行具體的實驗獲得最佳的甩尾力度。
本論文經(jīng)過多次測試以及比賽實際的情況的確認,該算法極大地改善了機器魚在陷入僵持后的動力不足問題。使得獲得更大的動力,大大地提高了比賽獲勝的概率。
5 總結(jié)
機器魚水中角力算法的改善基于兩個方面,一個方面強調(diào)的是控制的準確性,另一個方面則是如何獲得強動力。筆者在本篇論文中提出“基于機器魚運行三態(tài)”的角力算法,首創(chuàng)性地將控制精確性方面“找點”和“角度”兩類算法結(jié)合;同時在“終態(tài)”下提出了加強動力的一種思路:加強甩尾力度。
機器魚水中角力項目對機器魚的控制地提出了很高的要求,我們不能忽略機器魚這一“硬件”的特定的物理屬性。任何策略算法的提出都必須基于機器魚的機械特性,不然算法再精妙都不能在機器魚上得到完全的體現(xiàn)。
機器魚算法策略的完善是一個漸進的過程,筆者的算法也有自身存在的局限性。我們需要繼續(xù)努力,推動機器魚算法的進步和機器人應(yīng)用技術(shù)的進步。
參考文獻:
[1] KIM J H. Third call for participation : micro - robot world cup soccer tournament 1996 (MiroSot96 ) [EB/OL].
[2] 北京大學. 機器人水球比賽項目推介書[M]. 北京: 北京大學, 2009.
[3] 基于狀態(tài)變化的機器魚水中角力策略[J]兵工自動化,2014(12)
[4] 黎章. 多水下機器人協(xié)作控制[R]. 北京: 北京大學, 2008.
[5] 陶金, 孔峰, 謝廣明. 基于動作決策的機器魚頂球算法[J]. 兵工自動化, 2010,29(11): 70-73.