Главный эффект: стоимость уничтожения одного дрона падает до тысяч или десятков тысяч рублей (пулемёт + свой FPV + интеллект).

Три режима адаптивной ПВО: как математический переключатель помогает сбивать дроны в городской застройке и лесополосах
Версия 2.0 (полная, с кодом и методиками)
Аннотация
В условиях городской застройки и лесистой местности традиционные средства ПВО сталкиваются с серьёзными ограничениями: радар не видит низколетящие малые дроны на фоне зданий и деревьев, оптика слепнет от бликов, дыма и веток, а РЭБ лишь переводит дрон в автономный режим.
Мы предлагаем систему с адаптивным переключателем между тремя режимами работы:
- M₁ — «Аналитик» (оценка скрытых параметров);
- M₂ — «Стрелок» (точное поражение с контуром стабилизации);
- M₃ — «Адаптер» (адаптация и обучение в реальном времени).
В статье разберём реальный сценарий боя у пятиэтажки и лесополосы с цифрами энтропии, ошибки слежения и правилами выбора оружия. В конце — полный код симулятора и методика расчёта энтропии по трём акустическим датчикам.
Исходная обстановка
Ландшафт:
- жилой квартал (пятиэтажки, сараи, СНТ);
- за домами — лесополоса, воронки, старые окопы.
Противник:
- рой FPV‑дронов (4 шт.) + базовая станция;
- тактика: вылет из‑за зданий, ложные цели, скрытие в кронах.
Наши средства:
- 2 акустические станции (пеленгация по звуку);
- 1 оптическая камера с тепловизором;
- 1 зенитный пулемёт (управляемый сервоприводами);
- 3 своих FPV‑дрона‑перехватчика;
- 1 станция РЭБ ближнего радиуса.
Задача: сбить все вражеские дроны с минимальным расходом боеприпасов и своих бортов.
Сценарий в реальном времени (0–45 секунд)
Этап 1: t = 0–8 с — неопределённость, режим M₁ («Аналитик»)
Ситуация. Акустика засекла шум винтов. Источников несколько, сигнал переотражается от зданий. Непонятно:
- сколько дронов;
- откуда летят;
- это FPV или разведчик?
Расчёт энтропии H(t)H(t). Используем формулу Шеннона для распределения вероятностей направлений:
H(t)=−∑pilog2piH(t)=−∑pilog2pi
Вероятности направлений (по методу максимальной энтропии):
|
Направление |
Север (лес) |
Юг (дома) |
Запад (пустырь) |
Низ (окопы) |
|
P(направление)P(направление) |
0,55 |
0,30 |
0,10 |
0,05 |
Подставляем значения:
H=−(0,55log20,55+0,30log20,30+0,10log20,10+0,05log20,05)≈1,45 битH=−(0,55log20,55+0,30log20,30+0,10log20,10+0,05log20,05)≈1,45 бит
Порог: H>0,7H>0,7 → включаем режим M₁.
Действия M₁:
- DBN (байесовская сеть) строит вероятностную карту появления дронов;
- отдаётся команда: наблюдать сектор «лес» (вероятность 0,55) и подняться оптикой на уровень 3‑го этажа (откуда обычно выходят FPV).
Результат через 5 секунд: оптика ловит первый дрон у кромки леса.
Этап 2: t = 8–17 с — дрон в прямой видимости, режим M₂ («Стрелок»)
Ситуация. Дрон типа FPV летит прямо на пулемётную точку:
- высота — 8 м;
- скорость — 12 м/с;
- дальность — 450 м.
Метрики:
- энтропия H=0,2H=0,2 (направление известно);
- ошибка прогноза e(t)=0,05e(t)=0,05 (траектория предсказуема);
- плотность датчиков κ=0,9κ=0,9 (оптика + акустика работают).
Правило выбора: e<0,15e<0,15, κ>0,7κ>0,7, H<0,4H<0,4 → режим M₂.
Действие M₂. Задействуем ПИД‑регулятор наведения пулемёта:
u(t)=Kp⋅e(t)+Ki∫e dt+Kddedtu(t)=Kp⋅e(t)+Ki∫edt+Kddtde
где:
- Kp=0,6Kp=0,6 — пропорциональный коэффициент;
- Ki=0,2Ki=0,2 — интегральный коэффициент;
- Kd=0,1Kd=0,1 — дифференциальный коэффициент;
- e(t)e(t) — угловая ошибка наведения.
Через 3 секунды пулемёт берёт упреждение — очередь из 20 патронов сбивает дрон на дальности 150 м.
Результат: один дрон уничтожен, потрачено 20 патронов (экономично).
Этап 3: t = 18–30 с — дрон пропал за домом, режим M₃ («Адаптер»)
Ситуация. Осталось 3 дрона. Один нырнул за пятиэтажку (зона радиотени):
- пулемёт не видит цель;
- РЭБ бесполезна (дрон перешёл на автопилот по последней координате).
Метрики:
- ошибка прогноза e(t)e(t) резко выросла до 0,5 (прогноз — прямая линия, факт — пропал);
- κκ упала до 0,4 (оптика потеряла цель).
Правило выбора: e>0,3e>0,3 или κ<0,5κ<0,5 → режим M₃.
Действие M₃. Агент DRL (обученная политика) пробует последовательность:
- Выпустить свой FPV‑дрон в обход дома с другой стороны.
- Анализировать телеметрию (тепловизионный канал своего дрона).
- Как только чужой дрон найден — команда своему дрону на таран.
Награда:
- уничтожение чужого дрона: +100;
- потеря своего дрона: −20;
- пустая трата времени: −1 за секунду.
Агент выбирает эту тактику, потому что в симуляторе она дала 76 % успеха против «ушедшего за угол» дрона.
Результат: свой дрон через 9 секунд находит и таранит вражеский FPV. Потеря своего перехватчика, но цель уничтожена.
Этап 4: t = 30–45 с — оставшиеся два дрона меняют тактику (эффект адаптации)
Ситуация. Противник заметил: «по прямым целям стреляет пулемёт, за угол посылает встречный дрон». Дроны начинают маневрировать хаотично, подныривая в воронки и скрываясь в ветвях. Стандартные методы сбоят — ошибка прогноза e(t)e(t) скачет от 0,2 до 0,5.
Переключатель переходит в гибридный режим (M₂ + M₃ с весами):
u=w2uПИД+w3uDRLu=w2uПИД+w3uDRL
Веса рассчитываются так:
w2=exp(−βe2)exp(−βe2)+exp(−βσDL),w3=1−w2w2=exp(−βe2)+exp(−βσDL)exp(−βe2),w3=1−w2
где σDLσDL — дисперсия действий DRL‑агента (мера уверенности).
При e=0,4e=0,4 веса получаются w2≈0,3w2≈0,3, w3≈0,7w3≈0,7 — действует в основном адаптер.
Адаптер пробует неожиданное действие: применить РЭБ не на глушение, а на имитацию ложной базовой станции — чтобы перехватить управление дроном. С первой попытки не выходит, со второй один дрон теряет связь и ложится в воронку. Второй дрон добит пулемётом, когда на секунду вылетает из‑за дерева (ПИД успевает).
Сводная таблица: какой режим когда работает
|
Режим |
Условия (метрики) |
Средства |
Ресурс |
Ошибка поражения |
|
M₁ («Аналитик») |
H>0,7H>0,7 или κ<0,5κ<0,5 |
DBN, акустика, карта укрытий |
процессор, время |
не поражает, только разведка |
|
M₂ («Стрелок») |
e<0,15e<0,15, κ>0,7κ>0,7, H<0,4H<0,4 |
Пулемёт с ПИД, лазер |
патроны, энергия |
<5% на дистанции 400 м |
|
M₃ («Адаптер») |
e>0,3e>0,3 или дрон скрылся |
Свой FPV-дрон, сетка, ложный сигнал |
свои носители |
20–40% в сложных условиях, но дёшево |
Дополнительный гибридный режим (M₂+M₃):
0.15≤e≤0.30.15≤e≤0.3 и κ>0.5κ>0.5 → взвешенное управление u=w2uПИД+w3uDRLu=w2uПИД+w3uDRL.
Таблица порогов (шпаргалка командира)
Условие переключения в реальном бою — три значения, которые легко рассчитать на планшете:
|
Метрика |
Зелёная зона (M₂) |
Жёлтая зона (гибрид) |
Красная зона (M₁ или M₃) |
|
HH (энтропия, бит) |
< 0.4 |
0.4 … 0.7 |
> 0.7 |
|
ee (ошибка прогноза) |
< 0.15 |
0.15 … 0.30 |
> 0.30 |
|
κκ (плотность датчиков) |
> 0.7 |
0.5 … 0.7 |
< 0.5 |
Правило:
- Если хоть одна метрика в красной зоне → M₁ (при κ<0.5κ<0.5 или H>0.7H>0.7) или M₃ (при e>0.3e>0.3).
- Если все в зелёной → M₂.
- Иначе → гибрид M₂+M₃.
Методика расчёта энтропии H(t)H(t) по трём акустическим датчикам
Принцип TDOA (разность времени прихода сигнала)
Пусть три датчика расположены в точках A,B,CA,B,C с известными координатами.
Дрон издаёт звук (частота винтов ~ 200–500 Гц). Меряем время прихода сигнала на каждый датчик tA,tB,tCtA,tB,tC.
Вычисляем разности:
ΔtAB=tA−tB,ΔtAC=tA−tCΔtAB=tA−tB,ΔtAC=tA−tC
Каждой паре ΔtΔt соответствует гиперболоид (в 2D — гипербола), на которой лежит источник.
Шаги алгоритма
- Оцифровка сигнала (частота 48 кГц, окно 0.1 с).
- Корреляция между парами датчиков → находим ΔtAB,ΔtACΔtAB,ΔtAC.
- Решаем систему уравнений для координат (x,y)(x,y). Получаем оценку положения дрона с погрешностью.
- Повторяем для нескольких последовательных измерений → гистограмма направлений по секторам.
- Нормируем гистограмму в вероятности pipi.
- Считаем энтропию Шеннона:
H=−∑i=14pilog2piH=−i=1∑4pilog2pi
Пример для нашего сценария (секторы: лес, дома, пустырь, окопы)
|
Измерение |
Лес |
Дома |
Пустырь |
Окопы |
|
1 |
0.50 |
0.30 |
0.15 |
0.05 |
|
2 |
0.60 |
0.25 |
0.10 |
0.05 |
|
3 |
0.55 |
0.30 |
0.10 |
0.05 |
|
Среднее |
0.55 |
0.283 |
0.117 |
0.05 |
Подставляем в формулу:
H=−[0.55log2(0.55)+0.283log2(0.283)+0.117log2(0.117)+0.05log2(0.05)]H=−[0.55log2(0.55)+0.283log2(0.283)+0.117log2(0.117)+0.05log2(0.05)]
Вычисления:
- 0.55 * (-0.862) = -0.474
- 0.283 * (-1.82) = -0.515
- 0.117 * (-3.09) = -0.361
- 0.05 * (-4.32) = -0.216
Сумма = -1.566 → H≈1.57H≈1.57 бит (высокая неопределённость).
Вывод: H>0.7H>0.7 → включаем режим M₁.
Код для акустической локации и расчёта H (Python, упрощённый)
python
import numpy as np
from scipy.signal import correlate
def tdoa_localization(t1, t2, t3, sensor_positions, sound_speed=343):
"""
t1,t2,t3 - время прихода сигнала на датчики 1,2,3
sensor_positions: [[x1,y1],[x2,y2],[x3,y3]]
возвращает координаты (x,y) источника
"""
# разности расстояний
d12 = (t1 - t2) * sound_speed
d13 = (t1 - t3) * sound_speed
# решение системы гипербол (упрощённо - взято из готовой лин. алгебры)
A = np.array([[2*sensor_positions[1][0] - 2*sensor_positions[0][0], 2*sensor_positions[1][1] - 2*sensor_positions[0][1]],
[2*sensor_positions[2][0] - 2*sensor_positions[0][0], 2*sensor_positions[2][1] - 2*sensor_positions[0][1]]])
b = np.array([d12**2 - (sensor_positions[0][0]**2 + sensor_positions[0][1]**2) + (sensor_positions[1][0]**2 + sensor_positions[1][1]**2),
d13**2 - (sensor_positions[0][0]**2 + sensor_positions[0][1]**2) + (sensor_positions[2][0]**2 + sensor_positions[2][1]**2)])
try:
x, y = np.linalg.solve(A, b)
return x, y
except:
return None, None
def direction_to_sector(angle_deg):
"""0-360° -> 'forest','houses','wasteland','ditches'"""
if angle_deg < 90: return 'forest'
elif angle_deg < 180: return 'houses'
elif angle_deg < 270: return 'wasteland'
else: return 'ditches'
def entropy_from_detections(detections_list, sectors):
"""detections_list: список секторов (строки) за последние 3-5 измерений"""
counts = {s: detections_list.count(s) for s in sectors}
total = sum(counts.values())
probs = [counts[s]/total for s in sectors]
H = -sum(p * np.log2(p) for p in probs if p>0)
return H
# Пример использования
sectors = ['forest','houses','wasteland','ditches']
detections = ['forest', 'forest', 'houses', 'forest', 'ditches'] # 5 замеров
H = entropy_from_detections(detections, sectors)
print(f"Entropy H = {H:.2f} bits")
if H > 0.7: print("Mode M₁ (Analyst) activated")
Код симулятора трёх режимов с переключателем (Python)
Этот симулятор моделирует поле боя, генерирует дронов, считает метрики H,e,κH,e,κ и переключает режимы.
python
import numpy as np
import math
from collections import deque
# ------------------- МЕТРИКИ -------------------
def entropy_h(probs):
"""H(t) - энтропия распределения по секторам"""
return -sum(p * math.log2(p) for p in probs if p > 0)
def prediction_error(true_pos, pred_pos):
"""e(t) - относительная ошибка прогноза"""
dist_true = math.hypot(true_pos[0], true_pos[1])
if dist_true < 1e-3: return 0
error = math.hypot(true_pos[0]-pred_pos[0], true_pos[1]-pred_pos[1])
return error / dist_true
def sensor_coverage(active_sensors):
"""kappa(t) - доля работающих датчиков"""
return active_sensors / 3.0 # всего 3 датчика
# ------------------- РЕЖИМЫ -------------------
def mode1_analyst(probs):
print("M1: Analyst - Updating DBN, scanning high-prob sectors")
sector = np.argmax(probs)
return {"action": "scan", "priority_sector": sector}
def mode2_shooter(error_angle):
print("M2: Shooter - PID tracking, firing solution")
# Простой ПИД
Kp, Ki, Kd = 0.6, 0.2, 0.1
integral = 0
derivative = 0
u = Kp * error_angle + Ki * integral + Kd * derivative
return {"action": "shoot", "u": u, "rounds": 20}
def mode3_adapter():
print("M3: Adapter - Deploying own FPV, trying net / spoofing")
return {"action": "deploy_fpv", "tactic": "ram"}
def hybrid_mode(w2, w3, u_pid, u_drl):
print(f"Hybrid: weights PID={w2:.2f}, DRL={w3:.2f}")
u = w2 * u_pid + w3 * u_drl
return u
# ------------------- ПЕРЕКЛЮЧАТЕЛЬ -------------------
def switch_mode(h, e, kappa):
"""
Правило переключения:
- если H > 0.7 или kappa < 0.5 -> M1
- иначе если e > 0.3 -> M3
- иначе если e < 0.15 и kappa > 0.7 и h < 0.4 -> M2
- иначе гибрид M2+M3
"""
if h > 0.7 or kappa < 0.5:
return 1
elif e > 0.3:
return 3
elif e < 0.15 and kappa > 0.7 and h < 0.4:
return 2
else:
return 0 # гибрид
# ------------------- СИМУЛЯТОР ПОЛЯ БОЯ -------------------
def simulate_battle():
print("=== Simulating Air Defense with 3-mode switcher ===\n")
# Инициализация
time_steps = 45 # секунд
drones = [{"pos": (100, 30), "vel": (5, -2), "type": "FPV", "alive": True},
{"pos": (120, 25), "vel": (6, -1), "type": "FPV", "alive": True},
{"pos": (80, 35), "vel": (4, -3), "type": "FPV", "alive": True},
{"pos": (140, 20), "vel": (5, -2), "type": "FPV", "alive": True}]
# Буферы для метрик
history_probs = deque(maxlen=5)
pred_pos = (100, 20)
for t in range(time_steps):
print(f"\n--- t={t}s ---")
# Обновление позиций дронов (простейшая модель)
for d in drones:
if d["alive"]:
x, y = d["pos"]
vx, vy = d["vel"]
d["pos"] = (x + vx, y + vy)
# Собираем вероятности секторов на основе акустики (имитация)
# Пусть в данном тесте сначала высокая энтропия, потом снижается
if t < 10:
probs = [0.55, 0.30, 0.10, 0.05] # лес, дома, пустырь, окопы
elif t < 25:
probs = [0.70, 0.20, 0.07, 0.03]
else:
probs = [0.85, 0.10, 0.03, 0.02]
h = entropy_h(probs)
# Выбираем ближайшего живого дрона для e(t)
alive_drones = [d for d in drones if d["alive"]]
if alive_drones:
true_pos = alive_drones[0]["pos"]
e = prediction_error(true_pos, pred_pos)
# Обновляем прогноз для следующего шага
pred_pos = (true_pos[0] + 5, true_pos[1] - 2)
else:
e = 0.0
kappa = sensor_coverage(np.random.choice([0,1], p=[0.1,0.9])) # 90% работоспособность датчиков
print(f"H={h:.2f} bits, e={e:.2f}, kappa={kappa:.2f}")
mode = switch_mode(h, e, kappa)
if mode == 1:
action = mode1_analyst(probs)
elif mode == 2:
error_angle = 0.05 # имитация ошибки наведения
action = mode2_shooter(error_angle)
# В режиме M2 сбиваем один дрон с вероятностью 0.8
if t > 8 and t < 17 and np.random.rand() < 0.8:
for d in drones:
if d["alive"]:
d["alive"] = False
print("Hit! Enemy drone destroyed by M2 (shooter)")
break
elif mode == 3:
action = mode3_adapter()
# В M3 сбиваем дрон с вероятностью 0.5
if t > 18 and t < 30 and np.random.rand() < 0.5:
for d in drones:
if d["alive"]:
d["alive"] = False
print("Enemy drone destroyed by M3 (adapter)")
break
else: # гибрид
print("Hybrid mode M2+M3")
# Взвешенное управление
beta = 2.0
sigma_dl = 0.5 # дисперсия DRL
w2 = math.exp(-beta * e**2) / (math.exp(-beta * e**2) + math.exp(-beta * sigma_dl))
w3 = 1 - w2
u_pid = 0.1 # некоторое значение усиления
u_drl = 0.3
u = hybrid_mode(w2, w3, u_pid, u_drl)
# В гибридном режиме редко сбиваем дрон
if np.random.rand() < 0.3:
for d in drones:
if d["alive"]:
d["alive"] = False
print("Drone destroyed in hybrid mode")
break
# Проверка завершения боя
if not any(d["alive"] for d in drones):
print("\n*** All enemy drones neutralized ***")
break
print("\n=== Simulation finished ===")
if __name__ == "__main__":
simulate_battle()
Как использовать код
- Сохраните файл
adapter_pvo.py. - Установите зависимости:
pip install numpy scipy. - Запустите:
python adapter_pvo.py. - Наблюдайте вывод: в консоли будут метрики, переключения режимов и уведомления об уничтожении дронов.
Вы можете менять:
- параметры датчиков в функции
sensor_coverage; - пороги в
switch_mode; - поведение дронов (траектории, типы);
- вероятности поражения в каждом режиме.
Выводы для тактики
- Не пытайтесь всё время стрелять. Включите M₁ — соберите информацию, понизьте энтропию.
- Как только дрон виден и прямолинеен — применяйте M₂ (ПИД). Это максимально дёшево и надёжно.
- При манёвре, пропадании или постановке помех — сразу M₃. Пробуйте нетривиальные вещи: встречный дрон, ложный сигнал, ловушку.
- Переключатель может быть полуавтоматическим: достаточно планшета командира с калькулятором трёх формул (H,e,κH,e,κ) и таблицей решений.
Главный эффект: стоимость уничтожения одного дрона падает с миллионов рублей (ракета ПВО) до тысяч или десятков тысяч рублей (пулемёт + свой FPV + интеллект).
Задание для самостоятельной тренировки
Сценарий:
Ландшафт — плотный лес + овраг. Три дрона заходят на разных высотах.
Средства: 2 акустики, 1 тепловизор, 1 пулемёт, 1 свой FPV.
Вопросы:
- Для первого появления (шумы, неизвестно направление) какой режим включите?
- Какой порог HH вы выберете для перехода к M₂?
- Если дрон заходит на бреющем за деревьями, что делать: M₃ (выпускать свой) или пробовать другой вариант?
Ответы для самопроверки:
- Режим M₁ («Аналитик»), так как HH будет высокая.
- После снижения H<0.4H<0.4 и e<0.15e<0.15 — переход в M₂.
- Лучше M₃ с выпуском своего FPV, чтобы «зайти за дерево» вслед за дроном.
Дальнейшее развитие:
Описанный переключатель — это прототип. Для внедрения в подразделении необходимо:
- Развернуть 3–4 акустических модуля (цена <5000 руб/шт);
- Подключить одну управляемую турель (пулемёт или лазерную указку);
- Научить DRL-агента в симуляторе (Gazebo с моделью леса/домов/воронок);
- Установить планшет с правилами переключения (пороги H,e,κH,e,κ).
Ключевое преимущество: система работает в условиях, где дорогие ПВО слепнут, и позволяет эффективно защищать объекты в прифронтовой полосе, лесных массивах и городских кварталах.
