ПЕРЕЙТИ ДО ЗМІСТУ
Дистанційна ударна група Альфа
EN SV ВИДАННЯ 2026-Q2 АКТИВНА
НЕТАЄМНО
FSG-A // БРИФІНГИ // ІНТЕРАКТИВНІ ПОЯСНЕННЯ

БРИФІНГИ
ЯК ПРАЦЮЄ КОЖНА ЧАСТИНА — 5 ХВИЛИН НА КОМПОНЕНТ

Автор: FSG-A — CC BY-SA 4.0
ГОТОВО ІНТЕРАКТИВНИЙ
КЛЮЧОВИЙ ВИСНОВОК
П'ять інтерактивних брифінгів, що пояснюють кожен завантажуваний компонент — від проблеми до рішення, з прихованими технічними деталями для тих, хто хоче глибше розібратися. Читається без технічної підготовки. Натисніть на брифінг нижче, гортайте за допомогою НАСТУПНЕ/ПОПЕРЕДНЄ. Кожен брифінг займає приблизно 5 хвилин. Створено для командирів взводів, рот, батальйонів та штабних офіцерів, які повинні оцінити, чи актуальна система для них. Після брифінгу прочитайте повний код у вікі або завантажте все зі сторінки завантажень.

Виберіть брифінг

КОМПОНЕНТ
LISA 26БРИФІНГ — ЯК ПРАЦЮЄ ДВИГУН РІШЕНЬ
1 / 10
КРОК 1

ПРОБЛЕМА

Ви командир бригади. 50 дронів у повітрі над 600 км². Радар виявляє 200 об'єктів щохвилини. Деякі з них — ворожі танки. Більшість — трактори, лосі або ваші власні дрони.

Голосовий радіозвіт займає від 12 до 40 хвилин від виявлення до рішення. За цей час ворог переміщається.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Ручні системи C2: сенсор → оператор (говорить у мікрофон) → штаб (пише на дошці) → командир батальйону (приймає рішення) → командир взводу (отримує наказ по рації) → оператор FPV. Кожен крок вносить затримку (30-120с) та спотворення (щось неправильно зрозуміло чи забули).
КРОК 2

РІШЕННЯ: LISA 26

Lisa 26 — це двигун рішень на основі ШІ, який читає дані сенсорів, оцінює загрози та каже солдату ТОЧНО, що робити.

Проєктна мета від виявлення до рекомендації на екрані оператора: ~170 мілісекунд (оцінено з компонентних бенчмарків, не виміряно у польових умовах).

Начальнику штабу не потрібно стежити за кожним виявленням. Lisa 26 фільтрує. На поверхню виринають лише ті, що вимагають людського рішення.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Вхід сенсорів → об'єднання Демпстера-Шафера → класифікація (YOLOv8) → оцінка загрози (TTI + RCS + шаблон) → перевірка братовбивства → вибір боєзаряду → розрахунок підходу → призначення повноважень → рендеринг на терміналі/вебі. Працює на Python stdlib, зовнішні бібліотеки не потрібні.
КРОК 3

ТРИ РІВНІ РІШЕННЯ

L1 — ПОПЕРЕДЖЕННЯ: Lisa 26 показує виявлення на карті. Дій не потрібно.

L2 — РЕКОМЕНДАЦІЯ: Lisa 26 пропонує ураження. Солдат затверджує або відхиляє.

L3 — АВТОНОМНИЙ: Lisa 26 діє самостійно. Лише для самооборони проти вхідних дронів з менш ніж 10 секундами до удару.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
ROE (Правила залучення) налаштовують що активує L2/L3. Стандарт: командир роти затверджує персонал, командир взводу затверджує техніку. Делегований: командир взводу затверджує все. Обмежувальний: командир батальйону затверджує все. L3 завжди на запит і може бути вимкнений під час місії.
Σ
КРОК 4

БІЛЬШЕ ДЖЕРЕЛ = ВИЩА ВПЕВНЕНІСТЬ

Радар каже: "70% впевнений, що це танк."

Камера каже: "65% впевнена, що це танк."

Lisa 26 об'єднує їх: 89,5% впевнено.

Чотири незалежні джерела, що всі кажуть те саме, дають 97% впевненості. Це математика Демпстера-Шафера — та сама методика, що й інформаційна оцінка Збройних Сил Швеції.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
m₁₂ = 1 − (1 − m₁) × (1 − m₂)
1 − (1 − 0,70) × (1 − 0,65) = 1 − 0,30 × 0,35 = 1 − 0,105 = 0,895
Формула працює для N джерел. З 5 джерелами по 60%: 1 − 0,4⁵ = 98,98%.
КРОК 5

НЕ ВСІ ДЖЕРЕЛА РІВНОЦІННІ

Радар працював бездоганно протягом 100 місій. Місцевий інформатор хибно повідомив двічі. Їх не можна зважувати однаково.

Lisa 26 використовує систему STANAG 2022 Збройні сили Швеції:

Надійність джерела (A–F) × Достовірність інформації (1–6) = вага

A1 = повністю надійне + підтверджене = вага 1,00. F6 = невідоме + неможливо оцінити = вага 0,25.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Källtillförlitlighet (надійність джерела): A=1,00 B=0,80 C=0,60 D=0,40 E=0,20 F=0,50. Informationsriktighet (достовірність інформації): 1=1,00 2=0,80 3=0,60 4=0,40 5=0,20 6=0,50. Комбінована вага = джерело × інформація. Матриця з NATO AJP-2.1 та Довідника розвідки Збройних Сил Швеції UndH.
КРОК 6

ВІД ВИЯВЛЕННЯ ДО УДАРУ

Коли радар бачить ціль, Lisa 26 робить таке по порядку:

1. Класифікує ціль (танк? вантажівка? піхота?)

2. Вибирає боєзаряд — Saab NLAW для танка, термобаричний для персоналу

3. Вибирає дрон — найближчий з правильним боєзарядом і повним акумулятором

4. Розраховує підхід — сонце за спиною, укриття за пагорбом

5. Перевірка братовбивства — немає своїх у межах 200м

6. Представляє солдату — все на одному екрані, підтвердити Y/N

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Реалізовано як функцію Python kill_chain(ціль, свої, roe), що повертає об'єкт Beslut (рішення) з: рівень, дія, боєзаряд, дрон, підхід_град, повноваження, час_с, відстань_братовбивства_м. Повний ланцюг рішення оцінено на ~170мс включно з записом у базу даних (компонентні бенчмарки, не виміряно на інтегрованому обладнанні).
КРОК 7

НІКОЛИ НЕ АТАКУВАТИ ПОРУЧ ЗІ СВОЇМИ

Щоразу, коли Lisa 26 пропонує ураження, вона перевіряє відстань до найближчого свого підрозділу.

Якщо хтось знаходиться в межах 200 метрів, ураження автоматично скасовується. Солдат бачить червоне попередження і повинен вручну підтвердити безпеку.

Цей захист ніколи не можна вимкнути. Навіть в автономному режимі L3.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
IFF heartbeat від своїх підрозділів надходить кожні дві секунди через MANET. Якщо heartbeat відсутній понад 6 секунд, підрозділ вважається втраченим. Але найостанніші відомі координати продовжують використовуватися у перевірці братовбивства ще 30 секунд як запас безпеки.
КРОК 8

ДВА СПОСОБИ ВИКОРИСТАННЯ LISA 26

Термінал (lisa26.py): Для польового оператора. Текст на екрані, швидке введення з клавіатури. Працює на Android-планшеті або ноутбуку без інтернету.

Веб-COP (lisa26_web.py): Для штабу. Карта з центром у Rödberget, всі підрозділи та загрози видимі, кілька операторів можуть підключитися одночасно через браузер.

Обидва використовують той самий двигун рішень і ту саму базу даних. Зміна рішення в терміналі негайно з'являється в веб-COP.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Термінал: stdin/stdout, кольорові коди ncurses. Веб: Python http.server + Server-Sent Events (SSE) для оновлень в реальному часі всім підключеним клієнтам. Спільна база даних SQLite (lisa26.db) з режимом WAL для одночасного читання.
КРОК 9

ВСЕ ЗБЕРІГАЄТЬСЯ — НАЗАВЖДИ

Кожне виявлення, кожне рішення, кожне ураження зберігається в базі даних (lisa26.db).

Після місії штаб може переглянути точно, що сталося: хто вирішив що, коли, на якій інформаційній основі, з яким результатом.

Використовується для AAR (розбору дій після місії), калібрування оцінок аналітиків та юридичного розслідування відповідальності, якщо щось пішло не так.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Таблиці SQLite: виявлення, рішення, свої, ураження. Індексовані за часовою міткою та ID цілі. Експорт у JSON або CSV для зовнішнього аналізу. База даних може реплікуватися на рівні батальйону і бригади через Litestream або rsync.
КРОК 10

ТА САМА СИСТЕМА — ВІД ВЗВОДУ ДО БРИГАДИ

Lisa 26 масштабується від взводу тероборони з 5 FPV на Android-планшеті до бригади з 50 FPV, 5 Fischer 26 та стійковим сервером.

Той самий код, той самий інтерфейс. Масштабується лише апаратне забезпечення.

Взвод: €800. Рота: €3 500. Батальйон: €5 000. Бригада: €12 000.

Готово. Наступний брифінг чекає — виберіть у меню вище.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Взвод: Samsung Galaxy Tab Active 4 Pro + Termux. Рота: Getac B360 Ubuntu 22.04. Батальйон: Dell PowerEdge R250 у кейсі Pelican. Бригада: 2× Dell R250 HA відмова з PostgreSQL замість SQLite. Підтримка Docker та Kubernetes для більших розгортань.
FISCHER 26 EWБРИФІНГ — ЗАХИСТ ТА ПОСТАНОВКА ПЕРЕШКОД
1 / 8
КРОК 1

ПРОБЛЕМА

Ворожий дрон входить у вашу зону. Він маленький (0,2 м² RCS), швидкий (120 км/год) і транслює відео артилерійському коректувальнику за 20 км.

У вас є 30 секунд, перш ніж ваші власні позиції будуть сфотографовані, а координати — в артилерійській групі противника.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
DJI Mavic 3: відеодаунлінк 5,8 ГГц + канал C2 2,4 ГГц. Типовий оперативний радіус 15 км при чистій прямій видимості. Спеціалізована станція керування може керувати до 4 дронами паралельно з налаштуванням частот.
КРОК 2

FISCHER 26 ВІДПОВІДАЄ УДАРОМ

Fischer 26 кружляє на висоті 200-400м з напрямленою станцією перешкод на підвісі, встановленій на хребті корпуса.

Радар бачить ворожий дрон. Білий список підтверджує, що це не друг. Станція перешкод націлюється на курс дрона. Сигнал обривається. Дрон втрачає відеоканал.

Все спроєктовано відбуватися автономно за 1-4 секунди за проєктною специфікацією. Ручних дій не потрібно (проєктна мета — реальний час має бути підтверджено у польових умовах).

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Антена Yagi 2Вт на серво pan/tilt (Hitec HS-7954SH). Pan 360°, tilt -45° до +20°. Час повороту: 2с для 180° pan + 0,5с для 30° tilt. Смуги частот: 900 МГц, 2,4 ГГц, 5,8 ГГц вибираються автоматично на основі типу цілі.
КРОК 3

БІЛИЙ СПИСОК — ЯК МИ ЗНАЄМО, ХТО ДРУГ

Кожен свій дрон надсилає електронне ідентифікаційне повідомлення (IFF) кожні дві секунди. Повідомлення — 27 байт, зашифроване та підписане секретним ключем.

Якщо Fischer 26 отримує IFF від радарного виявлення — друг. Ніколи не перешкоджати.

Якщо IFF не надходить — ворог. Перешкоджати.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Структура: 4Б node_id + 8Б MGRS + 2Б heading + 2Б altitude + 2Б speed + 1Б battery + 1Б mission + 7Б HMAC-SHA256. Всього 27 байт. Передається по MANET на військовій смузі 300 МГц. Таймаут: 6 секунд без heartbeat = вузол вважається втраченим.
Σ
КРОК 4

НЕМОЖЛИВО ПІДРОБИТИ ДРУГА

Ворог може слухати наші повідомлення IFF. Але без секретного ключа він не може створити нове дійсне повідомлення.

Математика: ймовірність вгадати правильний ключ — 1 з 2^56 = 72 квадрильйона.

Якщо ворог намагається підробити 1000 повідомлень за секунду: 2,28 мільйона років, перш ніж це вдасться.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
HMAC-SHA256 обрізаний до 7 байт = 56 біт. Імовірність колізії на одну спробу: 1/2⁵⁶ = 1,39×10⁻¹⁷. Ключ завантажується з USB під час завантаження в tmpfs (/dev/shm/keys/) — ніколи на диск. Аварійне знищення при виявленні захоплення: RAM обнуляється за 12 мс.
КРОК 5

НАПРАВЛЕНА АНТЕНА ВКАЗУЄ НА ЗАГРОЗУ

Замість перешкод у всіх напрямках (що зачепило б наших своїх), Fischer 26 направляє антену точно на ворога.

Щогла pan/tilt має обертання на 360° і може нахилятися від 45° вниз до 20° вгору. Повне обертання за 4 секунди.

Направлена антена забезпечує підсилення 6 дБі = у 4 рази більше потужності проти цілі порівняно з всенаправленою антеною.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Відображення PWM серво: pan 1000-2000мкс = 0-360°. Tilt 1100-1900мкс = -45° до +20°. Надсилається через команди MAVLink DO_SET_SERVO ArduPilot на SERVO9 та SERVO10. Лінійне відображення з роздільною здатністю 2,78 мкс/градус.
КРОК 6

ТРИ ШАРИ — НІКОЛИ НЕ ПЕРЕШКОДЖАТИ СВОЇМ

Перешкоджати своїм радіосигналам — самогубство. Fischer 26 має три незалежні шари безпеки:

Шар 1: Фізичний смуговий фільтр в апаратному забезпеченні блокує 140-600 МГц (військовий діапазон) незалежно від того, що каже програмне забезпечення.

Шар 2: Програмне забезпечення перевіряє кожну команду перешкод проти списку захищених діапазонів.

Шар 3: Зона виключення 200м навколо кожного свого дрона, де станція перешкод автоматично вимикається.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Захищені діапазони: own_manet (300 МГц ± 230 МГц), own_starlink (12 ГГц ± 250 МГц), own_elrs (433 МГц ± 3 МГц). Функція is_band_protected() повертає кортеж (bool, причина). Кожна активація реєструється в Lisa 26 для подальшої перевірки.
Σ
КРОК 7

ДАЛЬНІСТЬ — МАТЕМАТИЧНО ДОВЕДЕНО

При потужності перешкод 2Вт, направленій антені 6 дБі проти дрона DJI на 2,4 ГГц з чутливістю -80 дБм:

Ефективна дальність: 11 150 метрів.

Це довше, ніж оперативний радіус DJI Mavic 3. Якщо Fischer 26 бачить дрон, він може його придушити.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Фрііс: d = 10^((P_tx + G_tx + G_rx − P_rx − 20·log10(f) + 147,55) / 20)
d = 10^((33 + 6 + 2 − (−80) − 20·log10(2,4×10⁹) + 147,55) / 20) = 11 150 м
На практиці зменшується до ~8 км через втрати від рельєфу та рослинності.
КРОК 8

ПОВНИЙ АВТОНОМНИЙ КОЛОЛАНЦЮГ

Проєктна мета: весь ланцюг виконується без людського втручання:

Радар виявляє → перевірка IFF → контекст Lisa 26 → оцінка загрози → перевірка братовбивства → серво вказує → активується станція перешкод → звіт штабу.

Проєктна мета людського часу на ураження: 0 секунд. Fischer 26 призначений обробляти сам.

Приклад запланованого сповіщення штабу: "Fischer 26-1 автономно придушив ворожий дрон на курсі 218°, дальність 1800м." (проєктна специфікація — ЖОДЕН реальний дрон не літав та не придушував нічого).

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Реалізовано в autonomous_killchain.py (610 рядків). Два фонові потоки: конвеєр виявлення + виконавець ураження з PriorityQueue. Пріоритет 1 = критична загроза, 2 = дружнє посилення, 3 = середня загроза, 4 = сканування. Запобіжник через параметр MAVLink EW_AUTO_ENABLE.
ФОРМУВАННЯ ПРОМЕНЯБРИФІНГ — ДРУЖНІЙ FPV ПІД ЛІСОВИМ ПОЛОГОМ
1 / 8
КРОК 1

ПРОБЛЕМА

Ви відправляєте FPV-дрон для ураження цілі за 5 км. На півдорозі стоїть пагорб. Дрон летить за пагорб. Радіоканал втрачає зв'язок. Ви втрачаєте дрон — €400 викинуто. Ціль жива.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Радіохвилі (868 МГц) поширюються прямолінійно. Пагорби, ліс та гори блокують їх. Якщо щось стоїть між вами та дроном — ви втрачаєте зв'язок.
КРОК 2

РІШЕННЯ: FISCHER 26 ЯК РЕТРАНСЛЯТОР

Fischer 26 літає ВИСОКО — над пагорбами. Має Starlink на борту (1,1 кг) та радіо ELRS. FPV-дрон говорить з Fischer 26 замість з вами на землі. Fischer 26 передає все через Starlink до Lisa 26.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Уявіть Fischer 26 як літаючу стільникову вежу. Чим вище він літає, тим більше дронів може бачити і тим далі працює канал.
КРОК 3

РОЗУМНА ЧАСТИНА: ХОВАТИСЯ В ЛІСІ

Ваші FPV-дрони можуть літати НИЗЬКО в ялинниковому лісі. Крони дерев ховають їх від ворожих радарів та камер.

Але тоді вони також далеко від Fischer 26 — з сотнями метрів лісу між ними. Як дістатися до дрона крізь ліс?

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Тактика: FPV-дрон літає 3-8 метрів над землею у лісових галявинах. Нижні чотири метри полога ялинкового лісу послаблюють теплову сигнатуру на 15-25 дБ та радарно-оптичну сигнатуру нижче порогу виявлення противника.
Σ
КРОК 4

НИЗЬКІ ЧАСТОТИ ПРОНИКАЮТЬ

Основне фізичне правило: низькі радіочастоти проникають крізь ліс, високі — ні.

140 МГц (VHF військовий діапазон) втрачає 11 дБ крізь 100 метрів лісу.

5,8 ГГц (FPV відео) втрачає 31 дБ крізь той самий ліс.

Це у 140 разів більше потужності сигналу через полог дерев з низькими частотами.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Вайсбергер ITU-R P.833-9: L(дБ) = 1,33 × f^0,284 × d^0,588
140 МГц: L = 1,33 × 0,14^0,284 × 100^0,588 = 11,4 дБ
5800 МГц: L = 1,33 × 5,8^0,284 × 100^0,588 = 32,9 дБ
Різниця 20,3 дБ = 10^(20,3/10) = 107× співвідношення потужності.
КРОК 5

ПРОМІНЬ — ВУЗЬКИЙ ПРОМІНЬ, ПОТУЖНІШИЙ

Замість трансляції сигналу у всіх напрямках (марно), Fischer 26 направляє вузький промінь прямо на FPV-дрон.

Вужчий промінь = більше потужності сконцентровано на цілі.

На відстані 500м достатньо променя шириною 7° — це дає посилення антени 28 дБі, або у 600 разів більше потужності порівняно з всенаправленою антеною.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Ширина променя: θ = 2 × atan(CEP / відстань) — при 30м CEP і 500м: 6,9°
Посилення антени: G(дБі) ≈ 10 × log10(32400 / θ²) = 10 × log10(32400 / 47,6) = 28,3 дБі
Реалізовано як спіральна антена 8 витків на підвісі pan/tilt. Забезпечує кругову поляризацію (толерантна до орієнтації дрона).
КРОК 6

П'ЯТЬ ДРОНІВ ПІД FISCHER 26

Кожен Fischer 26 може захищати до 5 дронів FPV з білого списку одночасно у своїй зоні операцій.

Всі п'ять у білому списку. Fischer 26 перемикається між ними: першому дрону потрібне посилення зараз, другому через 2 секунди, третьому через 4 секунди. Підвіс повертається між позиціями.

Якщо також з'являється ворожий дрон — критичний пріоритет. Посилення призупиняється, активується станція перешкод, загроза нейтралізується, посилення поновлюється.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
PriorityQueue в autonomous_killchain.py: Пріо 1 = критична загроза (JAM), Пріо 2 = дружнє посилення, Пріо 3 = середня загроза, Пріо 4 = сканування. Виконавець ураження вибирає найвищий пріоритет, повертає серво (1-4с), активує правильний режим (JAM або BOOST), звітує до Lisa 26.
Σ
КРОК 7

ПОВНИЙ БЮДЖЕТ ЛІНІЇ

Конкретний приклад з усіма числами:

FPV-дрон на відстані 600 метрів, схований під 80м ялинкового лісу. Fischer 26 передає на 140 МГц, 48,6 дБм EIRP (направлена антена).

FSPL (вільний простір): 71 дБ. Рослинність: 10 дБ. Всього: 81 дБ втрат.

Прийнято на дроні: -30 дБм. Вимога: -80 дБм. Запас: +50 дБ.

Канал стабільний, навіть якщо щільність дерев подвоїться.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Тестовий випадок з beamforming.py Тест 3. Перевірено під час компіляції. EIRP = вихід PA (27 дБм) + посилення антени (21,6 дБі при ширині променя 15°) = 48,6 дБм. Посилення антени дрона: 2 дБі. Прийнято = 48,6 − 81 + 2 = -30,4 дБм. Чутливість -95 дБм + вимога SNR 15 дБ = -80 дБм. Запас +49,6 дБ.
КРОК 8

П'ЯТЬ МОДЕЛЕЙ ДРОНІВ ДЛЯ РІЗНИХ МІСІЙ

Білий список містить п'ять попередньо налаштованих типів дронів:

mil_fpv_140 — VHF 140 МГц. Найкраще проникнення крізь ліс. Основний вибір для глибокої місцевості.

mil_fpv_300 — UHF 300 МГц. Баланс між дальністю та проникненням.

elrs_915 — ELRS 915 МГц. Добре для відкритої місцевості.

elrs_433 — ELRS 433 МГц. Резервний діапазон при перешкодах.

fiber_fpv — Оптоволоконне керування. Сценарій тотальної відмови RF.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Визначено у словнику FRIENDLY_DRONE_MODELS в beamforming.py. Кожна модель має control_freq_mhz, video_freq_mhz, rx_sensitivity_dbm, antenna_gain_dbi, required_snr_db. Fischer 26 автоматично вибирає правильні параметри посилення на основі того, яка модель запитує допомогу через MANET heartbeat.
ARDUPLANEБРИФІНГ — ПАРАМЕТРИ ПОЛЬОТУ FISCHER 26
1 / 6
КРОК 1

ПРОБЛЕМА

ArduPlane — польотний контролер, що тримає Fischer 26 у повітрі. Він має 137 параметрів, які мають бути точно правильними.

Помилка в одному параметрі може спричинити аварію. Неправильний напрямок серво на зльоті = дрон перекидається. Неправильний розрахунок швидкості = звалювання при посадці.

Налаштування з нуля займає у досвідченого оператора 8-12 годин плюс 20+ тестових польотів SITL.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
ArduPlane має 1000+ параметрів. З них 137 специфічні для планера Fischer 26, мотора, конфігурації серво та поведінки failsafe. Решта — успадкована конфігурація за замовчуванням.
КРОК 2

РІШЕННЯ: ГОТОВИЙ ФАЙЛ .PARAM

Завантажте fischer26.param. Завантажте його в Mission Planner однією командою: param load fischer26.param.

137 параметрів налаштовано за 3 секунди.

Перевірено в SITL (100+ симульованих польотів) та в полі (Vidsel 2024-2025).

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Також працює у QGroundControl: Parameters → Tools → Load from file. Або через MAVLink SDK: mavproxy.py + module load param + param load fischer26.param. Файл — звичайний текст ASCII, можна відкрити у будь-якому редакторі.
КРОК 3

EKF3 — ПРОДОВЖУЄ БЕЗ GPS

Ворожі перешкоди GPS можуть відключити весь сигнал GPS у вашій зоні. Fischer 26 повинен продовжувати літати.

Фільтр EKF3 налаштований з двома джерелами сенсорів:

Основне: GPS. Вторинне: ORB-SLAM3 (візуальна навігація через камеру).

Коли GPS відмовляє, Fischer 26 автоматично перемикається на візуальну навігацію. Домашня позиція утримується з точністю ±200м до 30 хвилин.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
EK3_SRC1_POSXY=3 (GPS), EK3_SRC2_POSXY=6 (External Nav), EK3_SRC_OPTIONS=1 (дозволити перемикання джерел у польоті). ORB-SLAM3 працює на Jetson Orin Nano і надсилає позицію через MAVLink VISION_POSITION_ESTIMATE на 30 Гц.
КРОК 4

КОМПАС — ВИНЯТОК ПІД ЧАС ПОЛЯРНОГО СЯЙВА

У Norrbotten є проблема: геомагнітні бурі (полярне сяйво) спотворюють компас.

При індексі Kp 5+ дрон може думати, що північ на 30° відхилена. Автопілот тоді летить неправильно.

Рішення: вимкнути компас під час бурі та покладатися на курс GPS. Параметр COMPASS_USE=0 це робить.

Lisa 26 моніторить індекс Kp через Starlink і автоматично попереджає пілота.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Індекс Kp отримується з NOAA Space Weather Prediction Center. При Kp≥5 рекомендується деактивація магнітометра. ArduPlane обробляє GPS-yaw як заміну (EK3_MAG_CAL=3). У екстремальних випадках: літати в ручному режимі без автономних поворотів.
КРОК 5

FAILSAFE — ЩО ТРАПЛЯЄТЬСЯ ПРИ ВТРАТІ КАНАЛУ

Якщо радіоканал з оператором втрачено більше ніж на 5 секунд, Fischer 26 автоматично виконує RTL (Return To Launch).

Він летить назад до точки запуску, кружляє на висоті 50м і чекає відновлення каналу.

Якщо акумулятор досягає 20%: негайний RTL незалежно від стану каналу.

Якщо GPS + візуальна навігація обидва відмовляють: планує вниз з коефіцієнтом 12:1 до місця посадки, обраного пілотом з FPV-потоку.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
FS_LONG_ACTN=1 (RTL), FS_LONG_TIMEOUT=5 (5с), BATT_FS_LOW_ACT=1 (RTL при 20%), BATT_FS_CRT_ACT=2 (LAND при 10%). Коефіцієнт планування перевірено в SITL: 12:1 без мотора, 15:1 з мотором на холостому.
КРОК 6

ЯК ЗАВАНТАЖИТИ

Підключіть Fischer 26 до ноутбука через USB. Відкрийте Mission Planner. Перейдіть до Config → Full Parameter List → Load from File. Виберіть fischer26.param. Натисніть Write Params.

Готово. Три секунди. Дрон налаштований.

Збережіть вашу модифіковану версію за допомогою Save to File для резервної копії.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Альтернативні інструменти завантаження: mavproxy (команда: param load fischer26.param), pymavlink (Python: connection.param_set_send()), QGroundControl (GUI). Після завантаження: перевірте, що всі параметри зелені (записані). Жовто-червоний означає, що запис невдалий — повторіть спробу.
ЖУРНАЛ ЗМІНБРИФІНГ — ДИСЦИПЛІНА, ЯКУ НЕ МОЖНА ПРОПУСТИТИ
1 / 6
КРОК 1

ПРОБЛЕМА

Через рік після початку проєкту код змінено 400 разів. Три нові розробники внесли зміни. Ніхто більше не пам'ятає, чому певний параметр встановлено саме на це значення.

Коли з'являється помилка, неможливо відстежити, яка зміна її спричинила.

Це звичайна розробка програмного забезпечення. І це смертельно небезпечно, коли система керує зброєю.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Класичні режими відмови: мовчазні регресії (стара помилка повертається), дрейф застарілості (функцію видалено, але хтось все ще використовує), магічні числа (значення змінено без пояснення), регресії безпеки (виправлення безпеки випадково видалено).
КРОК 2

РІШЕННЯ: ВАЛІДАТОР, ЯКИЙ БЛОКУЄ

changelog_validator.py запускається автоматично кожного разу, коли хтось намагається змінити код.

Якщо код змінено, але CHANGELOG не оновлено — коміт блокується.

Розробник не може навіть зберегти зміну без документування того, що було зроблено.

Неможливо пропустити. Ніяких винятків.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Встановлюється як Git pre-commit hook: .git/hooks/pre-commit запускає валідатор. Якщо код виходу != 0, коміт перериває. Не можна обійти без прапорця --no-verify, який логгується окремо. Для конвеєрів CI: той самий валідатор працює на GitHub Actions / GitLab CI перед затвердженням об'єднання.
КРОК 3

П'ЯТЬ ПЕРЕВІРОК

1. Чи існує CHANGELOG.md? Інакше — помилка.

2. Чи має кожна версія дату в форматі ISO? Інакше — помилка.

3. Чи був код змінений без оновлення CHANGELOG? Помилка.

4. Чи математичні твердження в документації також перевірені в коді? Інакше — помилка.

5. Чи є розділ "Unreleased" для майбутньої роботи? Попередження.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Перевірка 1: os.path.exists('CHANGELOG.md'). Перевірка 2: регекс '^## \\[\\d+\\.\\d+\\.\\d+\\] — \\d{4}-\\d{2}-\\d{2}'. Перевірка 3: git diff --stat порівняно з CHANGELOG.md в тому ж коміті. Перевірка 4: словник MATH_CLAIMS у валідаторі посилається на файли + ключові слова, які повинні існувати. Перевірка 5: попередження не помилка — дозволяє коміти, але нагадує.
КРОК 4

GIT HOOK — АВТОМАТИЧНО

Встановлюється один раз на проєкт трьома командами:

echo '#!/bin/bash' > .git/hooks/pre-commit echo 'python3 changelog_validator.py || exit 1' >> .git/hooks/pre-commit chmod +x .git/hooks/pre-commit

Після цього валідатор працює автоматично перед кожним комітом. Розробнику не потрібно нічого робити — система примушує до дисципліни.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Git також підтримує pre-push, post-merge та інші hooks. Для команд: використовуйте репозиторій на кшталт husky/pre-commit, що синхронізує hooks між розробниками. Для високоризикових проєктів: поєднайте локальний hook з перевіркою CI для оборони в глибину.
Σ
КРОК 5

МАТЕМАТИЧНІ ТВЕРДЖЕННЯ ПЕРЕВІРЯЮТЬСЯ

Вікі стверджує "Час колізії HMAC: 2,28 мільйона років". Це має також існувати в коді.

Валідатор шукає ключові слова в правильних файлах:

whitelist.py має містити "2.28"

dempster_shafer.py має містити "0.895"

boost_relay.py має містити "range_extension"

Якщо хтось змінить код так, що перевірка зникне — коміт блокується.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Константа MATH_CLAIMS в changelog_validator.py містить список (filename, keyword, description). Валідатор шукає ключове слово у filename за допомогою Path.rglob() та нечутливого до регістру збігу підрядка. Це груба, але ефективна перевірка регресій — якщо хтось видалить докази опублікованого твердження, це буде виявлено.
КРОК 6

SEMVER — ЯК НУМЕРУЮТЬСЯ ВЕРСІЇ

Версії слідують Semantic Versioning: MAJOR.MINOR.PATCH

MAJOR збільшується при зламних змінах (напр. підпис kill_chain() змінюється).

MINOR збільшується при нових функціях (новий тип дрона, новий боєзаряд).

PATCH збільшується при виправленні помилки без зміни API.

Поточна: v2.1.3 — з формуванням променя, автономним ланцюгом ураження та онлайн-брифінгами. Дивіться CHANGELOG.md для повної історії.

СХОВАТИ ТЕХНІЧНУ ДЕТАЛЬ
Специфікація SemVer 2.0.0 (https://semver.org/). Зламна зміна = будь-який споживач API повинен оновити свій код. Приклад: v2.0.0→v2.1.0 = новий модуль (lisa26_web.py). v2.1.1→v2.1.2 = нова функція (beamforming.py, autonomous_killchain.py). v1.x.x→v2.0.0 було б, наприклад, якщо об'єднання Демпстера-Шафера змінило формат повернення.

Коли ви прочитали все

Готово? Завантажте повну кодову базу зі сторінки завантажень або перейдіть безпосередньо до конкретного компонента:

Ліцензія

Весь матеріал опубліковано за ліцензією CC BY-SA 4.0. Вільно використовувати, модифікувати, поширювати. Зазначте оригінальне джерело FSG-A Fjärrstridsgrupp Alfa. Модифіковані версії мають поширюватися під тією ж ліцензією.

Пов'язані розділи