AI-система управления роем дронов
Рой дронов — децентрализованная система из N БПЛА, координирующихся без центрального сервера. Каждый дрон принимает решения на основе локальных наблюдений + коммуникации с соседями. MARL (Multi-Agent RL) + Flocking algorithms + Consensus protocols.
Децентрализованная координация
Почему не централизованное управление: При N=10 централизованный планировщик работает. При N=100 — вычислительно неподъёмно. При N=1000 — невозможно. Децентрализованный рой масштабируется линейно.
Reynolds Flocking (1987) — базовые правила:
- Separation: избегать столкновений с соседями
- Alignment: выравнивать скорость с соседями
- Cohesion: оставаться близко к центру масс рой
RL учится поверх этих правил для задача-специфичного поведения.
MARL для роя
Observation на каждый дрон:
obs_per_drone = {
'own_state': [x, y, z, vx, vy, vz, battery], # 7 значений
'neighbors': [[rel_pos, rel_vel] for n in K_nearest_neighbors], # K×6
'goal': [dx, dy, dz], # направление к цели
'obstacles': lidar_scan # 16-ray LiDAR
}
Centralized Training Decentralized Execution (CTDE):
- Обучение: critic видит глобальное состояние всего роя
- Исполнение: каждый дрон использует только локальное наблюдение
QMIX (Multi-Agent Value Decomposition):
# QMIX: Q_tot = f(Q_1,...,Q_n, state)
# монотоническое смешивание индивидуальных Q-функций
# гарантирует: argmax Q_tot = [argmax Q_i for each i]
class QMIXNet(nn.Module):
def __init__(self, n_agents, state_dim):
super().__init__()
# mixing network
self.hyper_w1 = nn.Linear(state_dim, n_agents * 32)
self.hyper_w2 = nn.Linear(state_dim, 32)
self.hyper_b1 = nn.Linear(state_dim, 32)
self.hyper_b2 = nn.Linear(state_dim, 1)
def forward(self, q_agents, state):
# weights из гиперсети (всегда ≥ 0 для монотонности)
w1 = F.elu(self.hyper_w1(state)).view(-1, q_agents.size(1), 32)
w2 = F.elu(self.hyper_w2(state)).unsqueeze(-1)
# ... смешивание
return q_total
Задачи роя
Покрытие территории (Coverage): N дронов должны равномерно покрыть область S за минимальное время. Reward пропорционален покрытой уникальной площади.
Поиск и обнаружение: Рой ищет цели (люди в завалах, лесные пожары). Информация о находках распространяется через mesh сеть дронов.
Транспортировка: Несколько дронов несут груз совместно. Задача: синхронизировать тягу без явного центрального координатора.
Защита от угроз (Counter-UAV): Часть роя — защитники, отслеживающие и перехватывающие adversarial дроны.
Коммуникация в рое
ограниченный bandwidth: Каждый дрон знает только о K ближайших соседях (K=5–8 типично). Gossip protocol: информация распространяется волнами.
Latency tolerance: Алгоритм должен работать при packet loss 20–30% и latency 50–200 мс.
Communication-aware RL:
# действие включает решение о коммуникации
action_space = spaces.Dict({
'motion': spaces.Box(-1, 1, (3,)), # velocity
'message': spaces.Box(-1, 1, (8,)), # broadcast вектор соседям
})
# observation включает входящие сообщения
obs = concat([own_state, neighbor_messages, sensor_readings])
Gazebo + PX4 для swarm симуляции
# запуск 10 экземпляров PX4 + один Gazebo
./Tools/simulation/gazebo-classic/sitl_multiple_run.sh -n 10 -m iris
# каждый дрон на отдельном MAVLink порту: 14540+i
# управление через python: pymavlink или MAVSDK
import asyncio
from mavsdk import System
async def control_swarm(n_drones):
drones = [System() for _ in range(n_drones)]
await asyncio.gather(*[
drone.connect(f"udp://:1454{i}") for i, drone in enumerate(drones)
])
# параллельный takeoff
await asyncio.gather(*[drone.action.takeoff() for drone in drones])
Избегание столкновений
Velocity Obstacle (VO) / Reciprocal VO (ORCA): Классический алгоритм, гарантирует collision-free при известных скоростях всех дронов. Используется как safety layer поверх RL.
from rl_swarm.safety import ORCASafetyLayer
safety = ORCASafetyLayer(max_speed=5.0, safety_radius=1.5)
raw_velocity = rl_policy.predict(obs)
safe_velocity = safety.compute_safe_velocity(
raw_velocity, drone_position, neighbor_positions, neighbor_velocities
)
Метрики оценки роя
- Coverage rate: % целевой площади покрытой за T минут
- Formation error: среднеквадратичное отклонение от целевого формирования
- Collision rate: столкновений на 100 полётных часов
- Communication load: среднее число сообщений/сек на дрон
- Resilience: % задач выполненных при отказе 20% дронов
Сроки: 20–36 недель
Базовый рой 5–10 дронов в Gazebo для покрытия — 12 недель. Полноценная MARL система с QMIX, communication, safety layer, sim-to-real на 20+ реальных дронах — 28–36 недель.







