多無人機協(xié)同路徑規(guī)劃與動態(tài)防撞方案詳解)
這個問題我在仿真平臺上來來回回折騰了快兩周時間期間踩過不少坑也總結(jié)出一些可以直接用的經(jīng)驗。今天把這套“動態(tài)環(huán)境下多無人機系統(tǒng)的協(xié)同路徑規(guī)劃與防撞”的Matlab仿真方案完整拆給你看包含思路、算法選型、代碼結(jié)構(gòu)和調(diào)參技巧希望對正在做相關(guān)課題或者入門多機協(xié)同的朋友有幫助。開頭先交代一下這個項目做了什么它要在三維空間里同時控制多架無人機讓它們從不同起點飛到各自目標(biāo)點過程中既要繞開靜態(tài)障礙物還要應(yīng)對動態(tài)障礙物——包括其他無人機和隨機出現(xiàn)的移動威脅同時保證機間不發(fā)生碰撞。整套邏輯基于Matlab實現(xiàn)核心包含全局路徑規(guī)劃、局部防撞、多機協(xié)同優(yōu)先級調(diào)度以及動態(tài)環(huán)境建模。適合正在做無人機編隊、機器人路徑規(guī)劃、多智能體協(xié)同控制相關(guān)課題的研究生和工程師參考。1. 問題拆解與整體方案設(shè)計1.1 為什么多機協(xié)同路徑規(guī)劃比單機難那么多單機路徑規(guī)劃本質(zhì)上是“已知起點和目標(biāo)在約束下找一條無碰路徑”成熟的算法非常多A*、RRT、人工勢場都能解決。但一旦升級到多無人機系統(tǒng)問題的性質(zhì)就變了每架無人機的“最優(yōu)”航線可能相互沖突。舉個最簡單的例子兩架無人機同時穿過同一片狹窄空域單獨規(guī)劃出來的最短路徑可能在中點交匯如果不協(xié)商它們就會在交匯處撞上。更麻煩的是動態(tài)環(huán)境下這個問題變成了一個隨時間變化的博弈問題。無人機A每走一步無人機B的可行空間都在變反過來A的決策也壓縮了B的選擇。經(jīng)典的“先規(guī)劃后偏置”思路在低密度場景下夠用但稍微復(fù)雜點就會出現(xiàn)死鎖兩架無人機在通道內(nèi)迎面相遇你往左擠我往右躲誰都沒法通過。振蕩A避讓B的同時B避讓A導(dǎo)致兩者路徑持續(xù)小幅度擺動永遠無法收斂。資源競爭多架無人機搶同一段安全走廊后面準(zhǔn)備的路徑被迫反復(fù)重規(guī)劃計算量爆炸。所以多機協(xié)同路徑規(guī)劃的核心并不是“把單機算法跑多遍”而是要解決機間的沖突消解和動態(tài)環(huán)境的實時響應(yīng)。1.2 我最終選定的技術(shù)路線分層規(guī)劃加反應(yīng)式防撞我做的方案沒有追求一個萬能的規(guī)劃器一站到底而是走了工程上更穩(wěn)妥的分層路線全局規(guī)劃層基于靜態(tài)地圖信息為每架無人機離線規(guī)劃一條引導(dǎo)路徑采用改進的A*算法在代價函數(shù)里加入了轉(zhuǎn)向代價和平滑度約束。局部防撞層無人機沿全局路徑飛行的同時實時感知周圍環(huán)境用人工勢場法做反應(yīng)式避障應(yīng)對規(guī)劃階段沒建模的動態(tài)障礙物。協(xié)同調(diào)度層通過通信拓撲共享各機狀態(tài)和飛行計劃用優(yōu)先級加空域分層的方式解決機間沖突。三層結(jié)構(gòu)各司其職全局層保證“大方向正確”局部層保證“隨時能躲開突發(fā)威脅”協(xié)同層保證“多機在一起不打架”。這套結(jié)構(gòu)的好處是每一層都能獨立測試單獨調(diào)參不容易一出問題就推倒重來。方案選型上我對比過幾類思路這里把結(jié)論也分享一下方案優(yōu)勢劣勢結(jié)論純集中式規(guī)劃全局最優(yōu)性強計算量隨無人機數(shù)量指數(shù)增長實時性差不適合動態(tài)環(huán)境分布式一致性控制可擴展性好需要嚴格的通信同步假設(shè)可以作為研究選題不適合快速出效果全局引導(dǎo) 加 本地防撞本方案兼顧全局與實時性實現(xiàn)難度適中參數(shù)好調(diào)全局路徑不是嚴格最優(yōu)工程實現(xiàn)首選最終主程序流程拆成五個模塊環(huán)境生成器、無人機動力學(xué)模型、全局路徑規(guī)劃器、局部防撞控制器、協(xié)同調(diào)度模塊。下面逐一展開。2. 動態(tài)環(huán)境建模與核心算法解析2.1 動態(tài)環(huán)境到底怎么建仿真的環(huán)境我用的是三維柵格地圖尺寸設(shè)置為200m x 200m x 50m柵格分辨率1m。地圖分為兩層靜態(tài)層隨機生成若干個長方體塊模擬建筑物、雷達站等固定障礙物。這部分用矩陣直接存儲占用信息供全局規(guī)劃器預(yù)加載。動態(tài)層加入兩個類型的動態(tài)威脅。第一類是規(guī)劃中的其他無人機它們在每一幀更新位置相當(dāng)于移動礙障第二類是在環(huán)境中預(yù)設(shè)的一組“巡邏障礙物”按某種軌跡運動模擬非合作的入侵目標(biāo)。動態(tài)障礙物的軌跡建模上我做了一個小設(shè)計讓每個動態(tài)障礙物具備“速度矢量”屬性并且速度矢量在每一小段時間內(nèi)做隨機擾動這樣比單純的勻速直線運動更接近真實場景。實驗時你可以控制擾動幅度用來模擬飛行器受氣流影響時的位置漂移。這里有一個很關(guān)鍵的建模選擇無人機自身的位置模型。我在仿真里用的是簡化二階模型狀態(tài)包括位置向量、速度向量和加速度指令。因為這次重點驗證的是規(guī)劃與防撞邏輯不是飛控氣動細節(jié)二階模型在保真度和計算效率之間平衡得比較好。如果你的課題想精細到動力學(xué)層面可以在狀態(tài)量里加上姿態(tài)角但那就需要配一個內(nèi)環(huán)控制器了。2.2 全局路徑規(guī)劃改進A*的代價函數(shù)全局層用的A本身沒什么神秘關(guān)鍵在于代價函數(shù)的設(shè)計。標(biāo)準(zhǔn)的A只考慮路徑長度但無人機航跡如果不平滑后續(xù)局部層會非常難處理——頻繁切換避障方向和速度指令軌跡會出現(xiàn)鋸齒狀。我在代價函數(shù)里加了兩個量function cost pathCost(node, parent, goal) % 基礎(chǔ)距離代價 distanceCost norm(node.pos - parent.pos); % 轉(zhuǎn)向代價角度變化懲罰 angle computeTurnAngle(parent.pos, node.pos, parent.vel); angleCost wAngle * angle^2; % 安全代價離靜態(tài)障礙物越近代價越高 obstacleCost wObs * max(0, safeDist - minDistToObstacle(node.pos)); cost distanceCost angleCost obstacleCost; end三個權(quán)重的初始取值分別是wAngle 0.3 wObs 0.5 safeDist 3后面調(diào)參階段你會發(fā)現(xiàn)這兩個系數(shù)非常影響路徑風(fēng)格。轉(zhuǎn)向代價能讓路徑早早就偏向“少拐彎”的方向而安全代價避免全局路徑貼著障礙物邊沿走給局部防撞留出充足的反應(yīng)空間。還有一個實操細節(jié)值得說全局路徑不需要每幀重算。我設(shè)置了重規(guī)劃觸發(fā)機制只有當(dāng)檢測到動態(tài)障礙物侵入全局路徑的安全走廊時才在局部地圖中標(biāo)記該位置并重新調(diào)用A*。實驗測下來這種“按需重規(guī)劃”相比逐幀規(guī)劃能省下大約60%的計算負載。2.3 局部防撞人工勢場法加速度障礙法人工勢場法大家應(yīng)該不陌生目標(biāo)點產(chǎn)生引力障礙物產(chǎn)生斥力合力決定無人機的運動方向。它的優(yōu)點是反應(yīng)快、實現(xiàn)簡單但有兩個致命缺陷容易陷入局部極小點以及在高速運動場景下只按距離避障不按速度避障容易和動態(tài)障礙物迎面撞上。我解決這兩個問題的思路是分層處理對于靜態(tài)障礙物用傳統(tǒng)勢場法做位置摩擦保持全局路徑規(guī)劃的連續(xù)性。對于動態(tài)障礙物含其他無人機在勢場基礎(chǔ)上引進了速度障礙法思想不只判斷“你離我遠不遠”還要計算“按當(dāng)前相對速度我們會不會在未來幾秒內(nèi)接近到危險距離”。具體做法是這樣的對其他無人機和動態(tài)威脅取一個預(yù)測時間窗tau 3s計算無人機i在當(dāng)前速度向量下推算出的未來位置以及它和障礙物j的相對速度。如果相對位移和相對速度的交點在威脅半徑內(nèi)則判定存在潛在碰撞此時觸發(fā)速度調(diào)整在速度空間中尋找一個離原期望速度最近、但不會落入碰撞區(qū)域的新速度。這套混合策略比單用勢場法可靠得多。最直觀的表現(xiàn)是動態(tài)障礙物從側(cè)面高速接近時純勢場法往往來不及反應(yīng)因為斥力產(chǎn)生得太晚而速度障礙法在數(shù)百毫秒前就能預(yù)判軌跡交叉提前減速或轉(zhuǎn)向。下面是我在Matlab中實現(xiàn)速度障礙判斷的骨架代碼function vNew avoidDynamicObstacles(vDes, pos, v, obstacles, tau, rSafe) vNew vDes; for j 1:length(obstacles) relPos obstacles(j).pos - pos; relVel v - obstacles(j).vel; % 計算相對運動接近于零的時刻 a dot(relVel, relVel); b 2 * dot(relPos, relVel); c dot(relPos, relPos) - (rSafe obstacles(j).radius)^2; disc b*b - 4*a*c; if disc 0 a 1e-6 t1 (-b - sqrt(disc)) / (2*a); t2 (-b sqrt(disc)) / (2*a); % 存在未來tau秒內(nèi)碰撞風(fēng)險 if (t2 0 t1 tau t1 0) % 從期望速度向量中調(diào)整朝向 vNew projectToSafeVelocity(vDes, relPos, relVel, rSafe); end end end end2.4 多機協(xié)同調(diào)度與防撞機間防撞是這次實驗里最容易“翻車”的部分。我最初采用的思路是讓每架無人機獨立執(zhí)行局部避障結(jié)果上面提到的振蕩和死鎖全都出現(xiàn)了。后來我把協(xié)同調(diào)度拆成兩個策略來執(zhí)行策略一飛行優(yōu)先級調(diào)度。給每架無人機分配一個優(yōu)先級編號當(dāng)兩架無人機進入彼此的通信范圍且同時檢測到?jīng)_突時優(yōu)先級低的那架負責(zé)主動避讓優(yōu)先級高的保持當(dāng)前航向速度不變。這個策略模仿了現(xiàn)實的空中交通規(guī)則簡單但在數(shù)量和密度都較低的場景下非常有效。策略二空域分層。利用無人機在三維空間自由飛行的優(yōu)勢給不同無人機的全局路徑分配不同的高度基準(zhǔn)層。比如高度層間隔設(shè)為12米各機原則上在不同高度走廊飛行。機間距離天然被拉開就算需要變高度也只在特定過渡段進行。這個策略在實際實驗里直接把相撞次數(shù)降低了90%以上。當(dāng)然兩個策略各有局限優(yōu)先級調(diào)度在遇到三架以上無人機協(xié)同沖突時避讓機可能同時收到來自兩架更高優(yōu)先級無人機的避讓指令這時候需要再設(shè)計一個次優(yōu)先級判斷規(guī)則空域分層則不適合超低空密集飛行場景。但對于絕大多數(shù)仿真項目兩個策略已經(jīng)足夠穩(wěn)健了。3. Matlab代碼實現(xiàn)與仿真環(huán)境搭建3.1 為什么選Matlab做這套仿真很多做多智能體的人一上來就選C或Python但就這個項目而言Matlab的優(yōu)勢非常明顯矩陣運算天然契合多機狀態(tài)存儲直接用 N x 3 的矩陣存所有無人機位置運算時整矩陣操作不用寫循環(huán)。可視化方便三維軌跡、障礙物、動態(tài)威脅的繪制只需要幾行代碼調(diào)試時能直觀看到避撞邏輯是否生效。工具箱確實省時間路徑規(guī)劃、優(yōu)化引擎都有現(xiàn)成接口盡管這次我主要用的是自實現(xiàn)算法但需要對比驗證時拉個工具箱函數(shù)很快。當(dāng)然它的缺點我也提一句大規(guī)模仿真比如30架以上無人機的性能下降明顯。一旦到了那個規(guī)模你就要考慮用代碼生成器轉(zhuǎn)到C或者用混合架構(gòu)。但前期邏輯驗證階段Matlab還是最能讓你把注意力集中在算法本身上的環(huán)境。3.2 仿真主循環(huán)與模塊劃分代碼的組織結(jié)構(gòu)如下simulation/ |-- initSimulation.m # 初始化參數(shù)、地圖、無人機狀態(tài) |-- createWorldMap.m # 生成靜態(tài)障礙物與動態(tài)障礙物軌跡 |-- aStarGlobalPlanner.m # 全局路徑規(guī)劃 |-- potentialFieldController.m # 局部靜態(tài)避障 |-- velocityObstacleAvoidance.m # 動態(tài)避障 |-- cooperativeScheduler.m # 優(yōu)先級調(diào)度與沖突消解 |-- updateDynamics.m # 無人機運動模型更新 |-- visualizeSimulation.m # 實時繪制 |-- main.m # 主循環(huán)主循環(huán)的核心框架如下% main.m 核心循環(huán) for t 0:dt:T_total % 1. 更新動態(tài)障礙物位置 world updateDynamicObstacles(world, t); % 2. 對每架無人機依次計算速度指令 for i 1:N % 全局路徑跟蹤 [goalRef, path] planner.getReference(agents(i), world.map3D); % 局部靜態(tài)防撞 vPotential potentialFieldController(agents(i).pos, goalRef, world.staticObs); % 動態(tài)防撞含其他無人機與移動威脅 dynamicObs [world.movingObstacles, agents(1:N ~ i)]; vSafe velocityObstacleAvoidance(vPotential, agents(i), dynamicObs, tau, rSafe); % 協(xié)同調(diào)度 vFinal cooperativeScheduler(agents(i), allAgents, vSafe, priority(i)); % 3. 更新狀態(tài) agents(i).vel smoothAccel(agents(i).vel, vFinal, maxAccel); agents(i).pos agents(i).pos agents(i).vel * dt; end % 4. 碰撞檢測與統(tǒng)計 checkCollisions(agents, world); % 5. 可視化 if mod(t, plotInterval) dt visualizeSimulation(agents, world, paths, t); end end注意主循環(huán)里的執(zhí)行順序先算局部靜態(tài)避障再做動態(tài)避障最后才是協(xié)同調(diào)度。順序反過來的話協(xié)同層的速度指令會被局部層覆蓋優(yōu)先級調(diào)度就形同虛設(shè)了。3.3 仿真場景配置與參數(shù)初始化初始化腳本里我定義了這樣一組基準(zhǔn)參數(shù)你可以直接抄去用無人機數(shù)量5架飛行區(qū)域200m x 200m x 50m無人機巡航速度10m/s最大加速度5m/s^2安全距離3m機間通信距離50m全局重規(guī)劃觸發(fā)半徑10m速度障礙預(yù)測時間窗3s無人機起點和目標(biāo)點我設(shè)置成交叉路線這樣可以逼出急需要協(xié)同的場景。比如2號機和4號機的連線在空間上近似垂直交叉如果不對它們做調(diào)度原路徑會在中點沖突。在俯瞰的平面圖上你能看到全局路徑基本會沿著障礙物邊緣的緩沖帶繞行這就是安全代價起的作用。如果沒有把安全代價加進A*全局路線的某些段會緊貼障礙物邊界一旦遇上動態(tài)障礙物局部避障緩沖區(qū)不足就會產(chǎn)生劇烈轉(zhuǎn)向。3.4 動態(tài)障礙物仿真方法動態(tài)障礙物的實現(xiàn)我給幾個常用模式你按需選擇固定軌跡巡邏型障礙物沿預(yù)設(shè)軌跡做往返或圓周運動。適合測試局部避障是否穩(wěn)定因為軌跡可預(yù)測容易對照分析。隨機擾動型在軌跡基準(zhǔn)上疊加隨機速度偏移模擬非合作物體的不可預(yù)測行為。這種更貼近真實戰(zhàn)場環(huán)境也讓全局重規(guī)劃觸發(fā)頻率變高。針對性突襲型在仿真進行到設(shè)定時間時突然從側(cè)向高速切入無人機航線。我在最終展示版本里加了這類型用來體現(xiàn)動態(tài)防撞的必要性。動態(tài)障礙物的半徑我設(shè)置為1.5m速度和無人機巡航速度相當(dāng)這樣速度障礙法會在預(yù)測時間窗內(nèi)提前約兩秒觸發(fā)避讓路徑偏移幅度也比較容易觀察。4. 參數(shù)調(diào)優(yōu)與常見問題排查4.1 關(guān)鍵參數(shù)的影響曲線與調(diào)參順序代碼跑通只是第一步想把仿真效果調(diào)得穩(wěn)定參數(shù)比算法更花時間。我給出一張關(guān)鍵參數(shù)對照表這些都是實測中影響顯著的參數(shù)推薦初始值偏小的影響偏大的影響全局轉(zhuǎn)向代價權(quán)重0.3路徑鋸齒狀局部層壓力大路徑過于平滑繞路明顯全局安全代價權(quán)重0.5全局路徑貼障礙物過近全局路徑過度保守飛行距離變長速度障礙預(yù)測時間窗3s避障反應(yīng)過晚易撞避障過早路徑抖動頻繁局部斥力系數(shù)1.2障礙物附近減速不明顯無人機被“彈開”路徑震蕩機間安全距離3m機間距離過近氣流干擾明顯空域利用率降低通信距離50m超距離無人機無法協(xié)同對通信模型要求過高調(diào)參順序上我建議按“全局層 → 局部層 → 協(xié)同層”來。先不管動態(tài)威脅只調(diào)A*的權(quán)重讓單機路徑足夠光滑然后加動態(tài)障礙物調(diào)勢場系數(shù)和預(yù)測時間窗最后才把多機協(xié)同開起來調(diào)優(yōu)先級邏輯。如果你一上來就在多機動態(tài)環(huán)境里調(diào)參現(xiàn)象很難歸因到具體模塊。有一點特別想強調(diào)勢場法的斥力系數(shù)極端影響穩(wěn)定性。斥力過小時無人機貼著障礙物飛速度障礙法介入頻繁軌跡整體呈鋸齒狀斥力過大時無人機會在距離障礙物還很遠的地方就被彈開一旦多個障礙物斥力場疊加會出現(xiàn)繞路甚至震蕩。我調(diào)試時反復(fù)對比了幾組系數(shù)最終鎖定了讓軌跡“略微壓向障礙物但不進入危險圈”的中間值1.2。4.2 常見的五類問題與排查思路問題一兩架無人機在路徑中點持續(xù)振蕩誰也過不去。這是協(xié)同調(diào)度缺失的典型癥狀。第一反應(yīng)不要調(diào)避障參數(shù)而是先檢查優(yōu)先級是否真正生效。我遇到過一次優(yōu)先級編號已經(jīng)分配但協(xié)同調(diào)度模塊里漏了把低優(yōu)先級無人機從高優(yōu)先級無人機的障礙物列表中排除導(dǎo)致高優(yōu)先級無人機也在避讓低優(yōu)先級無人機兩邊互讓就振蕩了。修正后高優(yōu)先級無人機保持原計劃低優(yōu)先級無人機主動繞行問題立刻解決。問題二動態(tài)障礙物從側(cè)面快速經(jīng)過時無人機和大障礙物距離突然拉近避讓動作太猛。原因通常是預(yù)測時間窗太短。速度障礙法起作用的前提是預(yù)測時間窗tau內(nèi)能看到足夠長的軌跡延長段tau太小等于臨時抱佛腳。把tau從3s調(diào)到5s后側(cè)向威脅的避讓明顯平緩。但tau也不能無限調(diào)大太長會讓無人機對遠處本不沖突的障礙物也提前避讓造成不必要的路徑偏移。問題三全局路徑重規(guī)劃之后局部路徑出現(xiàn)明顯的折線。多數(shù)情況是重規(guī)劃觸發(fā)時使用的路徑點沒做插值平滑。A*輸出的節(jié)點密度不高直接作為航跡參考會讓局部層對每個節(jié)點都做一次“拉直”動作。我加了一步簡單的三次樣條插值把相鄰路徑節(jié)點之間補成曲線后續(xù)局部控制平滑度明顯改善。問題四增加無人機數(shù)量后低優(yōu)先級無人機的避障指令頻繁切換方向。這說明協(xié)同調(diào)度中的“多機沖突”解析沒有處理好。當(dāng)一架低優(yōu)先級無人機同時面對兩架高優(yōu)先級無人機時它會在兩個避讓方向之間反復(fù)橫跳。我最終的處理方式是讓低優(yōu)先級無人機選擇“調(diào)整量最小的方向”一旦選定保持至少2s不變待兩架高優(yōu)先級無人機都通過后再恢復(fù)。加入“最小保持時間”后航線抖動問題消失。問題五仿真畫面掉幀嚴重大量時間消耗在繪圖函數(shù)上。Matlab的繪圖確實比計算慢得多。我的做法是把可視化頻率降低不是每幀都繪制而是每10幀繪制一次同時把點云和障礙物圖形對象句柄在初始化時創(chuàng)建之后只更新xdata和ydata屬性而不是每幀重新plot。這樣調(diào)整后仿真速度提升了近4倍。如果你還需要更快可以考慮把仿真過程分成“無界面快速運行動態(tài)數(shù)據(jù)記錄”和“回放模式”兩段執(zhí)行。4.3 調(diào)試利器碰撞日志與軌跡回放調(diào)試多機系統(tǒng)最忌只盯實時畫面因為動態(tài)過程轉(zhuǎn)瞬即逝很難在發(fā)生的瞬間看清是哪一步出了問題。我寫了一個碰撞日志模塊每當(dāng)檢測到潛在碰撞風(fēng)險時記錄當(dāng)前時間、兩機/機障距離、各自速度向量、正在執(zhí)行的規(guī)劃器狀態(tài)。這樣每輪仿真結(jié)束通過查看日志就能準(zhǔn)確還原出“在什么時間、哪兩架飛機、因為什么原因距離最近”。另外建議把所有無人機位置向量按時間步存成矩陣仿真結(jié)束后做一次軌跡回放?;胤艜r用暫停鍵逐幀檢查你會發(fā)現(xiàn)很多實時觀察時注意不到的規(guī)律性沖突。我最終提交方案里的幾個復(fù)雜bug都是靠回放定位出來的。5. 心得總結(jié)與后續(xù)擴展方向回看這輪實驗我最大的體會是多無人機協(xié)同路徑規(guī)劃這個題目算法層面的創(chuàng)新點固然重要但真正決定一個方案能不能實際跑的往往是工程細節(jié)比如模塊間執(zhí)行順序、參數(shù)失效時的異?,F(xiàn)象特征、全局路徑和平滑軌跡之間的耦合關(guān)系。這些內(nèi)容論文里不會寫但恰恰是Lab和項目中最花時間的部分。再分享一個本人在實踐中驗證過的小技巧在協(xié)同調(diào)度模塊中優(yōu)先級不要固定不變而是在任務(wù)執(zhí)行過程中做一次動態(tài)調(diào)整。比如某架無人機因為初始位置較差不得不大幅繞路長期處于低優(yōu)先級會讓它頻繁處于被動避讓狀態(tài)。這時候根據(jù)“剩余路徑長度”加一個動態(tài)優(yōu)先級補償讓繞路多的無人機適度提高優(yōu)先級整個機群的完成時間可以縮短10%-15%。當(dāng)然這樣的調(diào)整機制必須配合嚴格的安全約束否則高優(yōu)先級無人機數(shù)量一多低優(yōu)先級會陷入無限避讓。后續(xù)如果要繼續(xù)深入還有三個方向可以考慮一是把編隊構(gòu)型保持和路徑規(guī)劃結(jié)合起來讓無人機群以固定隊形飛行但遇到障礙物時自動分散通過后再恢復(fù)隊形二是在速度障礙法基礎(chǔ)上引入更復(fù)雜的動力學(xué)約束讓規(guī)劃指令直接貼近真實飛控需求三是加入隨機風(fēng)場模型在速度障礙的預(yù)測計算中疊加風(fēng)的擾動項。這三個方向我都做過預(yù)研每個都可以再撐起一篇完整的方案。希望這套基于Matlab的實現(xiàn)思路能幫你在多無人機協(xié)同路徑規(guī)劃上少走點彎路。如果調(diào)試過程中遇到“詭異”的振蕩和死鎖先別急著堆算法按上面的排查順序逐層檢查多半能定位到一個很具體的小問題上。歡迎在實際運行后回來交流參數(shù)表現(xiàn)。