Практична програма з візуального наведення БПЛА на ціль
Старт: жовтень
Формат: онлайн, 14 тижнів
За 14 тижнів навчишся будувати систему від першого автономного зльоту до наведення апарата на візуальну ціль і точної посадки на неї.
Зараз ти не знаєш, як під'єднати комп'ютерний зір до автопілота, як провести ціль від кадру до реального руху апарата й утримати його на ній, і як зробити, щоб система не збоїла за межами ідеальних умов.
Після курсу ти зможеш: керувати ArduPilot кодом на Python через MAVLink, витягати ціль із відеопотоку й переводити її в координати дрона, розпізнавати об'єкти нейромережею, будувати логіку наведення з обробкою відмов, збирати й запускати наскрізний сценарій наведення апарата на візуальну ціль із точною посадкою — у симуляції.
(01)
Ти знаєш польотні режими й Mission Planner на практиці, але не програмуєш.
(02)
Ти пишеш код, але не працював з автопілотами, сенсорами й комп'ютерним зором.
(03)
Ти розумієш апаратну частину й системи керування.
Розгорнеш ArduPilot SITL (запуск польотного коду без реального дрона) і будеш піднімати БПЛА в повітря за кілька хвилин.
Напишеш бортове програмне забезпечення на Python, яке через MAVLink віддає команди зльоту, польоту й посадки та перевіряє реальний стан апарата.
Побудуєш ланцюг «камера → детекція → положення цілі» і переведеш координати з пікселів у метри та в систему координат дрона.
Спровокуєш зникнення цілі, зависання камери, обрив зв'язку — і навчишся будувати реакції, за яких дрон поводиться передбачувано в збоях.
5 блоків· 16 модулів · практика в симуляції (SITL + Gazebo) · перевірка коду й логів ментором
● Цифрова грамотність: що це і чому важливо її опанувати на старті навчання.
● Перші кроки в цифровому світі: Google-сервіси та хмарні Digital-інструменти
Результат модуля: Зрозумієте, що таке цифрова грамотність і опануєте Digital-інструменти, які потрібні для вашого подальшого навчання.
● з чого складається система керування дроном: сенсори, гіроскоп-акселерометр (IMU), GPS, компас, барометр;● EKF — фільтр, що зводить суперечливі дані сенсорів в одну оцінку стану дрона (де він, куди й з якою швидкістю летить);● різниця між тим, що дрон хоче зробити (бажаний стан), і тим, що з ним відбувається насправді (оцінений стан);● польотні режими: Guided (керування зовнішніми командами), Auto (місія за точками), Land (посадка), RTL (повернення додому);● де в цю систему підключається комп'ютерний зір.
Практика (перевіряється): візьмеш свої або навчальні польотні логи (записи, що дрон робив під час польоту) і для одного відрізка знайдеш, що автопілот хотів зробити, що він думав про свій стан і що сталося насправді.
Результат тижня: намалюєш архітектуру ArduPilot без підказок і поясниш весь шлях від виміру сенсора до зміни обертів моторів.
● як симулятор SITL замінює справжній дрон і навіщо це потрібно на старті;як EKF обирає, яким сенсорам довіряти, коли їхні дані розходяться;● інструменти навколо симулятора: MAVProxy (текстовий пульт керування), параметри, мережеві з'єднання;● повний цикл: запуск → політ → перегляд логу → перезапуск;● як безпечно змінити параметр і перевірити, що зміна застосувалася.
Практика (перевіряється): встановиш середовище розробки й запустиш віртуальний дрон, проведеш його через Arm (готовність моторів) → зліт → зависання → політ у точку → повернення → посадку, після чого розбереш лог польоту.
Результат тижня: запускатимеш віртуальний дрон за кілька хвилин і читатимеш його польотні логи, не шукаючи інструкцію щоразу.
● MAVLink — «мова», якою дрон і програма спілкуються: сигнал «я живий» (heartbeat), команди, повідомлення, підтвердження отримання;● чим команда відрізняється від повідомлення й від телеметрії;● як програма підключається до дрона й читає потік даних;● часові мітки — коли саме прийшов кожен вимір і чи не застарів він;● чому різні дані приходять із різною частотою.
Практика (перевіряється): напишеш програму читання телеметрії, яка в реальному часі показує режим польоту, стан моторів, координати, висоту, нахили, швидкість і заряд батареї, і додаси до кожного значення позначку часу отримання.
Результат тижня: читатимеш живий стан дрона з Python і знаходитимеш потрібне повідомлення в документації.
● як програмою віддати команди готовності моторів, зльоту й польоту в точку;● як перевірити, що дрон справді виконав команду, а не просто отримав її;● машина станів — покрокова логіка, де наступний крок настає лише за виконаної умови попереднього;● чому не можна керувати паузами («почекай 10 секунд») замість перевірки реального стану;● що робити, коли команда не підтверджена або дрон не в тому режимі.
Практика (перевіряється): напишеш програму автономної місії, яка підключається до дрона, дочікується сигналу «я живий», переходить у режим зовнішнього керування, піднімає дрон, веде його в задану точку, тримає на місці й повертає додому — з переходами за реальним станом, а не за таймером. Окремо навмисно віддаси хибну команду й перевіриш, як програма її обробить.
Результат тижня: керуватимеш автопілотом на Python через MAVLink і виконуватимеш автономну місію в симуляції без ручного пульта.
● з чого складається цифрове зображення: кадр, пікселі, кольорові канали;● базова обробка: переведення в чорно-біле, розмиття, виділення контурів;● рамка навколо об'єкта й пошук його центру;● частота кадрів (скільки зображень за секунду встигає обробити програма);● різниця між координатами на картинці й координатами в реальному світі.
Практика (перевіряється): побудуєш ланцюг «камера → кадр → пошук об'єкта → рамка → центр» і виведеш, наскільки об'єкт зміщений від центру кадру (вправо/вліво, вгору/вниз у пікселях).
Результат тижня: програма визначатиме, де в кадрі знаходиться об'єкт відносно центру.
● модель камери: фокусна відстань, спотворення об'єктива, матриця камери;● калібрування — вимірювання «характеру» конкретної камери, щоб виправити спотворення;● AprilTag / ArUco — спеціальні мітки-квадрати відомого розміру, за якими можна точно визначити відстань і положення;● оцінка положення мітки: як за її кутами програма рахує, де вона в просторі;● перехід від пікселів на картинці до метрів у реальності.
Практика (перевіряється): відкалібруєш камеру за друкованою шахівницею, збережеш результат калібрування у файл і отримаєш координати мітки (вправо, вгору, відстань до неї) у метрах відносно камери.
Результат тижня: переведеш об'єкт із пікселів у справжню відстань у метрах і побачиш, що координати змінюються правильно, коли рухаєш мітку.
● системи координат: зображення, камера, корпус дрона, зовнішня (де північ, схід, низ);● чому в камери й у дрона осі спрямовані по-різному й це створює плутанину, перенесення й поворот координат між системами;● матриця повороту й кути нахилу (крен, тангаж, курс) простими словами;● послідовне складання кількох перетворень в одне.
Практика (перевіряється): напишеш модуль переведення координат із системи камери в систему корпусу дрона й далі в зовнішню систему, і перевіриш його на контрольних випадках (ціль прямо перед дроном, праворуч, знизу, камера нахилена, дрон повернутий на 90°).
Результат тижня: переведеш ціль із системи координат камери в систему дрона й передбачиш знак координати ще до запуску коду.
● як власний нахил і поворот дрона впливають на те, де насправді знаходиться побачена ціль;● переведення цілі в зовнішню систему координат з урахуванням положення дрона;● затримка (latency) — скільки часу проходить від зйомки кадру до готової команди;● застарілий вимір — коли дані вже не відповідають реальності;● чому правильно розпізнана ціль може все одно привести до неправильного руху дрона.
Практика (перевіряється): візьмеш нахили дрона із симулятора й порахуєш положення цілі в зовнішній системі координат; заміряєш затримку на кожному етапі (зйомка → розпізнавання → розрахунок → команда) і відкидатимеш виміри, які застаріли понад допустимий поріг.
Результат тижня: збереш повний ланцюг «камера → положення цілі з поміткою часу» й пояснюватимеш, чому затримка небезпечніша за неточність.
● нейромережа-детектор простими словами: як вона вчиться впізнавати об'єкти на прикладах;● архітектури YOLO — швидкі детектори, придатні для роботи в реальному часі;● датасет — набір зображень із розміткою (де саме на кожному фото потрібний об'єкт);● донавчання готової моделі під власну задачу замість навчання з нуля;● як оцінити, чи добре модель розпізнає.
Практика (перевіряється): розмітиш власний набір зображень і донавчиш готовий детектор упізнавати потрібний об'єкт, після чого перевіриш його точність на нових кадрах.
Результат тижня: навчиш нейромережу впізнавати довільний об'єкт, а не лише спеціальні мітки.
● запуск моделі на бортовому комп'ютері (NVIDIA Jetson) — маленькому комп'ютері на самому дроні;● прискорення й стиснення моделі, щоб вона встигала працювати в реальному часі;● супровід об'єкта в кадрі (трекінг) — утримання тієї самої цілі від кадру до кадру;● повторне впізнавання цілі після того, як вона на мить зникла з поля зору;● вбудовування нейромережевого розпізнавання в наявний ланцюг зору замість міток або поряд з ними.
Практика (перевіряється): підключиш вихід детектора (рамка об'єкта → центр → положення) у ланцюг переведення координат із Блоку 2 і порівняєш затримку нейромережевого розпізнавання з розпізнаванням за мітками.
Результат тижня: розпізнаватимеш довільні об'єкти нейромережею й передаватимеш ціль у логіку автономності.
● як із положення цілі в кадрі отримати команду «куди рухатись»: похибка по горизонталі, вертикалі та відстані;● утримання цілі в центрі кадру під час руху апарата (візуальне стеження);● підхід до цілі за вектором: скорочення відстані з корекцією напрямку;● точна посадка (precision landing) як окремий випадок наведення — зведення до цілі вниз, до нуля висоти;● повідомлення LANDING_TARGET: у якій системі координат і як часто передавати● автопілоту положення цілі;● перевірка, що ціль бачима й дані коректні, перш ніж їм довіряти.
Практика (перевіряється): спершу напишеш генератор штучної цілі (без камери), який передає автопілоту положення цілі, перевіриш правильність системи координат, знаків і частоти; потім заміниш штучну ціль на реальну мітку AprilTag і простежиш один вимір крізь усю систему: камера → програма → переведення координат → автопілот.
Результат тижня: зводитимеш дрон на побачену камерою ціль і передаватимеш автопілоту її положення в реальному часі.
● машина станів наведення: старт → готовність → зліт → пошук → захоплення цілі → супровід → зниження → посадка;● аварійні режими й переривання місії, коли щось іде не так;● підтвердження цілі за кілька кадрів поспіль замість реакції на одне випадкове спрацювання;● як не дати апарату почати зведення від однієї помилкової детекції;● обробка появи, зникнення й повторної появи цілі.
Практика (перевіряється): напишеш модуль поведінки, який на вхід отримує стан дрона, стан цілі й час, а на виході видає поточний етап місії й команду; протестуєш його на сценаріях, коли ціль з'явилася, зникла, знову з'явилася, стоїть далеко від центру або розпізнається нестабільно.
Результат тижня: побудуєш логіку, яка веде апарат від пошуку цілі до зведення на неї й приймає рішення за станом системи.
● відсів хибних вимірів — коли координата раптом «стрибає» в неможливе місце;● згладжування даних, щоб прибрати дрібні коливання;● рівень довіри до цілі й перевірка, чи не застаріли її дані;● сторожовий таймер (watchdog) — контроль, що всі частини системи ще працюють;● перелік типових відмов і заздалегідь визначена реакція на кожну.
Практика (перевіряється): навмисно спровокуєш збої (ціль зникла, камера зависла, зв'язок обірвався, координата стрибнула на 20 метрів) і пропишеш у файлі-таблиці, як система має реагувати на кожен випадок; проведеш щонайменше 10 таких тестів.
Результат тижня: зробиш так, що апарат поводиться передбачувано під час зведення на ціль навіть у збоях, а не тільки в ідеальних умовах.
Практика (перевіряється): збереш наскрізну систему, яка виконує сценарій готовність → зліт → політ у зону пошуку → розпізнавання цілі → наведення й вирівнювання над нею → точна посадка, і проженеш її через щонайменше 10 сценаріїв (ціль по центру, збоку, тимчасово втрачена, з шумом у координатах, із затримкою, із розривом зв'язку, звичайне зведення).
Оформиш інженерний пакет: діаграма архітектури, опис проєкту (README), логи типових запусків (успішний / втрата цілі / затримка / хибний вимір), метрики (частота кадрів, затримка, точність зведення, точність посадки, час відновлення після втрати цілі), таблиця відмов, короткий демозапис.
Результат: збереш робочий прототип системи наведення на візуальну ціль — від камери до точної посадки в одній системі, зведеній твоїми руками.
Оглядово розберешся, як цей самий ланцюг наведення масштабується далі: ROS 2 (розподіл системи на незалежні вузли), Gazebo (повний симулятор фізики й камери), навігація без GPS (VIO — визначення власного руху за камерою й гіроскопом). Це матеріал для розуміння напрямку розвитку, а не практичне навчання.
/ (01)
/ (05)
/ (02)
/ (06)
/ (03)
Ти будуєш машину станів наведення та політики аварійних реакцій, за яких система працює передбачувано під час зведення на ціль, а не лише в ідеальних умовах.
Ти проводиш ціль від камери через детекцію, оцінку положення й переведення координат до автопілота — з урахуванням затримок і хибних вимірів.
Ти оглядово розумієш, як масштабувати систему на ROS 2, Gazebo й навігацію без GPS, і що вивчати для наступного рівня.
Ти пишеш бортове програмне забезпечення на Python, що керує ArduPilot через MAVLink і перевіряє реальний стан апарата.
Ти самостійно зводиш усі навички в одну робочу систему — від зльоту через захоплення цілі до наведення й точної посадки — і маєш повний інженерний пакет цього сценарію.
/ (04)
Ти навчаєш детектор під власну задачу й вбудовуєш його в ланцюг наведення замість маркерів або поряд з ними.
Так, якщо в тебе є база Python (цикли, функції, класи). Досвід польотів — перевага, але не вимога. Курс веде від архітектури автопілота до повної автономної місії, і кожен тиждень має практичний результат, без якого не переходиш далі.
Практика — основа. Кожен модуль закривається завданням, яке перевіряє ментор: код, логи, критерії переходу. Наприкінці ти збираєш робочий прототип, а не конспект.
Ні. Увесь autonomy-стек відпрацьовується в симуляції (SITL і Gazebo). Реальне залізо опціональне на ранніх модулях зору — вистачить звичайної веб-камери й друкованого маркера. Потрібна Linux-система (Ubuntu) або віртуальна машина.
Це відкритий галузевий стандарт автономності БПЛА з реальним застосуванням. Курс дає системне мислення autonomy-інженера — розкладати задачу від сенсора до контролера — тому після нього ти орієнтуєшся й у суміжних інструментах, а не заучуєш один набір команд.