魏鹿鳴 馬鐵駒
(華東理工大學 理學院, 上海 200237)
多智能體系統(tǒng)(multi-agent system,MAS)目前主要應用于飛行編隊、信號控制等領(lǐng)域,其思想源于自然界中的編隊現(xiàn)象。多智能體系統(tǒng)的特殊性在于,每個智能體都能根據(jù)給出的全局目標進行自主規(guī)劃,通過智能體之間的交流達到解決問題的目的,使得復雜系統(tǒng)的表達得到簡化。哈佛大學自組織研究所設計了一個名為Kilobot的簡單低成本機器人[1-2],由若干個機器人組成的小型群體可以在平面上執(zhí)行一系列簡單的多智能體行為。Kilobot機器人群體的面世使得多智能體系統(tǒng)在實際生活中的應用成為可能。
蜂擁算法(flocking algorithm)是一應用廣泛且性能良好的多智能體算法。Reynolds[3]于1987年在其模擬程序Boids中首次模擬了多智能體的蜂擁行為。隨后科研人員們就控制算法[4-5]、機器人[6-7]、移動傳感網(wǎng)絡[8-9]等方面都進行了大量研究。其中,王帥磊等[4]提出了基于Levy飛行的蜂擁控制算法,采用Levy飛行策略對目標進行搜索,在移動智能體群體中加入搜索智能體,智能體根據(jù)周圍鄰居和感知到的目標信息調(diào)整自身運動;潘無為等[7]針對多自主式水下機器人(AUV)系統(tǒng),設計了一種結(jié)合人工勢場與虛擬結(jié)構(gòu)的多AUV編隊控制算法,可令AUV系統(tǒng)無碰撞地進行編隊變換;婁柯等[8]構(gòu)造了一個虛擬的領(lǐng)導者節(jié)點,可令其他網(wǎng)絡各節(jié)點作為跟隨者,跟蹤領(lǐng)導者的運動軌跡,實現(xiàn)了網(wǎng)絡拓撲結(jié)構(gòu)連通性的保持?;谇叭说某墒斓难芯砍晒芍嘀悄荏w蜂擁算法能夠良好地應用于實際生活。
現(xiàn)今有眾多手部結(jié)構(gòu)完整但活動不便的患者,已有研究人員為該類患者設計了不需要與人體神經(jīng)對接的外骨骼系統(tǒng)[10],它通過傳感器感應人手的肌肉運動意圖,外接機械系統(tǒng)通過杠桿產(chǎn)生目標需要的作用力,以此幫助患者進行正常的手部運動。
然而,傳統(tǒng)的機械手系統(tǒng)結(jié)構(gòu)固定,不易于根據(jù)患者手的大小不同靈活變換。由于多智能體系統(tǒng)具有易于更換且能夠自主規(guī)劃的特性,可考慮運用多智能體系統(tǒng)輔助患者的運動;同時,作為多智能體算法中的蜂擁算法可實現(xiàn)多智能體的自組織功能。因此對蜂擁算法進行改進,使其能夠適配于人體手指的運動,從而輔助患者進行日常的手部活動是一種可行的思路。
本文于Unity引擎內(nèi)模擬了均勻安裝在手指上的若干智能體單元組成的多智能體系統(tǒng)追隨目標點的運動行為,并帶動手指以輔助手指彎曲的過程?;诙嘀悄荏w原理制作輔助手部運動系統(tǒng)是一個嶄新的思想,該系統(tǒng)可靈活改變智能體的大小和數(shù)目,且無需為每個智能體分別設置不同的算法或目標,為今后做出輔助系統(tǒng)的實體提供了可行的理論依據(jù)。
基礎(chǔ)蜂擁算法由以下3個規(guī)則控制[3]:
(1)分離 智能體與鄰域內(nèi)其他智能體避免碰撞;
(2)聚合 智能體對鄰域內(nèi)其他智能體具有吸引力;
(3)匹配 智能體與其他智能體保持速度相同。
采用Olfati-Saber[11]設計的單虛擬領(lǐng)導者的蜂擁算法。該算法主要基于勢能函數(shù)原理和一致性原理。在算法中,假設全部智能體都能接收到虛擬領(lǐng)導目標點的信息。
基于勢能函數(shù)的蜂擁算法的主要思想是在智能體周圍模擬類似于原子之間的吸引力場和排斥力場,使得系統(tǒng)在穩(wěn)定狀態(tài)時能夠?qū)崿F(xiàn)基礎(chǔ)蜂擁算法中的分離和聚合規(guī)則。文獻[11]中提出的勢能函數(shù)如式(1)所示。
(1)
式中,
φα(z)=ρh(z/rα)φ(z-dα)
(2)
(a-b)]
(3)
(4)
式中,a、b、k、h為常數(shù);rα(rα>0)為傳感器能夠感知的范圍;dα(dα>0)為智能體之間需要保持的距離。
多智能體系統(tǒng)中,智能體系統(tǒng)的狀態(tài)方程式為
(5)
式中,xi(t)∈m表示智能體i在t時刻的狀態(tài)變量;ui(t)∈m表示智能體i在t時刻的輸入控制量。對于具有拓撲結(jié)構(gòu)的網(wǎng)絡,Olfati-Saber[11]設計了線性一致性算法并驗證了其有效性,該算法的表達式為
(6)
式中,L(t)為無權(quán)無向圖的拉普拉斯矩陣,aij(t)為網(wǎng)絡時刻的鄰接矩陣。
線性一致算法控制了智能體系統(tǒng)的穩(wěn)定性,使得智能體的速度保持一致,可實現(xiàn)基礎(chǔ)蜂擁算法中的匹配規(guī)則。
Unity是利用交互式圖型化開發(fā)環(huán)境為首要方式的引擎,能較便捷地創(chuàng)作三維模型。本實驗將在Unity引擎內(nèi)進行模擬。其中,人體手部骨骼模型使用Unity Assets Store中的Hand Physics Controller模型,該模型是一節(jié)具有手腕的左手,手指的各個關(guān)節(jié)可自由活動,其中中指長度為1 190像素。假設在現(xiàn)實中系統(tǒng)外部有類似手套的載體,由于載體具有一定的彈性系數(shù),故在此次模擬中通過彈簧關(guān)節(jié)(spring joint)來模擬實現(xiàn)載體的作用。
于Unity引擎中創(chuàng)建80個完全相同的球形智能體,智能體直徑為100像素。將所有智能體通過彈簧關(guān)節(jié)均勻地固定在左手模型的5根手指上,每根手指分配到16個智能體(手指的上表面與下表面均放置8個),智能體之間間隔150像素。智能體的運動遵循蜂擁算法。為每根手指上的16個智能體分別設立1個目標點,目標點的位置可通過鼠標拖動隨時更改。目標點所在位置即代表著患者的運動目的。
初始狀態(tài)的手部模型如圖1所示。
2.1.1原始蜂擁算法
由于單根手指上多智能體系統(tǒng)的智能體個數(shù)為16,系統(tǒng)的運動方程[11]可表示為
(7)
式中,qi(t)∈m表示在t時刻智能體i的位置矢量;pi(t)∈m表示在t時刻智能體i的速度矢量;ui(t)∈m表示在t時刻智能體i的輸入控制矢量。
系統(tǒng)虛擬目標點的運動方程[11]為
(8)
式中,qγ(t)∈m表示在t時刻虛擬目標點的位置矢量;pγ(t)∈m表示在t時刻虛擬目標點的速度矢量;uγ(t)∈m表示在t時刻虛擬目標點的輸入控制矢量。式(8)經(jīng)變換可以寫作[11]
(9)
式中,
(10)
(11)
(12)
(13)
2.1.2算法改進
原始蜂擁算法主要解決開放空間內(nèi)的多智能體目標追蹤問題,但安裝在手指表面的智能體受到手部結(jié)構(gòu)的限制,無法在空間中自由移動。正常手指彎曲時,手指尖端的彎曲幅度明顯大于手指根部。針對手指這一特性作出算法改進,將手指根部的位置矢量表示為qroot。首先將式(11)中的速度匹配項改進為
(14)
由于原文中已知所有控制點的原速度矢量pi(t)和原位置矢量qi(t),通過pi(t)及qi(t)可計算出即時的加速度矢量ui(t)?,F(xiàn)在加入一個遠離系數(shù)ω,通過智能體到手指根部的距離之比計算出智能體當前狀態(tài)的實時速度矢量p′i(t)。以手指中點的速度為基準,用qmid表示手指中點的位置矢量,則改進后智能體的速度矢量p′i(t)可以表示為
(15)
可通過調(diào)整ω的值來改變手指的運動速度。在本文實驗中,ω的值設置為1。
啟動基于改進蜂擁算法的多智能體系統(tǒng)后,白色的球形智能體群體便會跟隨目標點作蜂擁算法控制的自組織運動,將手逐漸帶動至目標點。在系統(tǒng)中,目標點用白色五角星標示(圖2)。
通過移動虛擬目標點的位置,可令所有手指彎曲。在手指運動的可達范圍內(nèi),目標點越往遠離手的方向移動,手指彎曲程度越大。移動目標點后,5根手指的彎曲示意如圖2所示。
由圖2可見,5根手指都能通過移動目標點實現(xiàn)不同程度的彎曲,并最終達到某一閾值。通過5根手指的共同作用,可令整個左手實現(xiàn)抓握物體等動作。
以中指上的16個智能體為例,將目標點設置在中指可到達的位置(圖3(a)),此時目標點的坐標為(-300, -450, 0)。取時間間隔Δt=0.1 s來記錄16個智能體向目標點運動過程中的即時位置和即時速度。中指開始運動和結(jié)束運動時的狀態(tài)如圖3所示。
由于中指彎曲主要是在xy平面上發(fā)生位置變化,在z軸上幾乎沒有位置變化,故分析時只需提取出智能體在x軸及y軸上的即時位置情況。
由圖4可以看出,16個智能體相對手指的位置不同,故到達目標點的時間也不盡相同;智能體的移動軌跡都較為平滑、連續(xù),不易傷害到人體,故認為今后將該系統(tǒng)做成實體是可行的。
隨后,提取出智能體速度在x、y、z軸上的分量。從圖5中可以看出,智能體在x軸上的速度分量相對均衡,在t=2 s及t=6 s之間呈現(xiàn)出比較大的速度變化,在t=8 s時手指本身不再位移,此時認為系統(tǒng)達到了穩(wěn)態(tài)。判斷出系統(tǒng)達到穩(wěn)態(tài)后,智能體將在2 s的延遲后自動停止運動。
由于中指主要向y軸的負半軸彎曲,故圖6中智能體速度在y軸的分量于t=2 s時呈現(xiàn)出加速度向上的態(tài)勢,原因在于系統(tǒng)阻止中指的迅速向下運動,使中指較為平滑地進行向下彎曲的動作;同樣在t=8 s時系統(tǒng)大致達到了穩(wěn)態(tài)。
z軸方向上手指沒有任何位移,故圖7中智能體在z軸上的速度分量圖像基本上是圍繞pz=0進行輕微震動。但圖中有兩條曲線(5號曲線與11號曲線)代表的智能體速度相對突出。5號曲線對應位于中指關(guān)節(jié)上方的智能體,而11號曲線對應位于中指關(guān)節(jié)下方的智能體。在手指關(guān)節(jié)處的智能體隨著手部運動有一定的偏移量是正常表現(xiàn),具體如何減少該偏移量還需今后進一步的研究和分析。
選取編號從1到9共9個位置的目標點(圖8)來測試系統(tǒng)達到穩(wěn)定所需時間。測試結(jié)果見表1。
從表1中可以看出,算法改進后較改進前系統(tǒng)達到穩(wěn)定所需時間明顯縮短,從而可認為改進后的蜂擁算法可以更好地匹配人體手指。同時,當y軸坐標固定在-300時,目標點越遠離指尖,手指彎曲幅度越大,故系統(tǒng)達到穩(wěn)態(tài)所需時間越長,此時手指完全彎曲所需時間約為18 s;而當x坐標固定在-300時,由于目標點離指尖的遠近變化并沒有太多地影響到手指的彎曲程度,故運動時長也無明顯變化,基本穩(wěn)定在8 s左右??梢娫撓到y(tǒng)的運動時長主要與手指彎曲幅度有關(guān)。
表1 目標點的坐標及其達到穩(wěn)定所需時間
(1)使用改進的蜂擁算法建立并仿真了一個多智能體手部運動輔助系統(tǒng),通過多個智能體的運動帶動手指運動,最終實現(xiàn)患者的運動意圖。
(2)本文智能體系統(tǒng)只需為所有智能體設置相同的算法,當設置好目標點后,所有智能體便可自適應調(diào)整自己的運動速度和運動方向,直至抵達目標點。故當單個智能體損壞時可隨時更換,硬件上容錯率較高。
(3)本文智能體的數(shù)目可在一定范圍內(nèi)改變,可根據(jù)不同大小的手設置不同數(shù)目的智能體,擁有較高的靈活性。
(4)基于本文模擬所用的參數(shù),系統(tǒng)的運動時長約在7~18 s之間,運動軌跡平滑、連續(xù),可認為該系統(tǒng)具有一定的安全性。該系統(tǒng)可根據(jù)患者手的大小調(diào)整智能體的個數(shù)及振動強度,并且可隨時更換出故障的智能體,操作靈活,為多智能體系統(tǒng)的應用提供了嶄新的思路。
目前已有現(xiàn)成的傳感器,及現(xiàn)成的可運用多智能體算法的小型智能體,故今后將該系統(tǒng)做成實體是可行的。今后需要考慮調(diào)整傳感器的測定方式,智能體的運動方式,以及找到合適的智能體的安裝載體(如軟性手套等)。