天天看點

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

一、多無人機協同作業簡介

0 引言

多架無人機組成無人機叢集可以協同完成任務,是未來無人機的發展方向。組成無人機叢集的多架無人機通過機間鍊路互相通信實作協作,可以迅速準确地執行路徑規劃、協同偵察、協同感覺和協同攻擊等複雜任務。

為實作無人機叢集協作的誘人前景,國内外都積極開展了相關研究工作。美國方面,美國國防預先研究計劃局(DARPA)于2015年推出“小精靈”項目,計劃研制具備自組織和智能協同能力的無人機蜂群系統。美國防部戰略能力辦公室(SCO)2014年啟動了“無人機蜂群”項目,旨在通過有人機空射“灰山鹑”微型無人機蜂群執行低空态勢感覺和幹擾任務。美國海軍研究局(ONR)于2015年公布了“低成本無人機蜂群”(LOCUST)項目,研發可快速連續發射的無人機蜂群,無人機之間利用近距離射頻網絡共享态勢資訊,協同執行掩護、攻擊或防禦任務。2017年,在 DARPA 會議中心舉辦“進攻性叢集戰術”(OFFSET)項目的提案人活動,目标是發展基于遊戲的開放架構,為城市作戰的無人叢集系統生成、評估和內建叢集戰術。

歐洲方面,2016 年,歐洲防務局啟動了“歐洲蜂群”項目,開展了無人機蜂群的自主決策、協同飛行等關鍵技術研究。2016年,英國國防部發起無人機蜂群競賽,參賽的多個團隊控制無人機蜂群實作了通信中繼、協同幹擾、目标跟蹤定位和區域測繪等任務。2017 年,俄羅斯無線電電子技術集團對外發表研究計劃稱,在戰鬥機上裝載多架蜂群無人機可實作協同偵察和攻擊的新型作戰樣式。

國内也相繼展開相關研究。最近,中國電科(CETC)電子科學研究院釋出了陸軍協同無人機“蜂群”視訊,引起廣泛關注。

面對這一重要課題,本文研究總結了無人機協同應用的發展趨勢,對其目前研究進展和發展方向進行了探讨,并提出無人機叢集任務協作的發展趨勢是多智能體協同。

1 無人機協同應用發展趨勢

對現有研究工作的分析如圖1所示,無人機協同應用大體上可以分為3個階段,分别是分布式協同,群體智能協同和未來的多智能體協同。

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

圖1 無人機協同技術的發展趨勢

無人機叢集協同發展的第1個階段是簡單分布式協同。在該階段,協同任務根據執行條件,預先在簡單連接配接群組合的叢集成員之間經過計算處理後配置設定執行。叢集基本沒有能力根據環境與目标的變化動态調整任務配置設定,各無人機分擔的任務通常是确定的。

鑒于預配置設定方式的局限性,受生物叢集活動的啟發,群體智能被應用于無人機叢集,使無人機叢集協同發展到第2個階段——群體智能協同。在該階段中,各個無人機節點被賦予初級智能,能夠進行簡單的認知和決策;通過叢集個體之間更為緊密的耦合,可以根據執行中的回報調整優化方式或者優化目标,使整個無人機叢集系統有能力構成自組織、高穩定的分布式系統。群體智能協同階段目前正處于研究和應用迅速發展時期。

随着節點計算能力的進一步提升和人工智能技術的飛速發展,無人機協同即将進入發展的第3個階段——多智能體協同。在多智能體協同發展階段,叢集中的各個無人機都将是一個獨立的綜合智能體,具有多元度認知計算和進階智能處理能力,進而實作更高效的自主學習和決策,并在此基礎上,完成更複雜、更艱巨的任務。

2 分布式協同

從無人機叢集出現開始就被用于解決協同路徑規劃、協同感覺和協同任務規劃等分布式協作任務。早期的無人機分布式協同任務通常都是提前進行充分的計算和配置設定,無人機節點按照既定算法或者方案予以執行。根據計算結果,分布式協同無人機群可組織執行配置好的任務,如圖2所示。

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

圖2 分布式協同階段的任務執行方式

2.1 協同路徑規劃

協同路徑規劃中,要求在給定目标或者搜尋目标後,無人機節點根據目前的任務狀态來确定飛行路徑。針對協同搜尋和跟蹤任務的路線規劃,無人機叢集可采用最大化目标功能來檢測最重要的目标,并在關鍵時刻對其進行跟蹤,進而獲得最有價值的資訊。而協同搜尋的路徑規劃可以分成無人機工作區間劃分和全區域覆寫搜尋路徑規劃2個子問題,将多機協同搜尋轉化為子區域上的單機搜尋,對目标區域快速進行劃分并生成飛行路線。基于改進遺傳算法的多無人機協同偵察航迹規劃算法,可用于解決面向複雜戰場環境中高效偵察多種類型目标過程中的路徑規劃問題,并能夠有效地提高航迹規劃精度和效率。

2.2 協同感覺

協同感覺是多無人機叢集共同探測感覺某一目标區域狀态的任務形式。在這類任務中最常見的是協同頻譜感覺。針對協同頻譜感覺任務特點,采用最佳融合準則的分布式協同任務執行方案可以優化檢測性能,使協作頻譜感覺總錯誤率達到最小,并能降低協作感覺時間,節省感覺過程開銷。

2.3 協同任務規劃

協同任務規劃要求叢集系統能夠根據目标任務和執行情況,對任務進行系統配置設定。例如,針對協同打擊任務,通過建立無人機毀傷代價名額函數、航程代價名額函數和價值收益名額函數,可以實作多無人機協同打擊任務的配置設定[5];而通過建立多目标優化模型并采用遺傳算法,能有效提高任務的完成效率。針對協同搜救任務,使用一種新的基于通信保持的拍賣方法的自适應回報調節遺傳算法,能夠改善傳統遺傳算法存在易陷入局部最優的弱點。

通過以上3種類型協同任務的相關研究工作可以看出,無人機叢集的分布式協同方式雖然充分考慮了“分布式”特點,能夠根據任務目标和叢集特征,設定有效的目标函數和優化方法去尋求最優或者較優的結果,但是其任務執行環境和求解目标需要在任務執行之前進行優化計算,然後配置設定執行,不能适應實際中動态的任務目标和環境變化,缺乏“智能性”的感覺和适應性行為。随着人們對“蜂群”“鳥群”等生物群體智能研究的深入,群體智能協同被進一步引入到無人機的協同中。

3 群體智能協同

“鳥群”“蟻群”等生物群體,雖然其中的個體智能有限,但是群體卻展現出高度的自組織性,這一特點與無人機叢集自主協同的需求相符,因而群體智能在無人機協同應用領域也得到了廣泛研究,使無人機叢集協同具有了初步的智能性。具備群體智能的無人機叢集系統在任務拆解和執行過程中引入了群體回報和适變能力,可執行較複雜的動态任務,其過程如圖3所示。

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

圖3 群體智能協同階段的任務執行方式

3.1 協同路徑規劃

山區路徑規劃任務受到地形特征的強烈影響,難以預先确定性配置設定執行,簡單的分布式協同無法勝任。例如,為了執行山區應急物資運輸的路徑規劃任務,一種考慮路徑安全度的改進蟻群算法可快速收斂并生成更短路徑。蟻群算法也被用于無人機協同飛抵空戰場的航迹規劃任務中;一種基于改進混沌蟻群算法更能克服傳統蟻群智能算法中易出現局部極值、收斂效率低的缺陷,提升算法的全局尋優能力和搜尋效率。針對協同攻擊移動目标場景的航迹規劃,另一種改進的蟻群算法建立了結合任務配置設定的無人機群協同航迹規劃模型,可以快速地對地面多個移動目标規劃出有效的航迹。

3.2 協同感覺

在協同感覺任務中,群體智能也得到應用。針對無人機叢集通信場景和需求,出現了考慮結合認知無線電技術指導下的智能通信思想和彙聚有限智慧的群體智能理論方法,建構了群體智能協同通信模型和智能協同感覺模型。

3.3 協同任務規劃

協同作戰是協同任務規劃中的典型場景,結合群體智能優化算法的優勢,基于粒子群-整數編碼狼群算法的叢集組網任務配置設定算法适合解決此類協同問題;由于無人機叢集協同決策困難,還可以結合狼群算法的認知與協作能力,實作在複雜環境下迅速對目标進行跟蹤和包圍。這種協同任務,是第一類簡單協同所不能勝任的。

雖然無人機叢集和群體智能的結合可以充分發揮無人機叢集優勢,增強分布式協同智能性,可在任務執行過程中與環境和任務執行中間過程産生一定互動和回報,使之具備一定的自适應能力,但是,這種智能仍然是非常有限的,其本質仍然是基于特定計算模式和回報模式下的分布式優化算法。

4 多智能體協同

随着人工智能技術和節點自身算力的不斷增強,未來無人機叢集中的個體将具備更強的智能性,能夠獨立對環境和任務進行感覺和評估,實作多個智能體之間的互動和協同,進而具備多智能體協同能力。

近年來,人工智能領域研究取得了突破性進展。其中,深度強化學習在諸多領域得到了成功應用。無線通信網絡基于多智能體深度強化學習的資源配置設定技術也得到了深入研究。多智能體深度強化學習模型早已被用于解決車聯網中頻譜資源配置設定問題,這種應用已經與無人機叢集系統頗為接近。例如一種基于多智能體深度強化學習的分布式動态功率配置設定方案。基于多智能體深度強化學習的政策還可被用于二者的結合——用無人機輔助車輛網絡進行多元資源管理。

雖然基于強化學習的多智能體通信網絡資源配置設定問題已經得到了廣泛研究,但是由于網絡特性的不同,傳統的針對其他通信網絡的研究成果不能直接用于無人機叢集網絡。因而基于強化學習的多智能體自主協同應用逐漸成為未來無人機多智能體自主協同的一個研究熱點。針對無人機群的通信網絡資源動态配置設定問題而提出的多智能體深度強化學習方案也陸續出現,例如,一種基于多智能體深度強化學習的分布式幹擾協調政策被用于受到幹擾的無人機網絡中的檔案下載下傳業務。智能體在适用于無人機網絡特點的獨立強化學習中,其行為政策通常隻能根據它們對全局環境的局部個體觀察來制定。針對這種局限性,聯合采用2種不同規模的智能體可解決智能體之間的通信問題。

無人機叢集協同,經常會處理動态高維離散和連續動作狀态空間的優化求解問題,近來出現的演員-評論家算法是深度強化學習的一個新興方向,結合了基于值函數和基于政策函數的深度強化學習兩大分支的優勢,非常适用于無人機叢集的智能協同。利用演員-評論家算法,在無線信道和可再生能源再生率都是随機變化,且環境動态變化條件下,可尋求資源配置設定最佳政策,如用于解決車聯網中複雜動态環境下的資源配置設定問題。應用裝置到裝置(D2D)網絡的異構蜂窩網絡環境下,基于演員-評論家算法的政策可用于智能化節能模式選擇和資源配置設定。

随着節點智能算力的不斷增強,無人機叢集中的每架無人機可以作為一個具有深度強化學習能力的智能體,而整個叢集可通過合作構成多智能體。相鄰無人機之間通過通信網絡進行資訊交換與分發。如圖4所示,每架無人機都與局部環境互相作用,根據從周圍環境或者同伴無人機得到的資訊,針對承載的任務需求,通過深度強化學習,智能地産生動作政策,進行自身資源與行為的配置設定與調整,進而與環境和同伴互動,并獲得個體獎勵。

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

圖4 基于多智能體的無人機叢集

每架無人機的深度強化學習智能體由2個深度神經網絡構成,包括演員網絡和評論家網絡,如圖5所示。

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

圖5 基于演員評論家算法的無人機智能體

演員網絡負責輸出動作,評論家網絡負責評價演員的動作,以獲得互相促進的效果。與傳統的深度強化學習方法相比,演員-評論家算法同時吸取了基于值函數方法和基于政策函數方法的優點,從價值和政策兩方面來訓練提升智能體,訓練的更快,效果也更好。通過訓練和學習,期望智能體的評論家網絡可以獲得最佳效用評估函數:

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

智能體從周圍環境中觀察得到狀态資訊St ,例如幹擾狀态、相鄰無人機等。演員網絡拟合動作政策函數π(St;ωπ),根據狀态資訊St,動作政策函數輸出目前時隙的動作at,也就是資源配置設定結果,并應用到環境中得到個體的即時獎勵rt。獎勵由獎勵函數計算得到,負責回報一個即時的、合理的、具有指導意義的獎勵值,進而激勵智能體向目标更新政策。評論家網絡拟合效用評估函數Q(St,at,ω),負責預測和評估在目前狀态St采用動作at所能得到的狀态動作價值,即長期性回報Rt為:

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

式中,γ是折扣因子,γ表示了目前對于未來收益的重視程度,取值在0~1之間,取值0則表示智能體忽視未來收益,隻看重目前的收益rt,取值1則表示智能體将未來每個時刻的收益都視為與目前時刻收益一樣的重要性。獲得最大的長期性回報是智能體的最終目的,這個目标可以根據任務的性質被定義為不同的評判标準。

評論家網絡的最佳效用評估函數對應的演員網絡動作政策即為最佳動作政策π*。動作政策函數的參數通過政策梯度的方法進行更新,效用評估函數的參數采用最小化損失函數進行更新:

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

式中,yt為優勢函數,用來衡量計算執行動作後的實際效用評估值。通過更新,智能體的演員網絡的動作政策輸出的動作越來越好,而評論家網絡的效用評估也會越來越準确。基于多智能體的無人機群的每架無人機都會朝着收益最大的方向執行動作,進而實作叢集的收益最大化。

二、部分源代碼

unction GUIMultiUAV(action,Input)
%GUIMultiUAV - function builds the GUI and contains the callback function for it
%
%  Inputs:
%    (none)

%  Outputs:
%    (none)
%

%  AFRL/VACA
%  September 2000 - Created and Debugged - RAS



global g_Debug; 
if(~exist('g_Debug')),g_Debug=0;end;
if(g_Debug==1),disp('GUIMultiUAV.m');end; 

global g_isMonteCarloStop;
global g_isMonteCarloRun;
global g_OneTimeInitialization;
global g_CommunicationMemory;

if nargin <1,
    action = 'DrawFigure';
end

% add button names, callback function names and button colors to the following cell array to add buttons to the GUI
ButtonsStrings = {
    {'Xtreme Reinitilization'},{['XtremeReinitialize;']},{['[1.0 1.0 0.0]']}
    {'Run Simulation'},{['GUIMultiUAV(''RunSimulation'');']},{['[0.4 0.6 0.4]']}
    {'Run MonteCarlo'},{['GUIMultiUAV(''RunMonteCarlo'');']},{['[0.4 0.6 0.4]']}
    {'Stop MonteCarlo'},{['GUIMultiUAV(''StopMonteCarlo'');']},{['[0.6 0.4 0.4]']}
    {'Plot Vehicle Trajectories'},{['GUIMultiUAV(''PlotResults'');']},{['[0.6 0.6 0.4]']}
    {'Print Simulation Settings'},{['PrintSimulationSettings']},{['[0.6 0.6 0.4]']}
    {'Plot Comm Avg Data Rate'},{['GUIMultiUAV(''CommPlot'');']},{['[0.6 0.6 0.4]']}
    {'Save AVDS Data'},{['GUIMultiUAV(''SaveAVDSData'')']},{['[0.6 0.6 0.4]']}
    {'Edit Globals'},{['GUIMultiUAV(''EditInitializeGlobals'');']},{['[0.4 0.6 0.6]']}
    {'Edit MonteCarlo'},{['GUIMultiUAV(''EditMonteCarlo'');']},{['[0.4 0.6 0.6]']}
    {'Edit Simulation Functions'},{['GUIMultiUAV(''EditSimulationFunctions'');']},{['[0.4 0.6 0.6]']}
    {'Edit Create Structure'},{['GUIMultiUAV(''EditCreateStructure'');']},{['[0.4 0.6 0.6]']}
    {'Edit GUI'},{['GUIMultiUAV(''EditGUI'');']},{['[0.4 0.6 0.6]']}
    {'Run VehicleTest'},{['GUIMultiUAV(''RunVehicleTest'');']},{['[0.4 0.6 0.4]']}
    {'Open MultiUAV Main (Simulink)'},{['GUIMultiUAV(''OpenMultiUAV'');']},{['[0.5 0.4 0.6]']}
    {'Open MultiUAV Library (Simulink)'},{['GUIMultiUAV(''OpenCooperativeLib'');']},{['[0.5 0.4 0.6]']}
};
for(CountMessages=1:g_CommunicationMemory.NumberMessages),
    ButtonsStrings{end+1,1} = {['Messages: ' g_CommunicationMemory.Messages{CountMessages}.Title]};
    MessageNumberString = num2str(CountMessages);
    ButtonsStrings{end,2} = {['GUIMultiUAV(''ShowMessage'',',MessageNumberString,');']};
    ButtonsStrings{end,3} = {['[0.8 0.7 0.5]']};
end;    %for(CountMessages=1:g_CommunicationMemory.NumberMessages)
%add some blank buttons for spacing
%ButtonsStrings{end+1,1} = {''}; ButtonsStrings{end,2} = {['']}; ButtonsStrings{end,3} = {['[0.7 0.7 0.7]']};

% moved def here for convenience with adding blank buttons
ButtonsPerColumn = 14;

switch action
    
case 'ShowMessage',
    if(~isempty(g_CommunicationMemory.Messages{Input}.Data)),
        fprintf(strcat(g_CommunicationMemory.Messages{Input}.Title,' = \n'));
        disp(g_CommunicationMemory.Messages{Input}.Data(:,find(g_CommunicationMemory.Messages{Input}.Data(1,:)~=0)));
    else,
        fprintf('****** No Messages ******\n');
    end;
    
case 'PlotResults',
    PlotOutput('PlotData',0);

case 'CommPlot',
    CommPlot(0);
    
case 'RunSimulation',
    g_isMonteCarloRun=0;
    [t,x,y] = sim('MultiUAV');%運作simulink
    
case 'RunVehicleTest',
    [t,x,y] = sim('VehicleTest');
    
case 'SaveAVDSData',
    SaveAVDSData;
    
case 'EditInitializeGlobals',
    local_edit('InitializeGlobals.m');
    
case 'EditCreateStructure',
    local_edit('CreateStructure.m');
    
case 'EditMonteCarlo',
    local_edit('MonteCarloRuns.m');
    
case 'RunMonteCarlo',
    disp(sprintf('\n'));
    disp('Luke:  All right, I''ll give it a try.');
    disp('Yoda:  No.  Try not.  Do, or do not.  *shakes head*  There is no ''try''.');
    disp('Luke:  I don''t believe it!');
    disp('Yoda:  That is why you fail.');
    disp(sprintf(['Robot Us(es):\n\tEnable by uncommenting ''MonteCarloRuns;''' ...
          ' under ''case RunMonteCarlo''\n\tin GUIMultiUAV.m.']));

    %MonteCarloRuns;
    
case 'StopMonteCarlo',
    disp('**************************************************************************************************')
    disp('*********** Monte Carlo simulation will stop at the end of the current simulation run. ***********')
    disp('**************************************************************************************************')
    g_isMonteCarloStop = 1;
    
case 'EditSimulationFunctions',
    local_edit('SimulationFunctions.m');
    
case 'OpenMultiUAV',
    open 'MultiUAV.mdl';
    
case 'OpenCooperativeLib',
    open 'cooperative.mdl';

case 'EditGUI',
    local_edit('GUIMultiUAV.m');
    
case 'DrawFigure',
    
    [NumberButtons,dummy]=size(ButtonsStrings);
    
    NumberColumns = fix((NumberButtons-1)/ButtonsPerColumn) + 1;
    ButtonWidth = 1/NumberColumns;
    if(NumberButtons > ButtonsPerColumn),
        ButtonHeight = 1/ButtonsPerColumn;
    else,
        ButtonHeight = 1/NumberButtons;
    end;
    
    GUIHeightIncrement = 0.025;
    GUIWidthIncrement = 0.15;
    if(NumberButtons > ButtonsPerColumn),
        GUIHeight = GUIHeightIncrement * ButtonsPerColumn;
    else,
        GUIHeight = GUIHeightIncrement * NumberButtons;
    end;
    GUIWidth = GUIWidthIncrement * NumberColumns;
    GUIPositionX = 0;
    GUIPositionY = 1 - (GUIHeight + GUIHeightIncrement);
    
    h0 = figure(32);
    clf;
    set(h0,'Color',[0.8 0.8 0.8], ...
        'Name','MultiUAV Simulation', ...
        'Units','normalized', ...
        'Position', [GUIPositionX GUIPositionY GUIWidth GUIHeight], ...
        'Tag','MultiUAVFig', ...
        'NumberTitle','off', ...
        'MenuBar','none', ...
        'ToolBar','none', ...
        'DefaultaxesCreateFcn','plotedit(gcbf,''promoteoverlay''); ');
    
    ButtonPositionX = 0;
    ButtonPositionY = 1 - ButtonHeight;
    CountColumnButtons = 1;
    for(CountButtons = 1:NumberButtons),
        h=uicontrol('Style', 'pushbutton', ...
            'Units','normalized', ...
            'Position', [ButtonPositionX ButtonPositionY ButtonWidth ButtonHeight], ...
            'String', ButtonsStrings{CountButtons,1},...
            'Callback',char(ButtonsStrings{CountButtons,2}), ...
            'BackgroundColor',str2num(char(ButtonsStrings{CountButtons,3})) ...
            );
        if(CountColumnButtons >= ButtonsPerColumn),
            CountColumnButtons = 1;
            ButtonPositionY = 1 - ButtonHeight;
            ButtonPositionX = ButtonPositionX + ButtonWidth;
        else,
            ButtonPositionY = ButtonPositionY - ButtonHeight;
            CountColumnButtons = CountColumnButtons + 1;
        end;
    end;    %for(CountButtons = 1:NumberButtons),
end      

三、運作結果

【協同任務】基于matlab多無人協同任務配置設定平台【含Matlab源碼 301期】

四、matlab版本及參考文獻

1 matlab版本

2014a

2 參考文獻

[1] 包子陽,餘繼周,楊杉.智能優化算法及其MATLAB執行個體(第2版)[M].電子工業出版社,2016.

[2]張岩,吳水根.MATLAB優化算法源代碼[M].清華大學出版社,2017.

[3]巫茜,羅金彪,顧曉群,曾青.基于改進PSO的無人機三維航迹規劃優化算法[J].兵器裝備工程學報. 2021,42(08)

[4]鄧葉,姜香菊.基于改進人工勢場法的四旋翼無人機航迹規劃算法[J].傳感器與微系統. 2021,40(07)

[5]馬雲紅,張恒,齊樂融,賀建良.基于改進A*算法的三維無人機路徑規劃[J].電光與控制. 2019,26(10)

繼續閱讀