Überblick über den Konfliktlösungsalgorithmus zur UAV-Pfadplanung
Da sich unbemannte Luftfahrzeuge (UAVs) vom Einzelmaschinenbetrieb zur Cluster-Kollaboration weiterentwickeln, sind Pfadkonflikte zu einem unvermeidlichen Kernproblem geworden, wenn mehrere UAVs Aufgaben im selben Luftraum ausführen. Konfliktlösung bezieht sich auf die Anpassung der Flugbahn oder Entscheidungsfindung jeder Drohne, um den Konfliktzustand zu beseitigen und die Mission weiterhin abzuschließen und gleichzeitig die Flugsicherheit zu gewährleisten. In diesem Artikel werden die gängigen Algorithmus-Frameworks zur Konflikterkennung und -lösung systematisch sortiert, von geometrischen Methoden bis hin zu Deep Reinforcement Learning, und die Kernideen, Vor- und Nachteile sowie die Entwicklung jeder Technologie untersucht.
1. Definition und Klassifizierung von Konflikten
1.1 Was ist ein Pfadkonflikt?
In einem Multi-UAV-System bezieht sich Konflikt auf einen Zustand, in dem zwei oder mehr UAVs gleichzeitig dieselbe räumliche Position (oder weniger als einen sicheren Isolationsabstand) in der Raum-Zeit-Dimension einnehmen. Formell:
Darunter ist
1.2 Konfliktklassifizierung
| Geben Sie | ein Beschreibung | Typisches Szenario |
|---|---|---|
| Weltraumkonflikt | Flugbahnen schneiden sich im Raum | Sich kreuzende Routen, gegensätzliche Flüge |
| Zeit- und Raumkonflikt | Trajektorien überschneiden sich in der Zeitdimension | Betreten Sie nacheinander denselben Luftraum |
| Geschwindigkeitskonflikt | Relativgeschwindigkeit überschreitet Sicherheitsschwelle | Aufholszenario |
| Hoher Konflikt | Konflikt in vertikaler Richtung | Hebekreuzung |
| Dynamische Konflikte | Konflikte durch sich bewegende Hindernisse (andere Luftfahrzeuge) | Begegnungen aus der Luft |
1.3 Konfliktmetriken
- Zeit bis zum Konflikt: Sagen Sie die verbleibende Zeit bis zum Auftreten eines Konflikts voraus
- Konfliktwahrscheinlichkeit: Konfliktrisikobewertung unter Berücksichtigung der Unsicherheit
- Mindestabstand: Der kürzeste Abstand zwischen Flugbahnen
- Lösungszeit: die Zeit, die erforderlich ist, damit die Lösungsaktion wirksam wird
2. KonflikterkennungsalgorithmusDie Konflikterkennung ist ein vorläufiger Schritt zur Konfliktlösung und ihr Kern ist die Konfliktvorhersage – die Feststellung, ob ein Konflikt auftreten wird, bevor er tatsächlich auftritt.
2.1 Geometrische Vorhersagemethode
Die intuitivste Methode ist die räumliche Erkennung auf Basis geometrischer Berechnungen:
import numpy as np
def detect_conflict_2D(traj_i, traj_j, safe_radius=5.0):
"""
检测两条轨迹是否发生空间冲突
traj_i, traj_j: shape (N, 3) 的轨迹数组,每行为 (x, y, z)
safe_radius: 安全隔离距离 (m)
返回: (是否冲突, 最小间隔距离, 冲突时间点索引)
"""
min_dist = float('inf')
conflict_time = -1
for t in range(len(traj_i)):
dist = np.linalg.norm(traj_i[t] - traj_j[t])
if dist < min_dist:
min_dist = dist
if dist < safe_radius:
conflict_time = t
is_conflict = min_dist < safe_radius
return is_conflict, min_dist, conflict_time
2.2 Geschwindigkeitshindernis
Velocity Obstacle (VO) ist die klassischste Methode zur Konflikterkennung und -vorhersage im Robotikbereich. Es wurde von Fioretti & Fraichard (1999) in den UAV-Bereich eingeführt.
Kernidee: Konstruieren Sie einen „verbotenen Bereich“ im Geschwindigkeitsraum. Liegt der aktuelle Geschwindigkeitsvektor der Drohne in diesem Bereich, kommt es mit Sicherheit zu einem Konflikt.
Dabei ist
def velocity_obstacle(p_i, v_i, p_j, v_j, r_safe=5.0):
"""
计算第 i 架 UAV 的速度障碍区域
p_i, p_j: 位置向量
v_i, v_j: 速度向量
r_safe: 安全半径
"""
rel_pos = p_j - p_i
rel_vel = v_i - v_j
dist = np.linalg.norm(rel_pos)
if dist == 0:
return None
# 相对位置的夹角(安全圆柱的视角)
theta = np.arcsin(r_safe / dist)
# 障碍扇区的两条边向量
dir_pos = rel_pos / dist
perp_dir = np.array([-dir_pos[1], dir_pos[0]])
# 两条边界速度向量
v_left = v_j + np.linalg.norm(v_j) * (np.cos(theta) * dir_pos + np.sin(theta) * perp_dir)
v_right = v_j + np.linalg.norm(v_j) * (np.cos(theta) * dir_pos - np.sin(theta) * perp_dir)
return v_left, v_right # VO 的两条边界
def is_in_vo(v_i, v_left, v_right, v_j):
"""判断速度 v_i 是否落在 VO 区域内"""
# 转换到相对坐标系
rel_v = v_i - v_j
rel_left = v_left - v_j
rel_right = v_right - v_j
# 检查 rel_v 是否在 rel_left 和 rel_right 之间
cross_left = np.cross(rel_left, rel_v)
cross_right = np.cross(rel_right, rel_v)
return np.sign(cross_left) == np.sign(cross_right)
2.3 Unsicherheitsbewusste Konflikterkennung
In tatsächlichen Systemen enthalten Standortinformationen häufig Unsicherheiten wie GPS-Fehler und Sensorrauschen. Probabilistische Konflikterkennung Führt die Wahrscheinlichkeitsverteilung in die Konfliktbeurteilung ein:
wobei
- Monte-Carlo-Stichprobe: Statistik der Konfliktverhältnisse nach Stichprobe einer großen Anzahl von Wahrscheinlichkeitsverteilungen
- Linear Validation Tool (LVT): Analytische Approximation von Wahrscheinlichkeitskonflikten unter der Annahme einer Gaußschen Verteilung
- Stochastic Reachable Set: Mengendarstellung basierend auf der stochastischen Kontrolltheorie
3. Konfliktlösungsalgorithmus
3.1 Geometrische Methode
3.1.1 Rate Obstacle-Methode (Rate Obstacle / VO-Korrektur)
VO-basierte Eliminierungsstrategie: Finden Sie eine Zielgeschwindigkeit
def vo_resolution(p_i, v_i, p_j, v_j, v_max=20.0, r_safe=5.0):
"""
基于 Velocity Obstacle 的冲突消解
返回满足速度约束且避开 VO 的新速度
"""
vo = velocity_obstacle(p_i, v_i, p_j, v_j, r_safe)
if vo is None:
return v_i
v_left, v_right = vo
# 所有候选速度(速度空间中均匀采样)
best_v = v_i
min_dist_to_vo = float('inf')
for speed in np.linspace(0, v_max, 20):
for angle in np.linspace(0, 2*np.pi, 36):
v_candidate = speed * np.array([np.cos(angle), np.sin(angle)])
# 跳过落在 VO 内的速度
if is_in_vo(v_candidate, v_left, v_right, v_j):
continue
# 选择最接近原始速度方向且最"远离"VO 的速度
dist_to_original = np.linalg.norm(v_candidate - v_i)
# 到 VO 边界的距离
dist_to_vo = min(
np.linalg.norm(v_candidate - v_left),
np.linalg.norm(v_candidate - v_right)
)
# 优化目标:尽量接近原速度,同时远离 VO
score = dist_to_vo - 0.5 * dist_to_original
if dist_to_vo > min_dist_to_vo and dist_to_vo > 1.0:
min_dist_to_vo = dist_to_vo
best_v = v_candidate
return best_v
3.1.2 Methode des künstlichen Potenzialfeldes (Künstliches Potenzialfeld)
Stellen Sie sich Drohnen als geladene Teilchen vor, die sich in einem „Potentialfeld“ bewegen:
- Zielpunkt erzeugt Anziehung
- Hindernisse/andere Drohnen erzeugen abstoßende Kraft
Unter ihnen:
Vorteile: Schnelle Berechnung, geeignet für Echtzeitsteuerung Nachteile: Leicht in lokale Minima zu fallen (zwei Drohnen werden oszillieren, wenn sie sich nicht gegenseitig „schubsen“ können)
Verbesserungsanweisungen:
- Potenzialfeldformung: Passen Sie die Form des Potenzialfelds an, um lokale Minima zu vermeiden
- Mehrere virtuelle Potenzialfelder: Führen Sie virtuelle Hindernisse ein, um Wege um Fallenbereiche herum zu leiten
- Hybridmethode: kombiniert mit A* oder RRT*, Nutzung des Potenzialfeldes zur lokalen Feinabstimmung
3.1.3 Voronoi-Diagramm-MethodeDas Voronoi-Diagramm wird verwendet, um den Raum in mehrere Bereiche zu unterteilen, und jede Drohne fliegt innerhalb ihrer Voronoi-Einheit, wodurch sichergestellt wird, dass der Abstand zu anderen Drohnen immer größer ist als ihr Abstand zur Voronoi-Grenze:
- Konstruieren Sie das Voronoi-Diagramm des aktuellen Augenblicks in Echtzeit
- Jede Drohne wählt einen Wegpunkt in der Nähe des am weitesten entfernten Punkts (optimaler Punkt) ihrer Voronoi-Einheit
- Bewegen Sie sich in Richtung des Wegpunkts und wechseln Sie zum neuen Voronoi-Pfad, wenn ein Konflikt erkannt wird.
from scipy.spatial import Voronoi
import numpy as np
def voronoi_resolution(positions, v_i, p_i, v_max=20.0):
"""
基于 Voronoi 图的多机冲突消解
positions: 所有无人机位置 (N, 2)
"""
vor = Voronoi(positions)
# 找到当前无人机 i 的 Voronoi 单元
region_idx = vor.point_region[np.where(vor.point_region == vor.point_region[0])[0][0]]
# 简化的 Voronoi 路径选择:取 Voronoi 顶点的方向
vertices = [vor.vertices[v] for v in vor.regions[region_idx] if v >= 0]
if not vertices:
return v_i
# 选择最接近原始速度方向的安全顶点
best_dir = v_i / np.linalg.norm(v_i)
best_vertex = None
max_projection = -float('inf')
for v in vertices:
direction = v - p_i
if np.linalg.norm(direction) < 0.01:
continue
direction = direction / np.linalg.norm(direction)
projection = np.dot(direction, best_dir)
if projection > max_projection:
max_projection = projection
best_vertex = v
if best_vertex is None:
return v_i
return np.clip(best_vertex - p_i, -v_max, v_max)
3.2 Optimierungsmethode
3.2.1 Gemischte ganzzahlige lineare Programmierung (MILP)
MILP ist ein klassisches Framework, das die Trajektorienplanung mit mehreren UAVs als mathematisches Optimierungsproblem formalisiert und im UAV-Bereich von Schouwenaars et al. entwickelt wurde. (2001).
Kernidee: Die kontinuierliche Flugbahn wird durch stückweise Polynome oder feste Wegpunktsequenzen dargestellt, Konfliktbeschränkungen und Sicherheitsbeschränkungen werden durch lineare Ungleichungen ausgedrückt und binäre ganzzahlige Variablen werden eingeführt, um die Schaltlogik der Flugsegmente darzustellen:
Einschränkungen:
- Kinematische Einschränkungen:
, - Einschränkungen zur Konfliktvermeidung:
- Wenn
, dann ist die entsprechende Binärvariable - ODER-Beschränkung einführen:
(zwingt, dass alle 0 sind, d. h. kein Konflikt)
- Wenn
- Einschränkungen bei der Aufgabenerledigung:
# 概念性 MILP 冲突约束(伪代码)
"""
minimize: sum_i sum_k (v_i,k - v_pref_i,k)^2
subject to:
for each UAV i, segment k:
p_i,k+1 = p_i,k + v_i,k * dt # 运动学
norm(v_i,k) <= v_max # 速度限幅
norm(a_i,k) <= a_max # 加速度限幅
for each UAV pair (i,j), segment k:
norm(p_i,k - p_j,k)^2 >= d_safe^2 OR delta_ik = 0
M * delta_ik >= norm(p_i,k - p_j,k)^2 - d_safe^2
sum_j delta_jk <= 0 # 所有 delta 必须为 0
"""
```**Vorteile**: Globale optimale Lösung, die sicherstellt, dass harte Einschränkungen erfüllt werden
**Nachteile**: Die Rechenkomplexität von MILP-Lösern (CPLEX, Gurobi) steigt exponentiell mit der Anzahl der Drohnen, was es schwierig macht, Szenarien mit mehr als 5–10 Drohnen in Echtzeit zu lösen
#### 3.2.2 Dynamischer Fensteransatz (DWA)
DWA, entlehnt aus der Roboterbewegungsplanung, tastet den Geschwindigkeitsraum $(v, \omega)$ ab und bewertet jede Kandidatengeschwindigkeit:
1. **Flugbahn zum Ziel**
2. **Kollisionssicherheit** (beurteilt durch Simulation kurzfristiger Flugbahnen)
3. **Geschwindigkeitserreichbarkeit**
```python
def dwa_resolution(p_i, v_i, v_goal, obstacles,
v_max=3.0, v_min=0.0,
a_max=2.0, dt=0.1, predict_time=2.0,
safe_radius=1.5):
"""
Dynamic Window Approach 用于 UAV 冲突消解
"""
# 1. 构建动态窗口(当前可达速度集)
Vw = []
for v in np.arange(max(0, v_i[0] - a_max*dt), min(v_max, v_i[0] + a_max*dt), 0.1):
for w in np.arange(v_i[1] - a_max*dt, v_i[1] + a_max*dt, 0.1):
Vw.append((v, w))
best_score = -float('inf')
best_v = v_i
for (v, w) in Vw:
# 2. 预测轨迹
traj = []
p_pred = p_i.copy()
v_pred = np.array([v, w])
for t in np.arange(0, predict_time, dt):
traj.append(p_pred.copy())
p_pred = p_pred + v_pred * dt
# 3. 碰撞检测
collision = False
for p_obs in obstacles:
for p_t in traj:
if np.linalg.norm(p_t - p_obs) < safe_radius:
collision = True
break
if collision:
break
if collision:
continue
# 4. 评分函数
score_heading = np.linalg.norm(p_pred - v_goal) # 越小越好
score_velocity = v # 越大越好(偏好高速)
score_clearance = min([np.linalg.norm(p_t - p_obs)
for p_obs in obstacles for p_t in traj])
total_score = (
2.0 * (1.0 / (score_heading + 1e-6)) +
1.0 * score_velocity +
0.5 * score_clearance
)
if total_score > best_score:
best_score = total_score
best_v = np.array([v, w])
return best_v
3.2.3 Distributed Model Predictive Control (DMPC)
DMPC ist eine gängige Methode für große Multi-UAV-Schwärme, bei denen jedes UAV:
- Erstellen Sie ein lokales Vorhersagemodell basierend auf lokalen Informationen und Nachbarkommunikation
- Lösen Sie lokale Optimierungsprobleme im endlichen Zeitbereich
- Führen Sie nur den ersten Steuerungsschritt durch und führen Sie dann eine fortlaufende Neuoptimierung durch
Kernkonsistenzbeschränkungen:
Dabei ist
Der Hauptvorteil von DMPC ist die Skalierbarkeit: Jede Drohne muss nur mit ihren Nachbarn kommunizieren, und der Rechenaufwand steigt nicht exponentiell mit der Anzahl globaler Drohnen.
3.3 Methode zur Zusammenarbeit mit mehreren Maschinen
3.3.1 Konsistenzalgorithmus basierend auf der Graphentheorie
Modellieren Sie das Multi-UAV-System als Graph
- Knoten
repräsentiert die Drohne - Kante
stellt die Kommunikationsverbindung dar
Konsensprotokoll:
\forall i, \quad \mathbf{s}i^* \in \arg\min{\mathbf{s}_i \in \mathcal{S}_i} \mathcal{J}_i(\mathbf{s}i^*, \mathbf{s}{-i}^*)
\mathcal{L} = -\mathbb{E}{(s,a) \sim d{\pi^*}}[\log \pi_\theta(a \mid s)]
\forall \omega \in \mathbb{W}: \quad \mathbf{x}[k+1] = A\mathbf{x}[k] + B\mathbf{u}[k] + E\omega[k]