Практичний курс програмування автономних місій

Python Drone Programming

Самостійний курс з абсолютного нуля, який вчить Python через зрозумілі польотні місії. Учень починає з кількох команд, одразу бачить траєкторію, координати та висоту в симуляторі, а потім без різких стрибків освоює змінні, умови, цикли, функції, колекції, датчики, обробку помилок і тестування. Основний курс проходиться на віртуальному дроні й не потребує обладнання; необов'язковий фінальний модуль «Реальний політ» показує, як виконати той самий маршрут на справжньому DJI Tello через Android-застосунок. Курс пов'язує навчальний API з інженерною логікою PX4, ArduPilot і ROS: системами координат, етапами місії, телеметрією, preflight-перевірками, скінченними автоматами і failsafe. Це підготовка мислення; підключення справжнього дрона винесене в необов'язковий модуль 9. Оновлена траєкторія навчання поступово переводить учня з рівня Beginner на Engineer і Professional. Кожна місія проходить preflight, вибір режиму, arm, політ, land і disarm; покроковий відладчик пов'язує рух із рядком, що виконується, а сервер виставляє оцінку за безпекою, маршрутом, ефективністю і телеметрією.

З абсолютного нуляВіртуальний полігонДрон не обов'язковийМожна з реальним Tello
44уроків12 тижнівпрограма9модулівЗ абсолютного нулярівень
Перший модуль безкоштовний після реєстрації, решта модулів і Android-застосунок — за підпискою. Прогрес зберігається автоматично.
Py🚁
Програмування дронів
82%практика
18%теорія

Пишіть Python, запускайте місію і одразу спостерігайте траєкторію, телеметрію та результат перевірки.

✓ Теорія лише для поточного завдання✓ Практика в кожному уроці✓ Підказки без готової відповіді✓ Підсумковий проєкт
→
Самостійний маршрут з абсолютного нуля

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

Після курсу

Навички, які ви застосуєте самостійно

Програма побудована від простих дій до повноцінної підсумкової роботи.

01

Розуміти локальні координати X/Y/Z, напрямок курсу, швидкість, час і контрольні точки

02

Програмувати маршрути через змінні, цикли, функції та колекції Python

03

Використовувати віртуальні датчики, умови й алгоритми обходу перешкод

04

Враховувати батарею, вітер, геозону, аварійну посадку і повернення додому

05

Розділяти планування місії, виконання, телеметрію і перевірку результату

06

Зібрати автономну інспекційну місію і підготувати її до рев'ю в портфоліо

07

Співвідносити навчальну місію з архітектурою PX4, ArduPilot і ROS, не змішуючи систему координат, планування, керування і безпеку

08

Застосовувати сувору модель станів DISARMED → ARMED → FLYING → LANDED → DISARMED

09

Виконувати preflight, обирати режим MISSION/HOLD/RETURN/LAND і читати окремий шар датчиків

10

Відлагоджувати місію покроково за підсвіченим рядком і пояснювати графіки висоти, швидкості та батареї

11

Перенести маршрут із симулятора на справжній DJI Tello (необов'язковий модуль): перевести метри в сантиметри, осі й назви команд

Формат кожного уроку

18% зрозуміти.
82% зробити.

Ми не прибираємо важливу теорію: синтаксис, правила та часті помилки залишаються в уроці. Але основний час відведено самостійній роботі.

1
Розібрати основу

Коротке пояснення і міні-приклад.

≈ 18%
2
Повторити приклад

Змінити дані та перевірити результат.

практика
3
Розв'язати задачу

Зібрати власний варіант за вимогами.

практика
4
Виправити й покращити

Пройти перевірку та провести експеримент.

практика
Програма курсу

9 модулів · 44 уроків

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

01

Перший політ без страху

5 уроків · безкоштовно
○1

Симулятор і перша безпечна місія

20 хв · практика

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

Завдання: Злетіть на 1.5 метра і виконайте посадку. Оформіть порядок команд як зрозумілу послідовність ЗЛІТ → ПОЛІТ → ПОСАДКА у коментарях.

  • Є takeoff() перед рухом
  • Є takeoff з висотою 1.5
  • Політ завершується командою land()
  • За коментарями і порядком команд розрізняються зліт, політ і безпечне завершення
○2

Як читати червону помилку Python

15 хв · практика

Червоний текст на екрані лякає майже кожного новачка — і сьогодні ми зробимо так, щоб він перестав лякати саме вас.

Завдання: У коді нижче є одна навмисна помилка порядку команд. Запустіть його, прочитайте повідомлення про помилку, знайдіть проблемний рядок і виправте порядок так, щоб дрон злетів, перемістився вперед на 1 метр і сів. Оформіть порядок команд як зрозумілу послідовність...

  • Є takeoff() перед рухом
  • Є takeoff перед рухом
  • Політ завершується посадкою land()
  • За коментарями і порядком команд розрізняються зліт, політ і безпечне завершення
○3

Вперед, назад, вгору і вниз

15 хв · практика

Дрон уже піднімається і сідає за вашою командою — тепер навчимо його рухатись у просторі.

Завдання: Злетіть на 2 м, пролетіть вперед 4 м, назад 1 м і сядьте. Оформіть порядок команд як зрозумілу послідовність ЗЛІТ → ПОЛІТ → ПОСАДКА у коментарях.

  • Є takeoff перед рухом
  • Є рух вперед і назад
  • Маршрут закінчується посадкою land
  • За коментарями і порядком команд розрізняються зліт, політ і безпечне завершення
○4

Курс і повороти праворуч і ліворуч

15 хв · практика

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

Завдання: Пролетіть 3 м вперед, поверніть праворуч на 90° і пролетіть ще 2 м. Оформіть порядок команд як зрозумілу послідовність ЗЛІТ → ПОЛІТ → ПОСАДКА у коментарях.

  • Є takeoff перед рухом
  • Два відрізки з'єднані поворотом
  • Курс змінюється на 90 градусів
  • Політ завершується land
○5

Проєкт 1/8: маршрут до точки огляду

25 хв · практика

Перший етап наскрізного проєкту: складаємо все, що вивчили в модулі, в один закінчений політ.

Завдання: Долетіть до точки (5, 6, 2): 4 м вперед, поворот праворуч, 3 м вперед, одна секунда очікування і посадка. Оформіть порядок команд як зрозумілу послідовність ЗЛІТ → ПОЛІТ → ПОСАДКА у коментарях.

  • Є takeoff перед рухом
  • Дві контрольні точки пройдені по порядку
  • Є зупинка біля цілі
  • Політ завершений посадкою
✓ТЕСТ

Перевірка теорії модуля

5 питань · результат у відсотках
02

Координати, швидкість і контрольні точки

4 уроків · 🔒 підписка
○1

Локальна система координат X, Y, Z

25 хв · практика

Читаємо положення дрона як три незалежні координати.

Завдання: Пролетіть до позиції X=5, Y=4, Z=2 звичайними командами і виведіть координати. Збережіть явне позначення `FRAME_LOCAL_ENU` і виконуйте всі точки в одній локальній системі координат.

  • Є takeoff перед рухом
  • Запитана телеметрія position
  • Надруковані x, y, z
  • Відвідана точка
○2

Абсолютні точки і move_to

20 хв · практика

Переходимо від відносних відрізків до явних координат.

Завдання: Відвідайте точки (4, 3, 2), (7, 6, 3) і (10, 4, 2) по порядку, потім сядьте. Збережіть явне позначення `FRAME_LOCAL_ENU` і виконуйте всі точки в одній локальній системі координат.

  • Є takeoff перед рухом
  • Три move_to розташовані по порядку
  • Висота змінюється до 3 і повертається до 2
  • Політ завершений land
○3

Швидкість, час і витрата батареї

20 хв · практика

Розуміємо ціну маршруту і обираємо швидкість свідомо.

Завдання: Встановіть швидкість 4 м/с, пролетіть до (10, 5, 2), виведіть батарею і сядьте. Збережіть явне позначення `FRAME_LOCAL_ENU` і виконуйте всі точки в одній локальній системі координат.

  • Є takeoff перед рухом
  • Швидкість встановлена до маршруту
  • Батарея прочитана після руху
  • Політ завершений land
○4

Проєкт 2/8: координатний маршрут інспекції

35 хв · практика

Переводимо перший маршрут проєкту на явні точки і швидкість.

Завдання: Оновіть mission.py: збережіть висоту 2.5 м і швидкість 3 м/с у змінних cruise_height і cruise_speed (як у стартовому коді), долетіть за точками (4,4), (8,7), (12,5), почекайте 2 секунди і сядьте. Збережіть явне позначення `FRAME_LOCAL_ENU` і виконуйте всі точк...

  • Є takeoff перед рухом
  • Висота і швидкість зберігаються в змінних cruise_height і cruise_speed
  • Три точки пройдені по порядку
  • Є hover і land
✓ТЕСТ

Перевірка теорії модуля

5 питань · результат у відсотках
03

Python для повторюваних маршрутів

4 уроків · 🔒 підписка
○1

Змінні і обчислення маршруту

25 хв · практика

Прибираємо випадкові числа з команд і розраховуємо точки.

Завдання: Через змінні обчисліть точку (9, 6, 2) зі старту (2,2) і зміщень 7 і 4. У move_to передайте всі три значення змінними — і X, і Y, і висоту (height, вона вже є в стартовому коді) — жодного числа прямо в дужках move_to. Збережіть `MISSION_MODE = "AUTO_MISSION"`...

  • Є takeoff перед рухом
  • Координати розраховані операторами
  • move_to отримує всі три аргументи змінними, включно з висотою
  • Політ завершений land
○2

Цикл for і повторення маневру

25 хв · практика

Використовуємо повторення без копіювання однакових рядків.

Завдання: Збережіть довжину сторони в змінній side = 3, потім за допомогою одного for пролетіть квадрат: усередині циклу викликайте drone.forward(side) — змінну, а не число напряму — і сядьте у стартовій точці. Збережіть `MISSION_MODE = "AUTO_MISSION"` і побудуйте план...

  • Є takeoff перед рухом
  • Є range(4)
  • forward викликається зі змінною side, а не з числом
  • Обидві команди мають однаковий відступ
○3

Функції як маневри місії

30 хв · практика

Даємо повторюваному маршруту ім'я і параметри.

Завдання: Створіть функцію fly_square(side), викликайте її зі стороною 2 між takeoff() і land(), і завершіть місію. Збережіть `MISSION_MODE = "AUTO_MISSION"` і побудуйте план місії через іменовані значення та скінченні кроки, а не захардкоджені числа.

  • Є takeoff() перед рухом
  • Функція приймає side
  • Усередині функції є цикл
  • Зліт і посадка знаходяться в основному сценарії
○4

Проєкт 3/8: функції інспекції

40 хв · практика

Виділяємо налаштування, переліт і огляд у невеликі функції.

Завдання: Перепишіть mission.py через fly_to(x,y,z) і inspect(seconds), відвідайте (5,5,2) і (10,7,2), поверніться додому на висоті 2 м і сядьте. Висоту в обох викликах fly_to передавайте змінною height (вона вже є в стартовому коді), а не числом 2 — так само, як у retu...

  • Є takeoff перед рухом
  • Є дві функції з параметрами
  • Основний сценарій викликає їх
  • Обидва виклики fly_to отримують висоту змінною height, а не числом
✓ТЕСТ

Перевірка теорії модуля

5 питань · результат у відсотках
04

Маршрути як дані

4 уроків · 🔒 підписка
○1

Список контрольних точок

30 хв · практика

Зберігаємо маршрут окремо від алгоритму виконання.

Завдання: Створіть список із точок (3, 5, 2), (7, 8, 3), (11, 5, 2) — саме в такому запису, з пробілом після коми — і виконайте його одним циклом. Додайте `MISSION_ITEM_FRAME` і зберігайте маршрут окремо від функції, яка його виконує.

  • Дані відділені від алгоритму
  • Структура обходиться без ручного дублювання команд
  • Місія починається зі злету takeoff() і завершується посадкою land()
  • Маршрут відділений від виконавця і містить явне позначення MISSION_ITEM_FRAME
○2

Кортеж і розпакування координат

25 хв · практика

Читаємо одну точку як незмінну трійку.

Завдання: Створіть два кортежі: home = (2, 2, 2.5) і target = (9, 7, 2.5). Розпакуйте target у x, y, z = target і долетіть до цілі через drone.move_to(x, y, z). Назад долетіть тією самою технікою розпакування — drone.move_to(*home), а не командою drone.return_home() (її...

  • Дані відділені від алгоритму
  • Структура обходиться без ручного дублювання команд
  • Місія починається зі злету takeoff() і завершується посадкою land()
  • Маршрут відділений від виконавця і містить явне позначення MISSION_ITEM_FRAME
○3

Словник налаштувань місії

30 хв · практика

Об'єднуємо іменовані налаштування в одну конфігурацію.

Завдання: Створіть словник із height=3, speed=4, wait=2; застосуйте налаштування через mission[...] і долетіть до точки drone.move_to(8, 6, mission["height"]) — координати 8 і 6 впишіть числами прямо у виклик, а не через окремі змінні x/y (у цьому уроці через словник ід...

  • Дані відділені від алгоритму
  • Структура обходиться без ручного дублювання команд
  • Місія починається зі злету takeoff() і завершується посадкою land()
  • Маршрут відділений від виконавця і містить явне позначення MISSION_ITEM_FRAME
○4

Проєкт 4/8: план місії як дані

45 хв · практика

Виносимо точки і налаштування проєкту з алгоритму.

Завдання: Створіть mission зі speed=3, height=2.5 і трьома іменованими точками (4,5), (9,8), (14,5). Для кожної виконайте move_to(point["x"], point["y"], mission["height"]), mark(point["name"]), hover(point["wait"]), потім поверніться додому і сядьте. Додайте `MISSION_I...

  • Є takeoff перед рухом
  • Маршрут зберігається в словнику mission — точки лежать у mission["waypoints"]
  • Висота на всіх точках — mission["height"], а не своя у кожної
  • Точки обходяться одним циклом
✓ТЕСТ

Перевірка теорії модуля

5 питань · результат у відсотках
05

Датчики і обхід перешкод

5 уроків · 🔒 підписка
○1

Датчик відстані попереду

20 хв · практика

Отримуємо число з віртуального оточення і інтерпретуємо його.

Завдання: Виміряйте відстань максимум до 12 м у змінну distance (як у прикладі вище), виведіть її і сядьте. Спочатку прочитайте показання датчика в змінну, і лише потім використовуйте його — константа `CLEARANCE_M` вгорі файлу лишається як задокументований орієнтир безп...

  • Є takeoff перед рухом
  • Показання датчика збережено у змінну
  • Показання виведене через print
  • Місія завершується посадкою
○2

Умова if і безпечне рішення

25 хв · практика

Пов'язуємо показання датчика з вибором дії.

Завдання: Спочатку збережіть показання в змінну: distance = drone.distance_ahead(...). Якщо distance менше 5 м (if distance < 5:), поверніть праворуч; потім пролетіть 5 м і сядьте. Спочатку прочитайте показання датчика в змінну, і лише потім використовуйте його — конста...

  • Є takeoff перед рухом
  • Показання збережено або використано в умові
  • Рішення залежить від числа
  • Місія завершується посадкою
○3

Сканування кількох напрямків

30 хв · практика

Порівнюємо варіанти і обираємо вільний коридор.

Завдання: Виміряйте front, поверніть праворуч, виміряйте right і летіть 4 м лише якщо right більше front; інакше поверніть ліворуч на 180° і летіть 4 м. Спочатку прочитайте показання датчика в змінну, і лише потім використовуйте його — константа `CLEARANCE_M` вгорі файл...

  • Є takeoff перед рухом
  • Обидва показання збережено в окремі змінні
  • Рішення залежить від порівняння двох чисел
  • Місія завершується посадкою
○4

Ваша карта: обхід перешкоди за своїми правилами

40 хв · практика

Проєктуємо власний полігон у Конструкторі місій і пишемо код, який обходить перешкоду саме на ньому.

Завдання: Спроєктуйте свою карту мінімум з однією перешкодою попереду старту і однією контрольною точкою за нею, збережіть її. Вставте `# scenario: ` першим рядком коду. Потім: зліт, виміряйте distance_ahead і обійдіть перешкоду вбік, якщо вона ближче безпечного порогу,...

  • Код починається з рядка # scenario: з числовим ID
  • Є вимірювання distance_ahead і умова
  • Маршрут завершується return_home і land()
  • Показання датчика збережено в змінну до подальшого використання; іменована константа CLEARANCE_M лишається на місці як довідкова позначка
○5

Проєкт 5/8: реактивний обхід перешкоди

45 хв · практика

Додаємо проєкту рішення на основі датчика.

Завдання: У mission.py створіть avoid_if_needed(5). Після takeoff() виміряйте шлях: якщо перешкода близько, поверніть праворуч, пролетіть 5 м, поверніть ліворуч і продовжіть 6 м до точки (7,8,2). Потім поверніться додому і сядьте. Спочатку прочитайте показання датчика в...

  • Є takeoff() перед рухом
  • Рішення винесено у функцію
  • Є показання датчика і розгалуження
  • Маршрут не перетинає перешкоду
✓ТЕСТ

Перевірка теорії модуля

5 питань · результат у відсотках
06

Автономний алгоритм і ресурси

5 уроків · 🔒 підписка
○1

Цикл while і умова завершення

25 хв · практика

Повторюємо дію, поки мета не досягнута, але обмежуємо кількість спроб.

Завдання: Через while з лічильником steps (як у прикладі вище) виконайте не більше чотирьох кроків по 1.5 м і завершіть місію. Явно визначте умову зупинки алгоритму до вичерпання ресурсу чи виходу за межі — MISSION_STATES вгорі файлу документує повний перелік станів міс...

  • Є takeoff() перед рухом
  • Є явний ліміт повторення (лічильник steps)
  • Лічильник зростає всередині циклу
  • Після алгоритму є посадка
○2

Пошуковий маршрут «змійка»

35 хв · практика

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

Завдання: Побудуйте змійку з трьох проходів довжиною 4 м. Після кожного проходу, крім останнього, розвертайтесь на 180° через drone.turn_right(180) — так наступний drone.forward(4) полетить у зворотний бік по Y, а не продовжить попередній курс. Одразу після розвороту зм...

  • Є takeoff() перед рухом
  • Є явний ліміт проходів (range(3))
  • Напрямок зміщення чергується через row % 2
  • Після алгоритму є посадка
○3

Батарея і рішення про повернення

30 хв · практика

Перевіряємо ресурс до наступної ділянки і вчасно завершуємо місію.

Завдання: Спочатку долетіть до дальньої точки командою drone.move_to(12, 6, 2), потім прочитайте батарею. Якщо вона нижче 90%, повертайтесь додому через drone.return_home(2); інакше відвідайте додаткову точку через drone.move_to(...) — не forward, точка задана координат...

  • Є takeoff перед рухом
  • Батарея прочитана в змінну до рішення
  • Рішення (return_home або move_to) залежить від запасу батареї
  • Політ завершується посадкою
○4

Ваша карта: адаптивний патруль з урахуванням батареї

40 хв · практика

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

Завдання: Спроєктуйте карту мінімум із двома контрольними точками і однією перешкодою, збережіть і вставте її ID першим рядком. Впишіть у points координати зі своєї карти. Почніть зі злету takeoff(). Перед кожним перельотом перевіряйте батарею (не нижче 35) і датчик від...

  • Код починається з рядка # scenario: з числовим ID
  • Є takeoff() перед рухом
  • Цикл використовує battery_level і distance_ahead перед кожним перельотом
  • Є break на випадок низької батареї
○5

Проєкт 6/8: адаптивний патруль

50 хв · практика

Об'єднуємо список точок, датчик і обмеження батареї.

Завдання: Створіть patrol із трьох точок і функцію can_continue(min_battery), яка читає battery = drone.battery_level() і повертає battery >= min_battery. Перед кожною точкою перевіряйте can_continue(55) і distance_ahead не менше 3; за небезпеки виконайте бокове зміщенн...

  • Є takeoff() перед рухом
  • Є функції перевірки ресурсу і шляху
  • can_continue зберігає battery_level у змінну battery і повертає battery >= min_battery
  • Цикл може закінчитись через break
✓ТЕСТ

Перевірка теорії модуля

5 питань · результат у відсотках
07

Надійність, телеметрія і тестування

4 уроків · 🔒 підписка
○1

Винятки і гарантована посадка

25 хв · практика

Забезпечуємо безпечне завершення навіть при помилці Python.

Завдання: Після takeoff() розмістіть потенційно помилкове налаштування швидкості і політ у try, а land() — у finally. Усередині try задайте drone.set_speed(3) і пролетіть drone.forward(3): саме на цю відстань розрахована контрольна точка. FAILSAFE_ACTION вгорі файлу док...

  • Є явна перевірка або журнал
  • Порядок стану враховано
  • Посадка гарантована
  • FAILSAFE_ACTION лишається на місці як задокументована політика аварійного завершення
○2

Журнал телеметрії і рішень

25 хв · практика

Записуємо не лише команди, а й причину рішення.

Завдання: Після takeoff() долетіть до двох точок — drone.move_to(5, 4, 2) і drone.move_to(8, 7, 2). Потім відмітьте поточний етап через drone.mark("..."), виведіть координати (x, y, z = drone.position()) і батарею, потім виконайте land(). FAILSAFE_ACTION вгорі файлу док...

  • Є явна перевірка або журнал
  • Порядок стану враховано
  • Посадка гарантована
  • FAILSAFE_ACTION лишається на місці як задокументована політика аварійного завершення
○3

Перевірки assert і тестовані функції

30 хв · практика

Відділяємо обчислення маршруту від команд польоту.

Завдання: Створіть inside_geofence(x,y) і assert для допустимої і недопустимої точки, потім після takeoff() летіть лише до допустимої точки — drone.move_to(12, 9, 2) — і завершіть land(). FAILSAFE_ACTION вгорі файлу документує політику аварійного завершення місії — наві...

  • Є явна перевірка або журнал
  • Порядок стану враховано
  • Посадка гарантована
  • FAILSAFE_ACTION лишається на місці як задокументована політика аварійного завершення
○4

Проєкт 7/8: відмовостійка місія

45 хв · практика

Додаємо геозону, перевірки і гарантоване завершення.

Завдання: Перевірте всі точки одним рядком — `assert all(inside_geofence(x, y) for x, y, z in points)` — до зльоту, виконайте takeoff(), дві інспекції в try, запишіть телеметрію, а в finally поверніться додому і сядьте. FAILSAFE_ACTION вгорі файлу документує політику ав...

  • До зльоту всі точки перевірені одним assert all(...) з генератором
  • Є takeoff() перед рухом
  • Політ знаходиться в try
  • У finally є повернення і посадка
✓ТЕСТ

Перевірка теорії модуля

5 питань · результат у відсотках
08

Інженерія місії і фінальний проєкт

6 уроків · 🔒 підписка
○1

Контракт віртуального виконавця

35 хв · практика

Відділяємо алгоритм місії від конкретної візуалізації.

Завдання: Створіть run_inspection(vehicle, points, height), виконайте зліт, дві точки навчальним drone, поверніться і сядьте. MISSION_PROTOCOL вгорі файлу документує версію навчального протоколу місії — лишіть цей рядок недоторканим, навіть якщо власне рішення не зверта...

  • Функція отримує vehicle і дані
  • Є vehicle.takeoff() перед рухом
  • Усередині немає створення SDK
  • Виклик використовує навчальний drone
○2

Геозона і перевірка плану місії

30 хв · практика

Перетворюємо обмеження на виконувані правила.

Завдання: Створіть validate_mission(points), що відхиляє вихід за X 0..20, Y 0..14 і Z 0..8; перевірте план assert, потім виконайте takeoff(), політ і завершіть land(). MISSION_PROTOCOL вгорі файлу документує версію навчального протоколу місії — лишіть цей рядок недотор...

  • Функція перевіряє всі три осі
  • До takeoff є assert
  • Є takeoff() перед рухом
  • Місія проходить допустимі точки і завершується land()
○3

Декомпозиція фінальної місії

40 хв · практика

Збираємо вимоги, дані, функції і критерії перевірки до написання коду.

Завдання: Створіть робочий каркас чотирьох функцій, виконайте зліт, дві прості точки, виведіть телеметрію, поверніться додому через drone.return_home() і завершіть land(). MISSION_PROTOCOL вгорі файлу документує версію навчального протоколу місії — лишіть цей рядок недо...

  • Є чотири функції
  • Є takeoff() перед рухом
  • Основний сценарій викликає run_mission
  • Перед посадкою є drone.return_home()
○4

Проєкт 8/8: автономна Safe Inspection Mission

60 хв · практика

Завершуємо портфоліо-проєкт на полігоні з перешкодою і вітром.

Завдання: Завершіть mission.py: виконайте takeoff(), встановіть швидкість 3 м/с, перевірте три точки (5,4,2.5), (11,9,3), (17,5,2.5), обійдіть вежу через безпечну точку (12,4,3), відмітьте і огляньте кожну ціль, перевірте батарею, запишіть телеметрію, поверніться додому...

  • Є takeoff() перед рухом
  • Три цілі і обхідна точка пройдені по порядку
  • Використовуються функції, дані, датчик і батарея
  • Є геозона, журнал і finally
○5

Захоплення і перенесення вантажу

30 хв · практика

Вчимося піднімати і переносити вантаж захопленням дрона — без перешкод, лише сама механіка.

Завдання: Повторіть той самий сценарій самостійно: злетіть, долетіть до вантажу, приземліться і підніміть його, злетіть і долетіть до сусідньої точки, приземліться і відпустіть вантаж, поверніться додому і сядьте. MISSION_PROTOCOL вгорі файлу документує версію навчально...

  • Кожен політ починається з takeoff()
  • drone.grab() викликаний одразу після посадки на вантаж
  • drone.release() викликаний біля сусідньої точки
  • Дрон повертається додому і сідає
○6

Ваша карта: маршрут доставки вантажу

40 хв · практика

Проєктуємо в Конструкторі місій точку вантажу і зону здачі та пишемо код, який піднімає вантаж і доставляє його саме на своїй карті.

Завдання: Спроєктуйте свою карту мінімум з одним вантажем (і, за бажанням, зоною здачі), збережіть її. Вставте `# scenario: ` першим рядком коду. Злетіть, долетіть до вантажу і приземліться точно на ньому, підніміть вантаж, знову злетіть, долетіть до зони здачі і відпус...

  • Код починається з рядка # scenario: з числовим ID
  • drone.grab() викликаний одразу після посадки на вантаж своєї карти
  • drone.release() викликаний біля зони здачі (з урахуванням обраної техніки, якщо вона задана)
  • Після кожної посадки перед рухом є новий takeoff()
✓ТЕСТ

Перевірка теорії модуля

5 питань · результат у відсотках
09

Реальний політ: від симулятора до Tello (необов'язково)

7 уроків · 🔒 підписка
○1

Реальний політ: що це і що вам потрібно

15 хв · практика

Фінальний необов'язковий модуль: виконуємо маршрут на справжньому DJI Tello з телефона. Дізнаємось, що потрібно, чого чекати і чим реальний політ відрізняється від симулятора.

Завдання: Складіть «карту готовності»: напишіть, який у вас дрон (модель Tello), який телефон (Android і версія), де саме ви літатимете (кімната і розмір), і чого вам ще бракує та як ви це вирішите. Якщо дрона поки немає — напишіть це й опишіть, як і коли його отримаєте...

  • Названо модель дрона Tello.
  • Вказано Android-телефон і його версію.
  • Описано місце польоту та його розмір.
  • Сказано, чого бракує і як це вирішити.
○2

Безпека: чек-лист перед реальним польотом

25 хв · практика

У симуляторі помилка коштує перезапуску, на реальному дроні — зламаних гвинтів чи травми. Складаємо чек-лист, який проходимо перед кожним запуском.

Завдання: Складіть власний чек-лист мінімум із шести пунктів. Обов'язково згадайте заряд батареї, людей поруч, перешкоди на маршруті, кнопку STOP і кнопку EMERGENCY — і поясніть різницю між ними.

  • Не менше шести конкретних пунктів.
  • Є перевірка заряду батареї.
  • Є правило щодо людей і тварин поруч.
  • Є правило щодо перешкод на маршруті.
○3

Встановлення застосунку й підключення до дрона

35 хв · практика

Встановлюємо RealDrone Agent на телефон, підключаємось до Wi-Fi Tello і переконуємось, що застосунок бачить дрон і його батарею.

Завдання: Виконайте підключення на своєму дроні й запишіть звіт: яку Wi-Fi мережу використали (`TELLO-...`), яку кнопку натискали, який стан показав застосунок (CONNECTED) і який заряд (команда `battery`). Додайте, що зробили з автоперемиканням мереж на телефоні.

  • Вказано назву Wi-Fi мережі дрона.
  • Вказано кнопку «Підключити».
  • Вказано стан CONNECTED.
  • Вказано команду battery і заряд.
○4

Перший політ: злетіти, пролетіти пів метра, сісти

35 хв · практика

Перший запуск на справжньому Tello: три команди, повна передпольотна перевірка і тренування кнопки STOP. Без дрона достатньо описати, що ви зробили б і що очікуєте побачити.

Завдання: Складіть і (якщо маєте дрон) виконайте список: злетіти, пролетіти вперед 50 см, сісти. Запишіть у файлі: сам список команд, що показав журнал застосунку (наприклад, відповіді ok), чи сів дрон там, де очікували, і що ви зробили, щоб потренувати кнопку STOP.

  • Є повний список команд: зліт, рух уперед на 50 см, посадка.
  • Описано, що показав (або має показати) журнал.
  • Описано, як потренована кнопка STOP.
○5

Симулятор і Tello: що спільне, а що ні

20 хв · практика

Складаємо словник перекладу: кожна команда симулятора — відповідна команда застосунку RealDrone Agent. Одиниці виміру й набір команд відрізняються, і саме це ламає перший реальний політ.

Завдання: Заповніть праву частину таблиці: допишіть після стрілки команду для застосунку RealDrone Agent. 1 м = 100 см.

  • Для кожного рядка симулятора вказано команду застосунку.
  • Метри переведено в цілі сантиметри.
  • Для `turn_left()` вказано команду `rotate_left`.
○6

Python: перекладач місії в команди Tello

40 хв · практика

Пишемо на Python функцію to_tello(), яка перетворює список кроків симулятора на текстові рядки для RealDrone Agent — те, що ви в попередньому уроці робили вручну.

Завдання: Допишіть функцію to_tello(steps). Вона отримує список кроків симулятора і повертає список рядків для застосунку. Правила: takeoff (з висотою в метрах або без), land, forward/left/right/up/down (метри → см), backward → back, turn_right → rotate_right, turn_left...

  • Функція to_tello(steps) повертає список рядків.
  • Метри переводяться в цілі сантиметри через round().
  • backward, turn_*, hover перейменовуються.
  • mark пропускається — аналога на Tello немає.
○7

Квадрат 2×2 м на справжньому дроні

35 хв · практика

Підсумок модуля: складаємо маршрут «квадрат за годинниковою стрілкою» точками й (якщо є Tello) виконуємо його на дроні.

Завдання: Складіть у файлі square.txt список команд для квадрата 2×2 м за годинниковою стрілкою: `takeoff`, `speed 40`, чотири `goto` у правильному порядку, `land`. Якщо маєте Tello — вставте список у застосунок, виконайте і допишіть у кінці файлу рядок «Результат:» з т...

  • Список починається з takeoff і закінчується land.
  • Чотири точки goto йдуть по колу за годинниковою стрілкою.
  • Сторона квадрата — 200 см.
✓ТЕСТ

Перевірка теорії модуля

5 питань · результат у відсотках
ПІДСУМКОВИЙ ПРОЄКТ
Py🚁
Робота, яку можна показати і розвивати далі
Зберіть усе разом

Safe Inspection Mission

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

  • ✓Політ лише через безпечний високорівневий API
  • ✓Маршрут за впорядкованими контрольними точками
  • ✓Багаторазові функції та структури даних місії
  • ✓Обхід перешкод за показаннями віртуального датчика
  • ✓Контроль батареї, меж, висоти та обов'язкової посадки
  • ✓Телеметрія і зрозумілий журнал ключових рішень
  • ✓Перевірювана фінальна місія на віртуальному полігоні
  • ✓Вихідний код, конфігурація сценарію та README для портфоліо
  • ✓Явні етапи PREFLIGHT → TAKEOFF → MISSION → RETURN → LAND і задокументована стратегія FAILSAFE
  • ✓Звіт серверної оцінки місії з відсотком і розбивкою за чотирма критеріями
82% практики

Почніть із першого невеликого завдання

Реєстрація займає менше хвилини. Уроки та прогрес будуть доступні в особистому кабінеті.

Створити акаунт →