ДЕРЕВА ПОВЕДІНКИ
ПРАВИЛА РІШЕНЬ ДЛЯ ДРОНІВ
Практична реалізація використовує вбудовану систему failsafe ArduPilot у поєднанні з Lua-скриптами для логіки, специфічної для місії. Кожен вузол в ієрархії оцінює свою умову і передає успіх або невдачу вгору. Кореневий вузол приймає остаточне рішення, яку дію дрон виконує в будь-який момент. Ця архітектура відображає, як працюють військові командні структури: нижчі рівні обробляють рутинні рішення, ескалюючи незвичайні ситуації до вищого авторитету.
Ієрархія пріоритетів — безпека над місією
Дерево поведінки Fischer 26 має чотири рівні пріоритету (від найвищого до найнижчого):
- ВИЖИВАННЯ (найвищий): перевірити критичну відмову обладнання, катастрофічну втрату живлення, відмову IMU. Якщо так → негайне припинення або аварійна посадка. Ніщо не переважає це.
- БЕЗПЕКА: перевірити рівень акумулятора < 20%, геозабор порушений, втрата радіозв\'язку > 30 секунд. Якщо так → RTL (повернення додому) або посадка в поточній позиції.
- ОБОРОНА: перевірити вхідну загрозу (ворожий дрон у зоні 500 м). Якщо так → ухильний маневр або активація РЕБ-глушника.
- МІСІЯ (найнижчий): виконувати ISR-кружляння, ретрансляцію, стеження за ціллю. Лише якщо всі вищі пріоритети задоволені.
Ключовий принцип: місія НІКОЛИ не переважає безпеку. Дрон, що виконує ISR-кружляння і досягає 20% акумулятора, негайно перериває місію і повертається — навіть якщо ціль ще не підтверджена. Втрата дрона коштує €3 000 і тижні заміни. Невиконана ISR-місія коштує інформацію, яку можна зібрати наступним вильотом через 3 години.
Як працюють дерева поведінки
Кожен вузол у дереві — це проста перевірка: "чи ця умова вірна?" Якщо так: виконати дію цього вузла. Якщо ні: перейти до наступного вузла. Дерево перевіряється зверху вниз, 50 разів на секунду (20 мс цикл). Перший вузол, що повертає "так", визначає поведінку дрона. Це означає, що вузли виживання (зверху) завжди перевіряються першими — навіть якщо місійний вузол "активний", вузол виживання може перервати його за 20 мс.
Lua-скрипти — розширення поведінки за межі failsafe
ArduPilot дозволяє Lua-скрипти, що виконуються на польотному контролері. Ці скрипти можуть зчитувати телеметрію, змінювати параметри і навіть переключати режими польоту. Для Fischer 26: Lua-скрипт перевіряє IFF heartbeat від Lisa 26 кожні 5 секунд. Якщо heartbeat відсутній 30 секунд (Lisa 26 втрачена або скомпрометована): дрон входить у автономний режим із заздалегідь завантаженим маршрутом повернення. Цей рівень поведінки неможливий з самими параметрами failsafe — потрібна програмна логіка.
Приклад: поведінка при втраті зв\'язку
Пов'язані розділи
← Частина Об\'єднання сенсорів EKF3
ArduPilot Lua-скрипт — приклад
-- Fischer 26 IFF Heartbeat Monitor (Lua script for ArduPilot)
-- Runs on Pixhawk 6C, checks Lisa 26 heartbeat every 5 seconds
local HEARTBEAT_TIMEOUT_MS = 30000 -- 30 seconds
local last_heartbeat = millis()
function update()
-- Check if Lisa 26 sent heartbeat via MAVLink
local hb = mavlink:receive_chan(0)
if hb and hb:get_type() == "HEARTBEAT" then
last_heartbeat = millis()
end
-- If no heartbeat for 30 seconds: enter autonomous RTL
if millis() - last_heartbeat > HEARTBEAT_TIMEOUT_MS then
gcs:send_text(4, "IFF LOST: entering autonomous RTL")
vehicle:set_mode(11) -- RTL mode
end
return update, 5000 -- Check every 5 seconds
end
return update, 5000
Джерела
Документація Lua-скриптів ArduPilot. Теорія дерев поведінки (Colledanchise & Ögren, 2018). Конфігурація failsafe ArduPilot. Публічні звіти про українські автономні дронові операції 2022–2025 (ISW, RUSI).