k00. Обзор «UAV Python Pro»
UAV Python Pro · Конспект K00 · Модуль M0. Старт: профессия, карта курса, правила работы · Редакция 4.0
Нулевой урок курса Python для программиста беспилотных летательных аппаратов и робототехники. Мы ещё не ставим программы и не пишем рабочий код: собираем понятную картину — кто такой программист БПЛА, из каких частей состоит система дрона, где в ней живёт Python, почему сначала симулятор Copter, а плата Matek F405 VTOL — позже, и как мы учимся с ментором без опасных скачков.
Автопилот на полётном контроллере уже умеет удерживать аппарат в воздухе. Ваш Python не заменяет эту работу, а разговаривает с автопилотом на языке сообщений MAVLink: читает телеметрию и ставит задачи. Позже добавятся зрение и сопровождение цели, в том числе участки без GPS. Всё новое сначала отрабатывается в симуляторе SITL на Windows, без настоящих пропеллеров.
Содержание
1. Цели урока
После этого урока вы будете уметь своими словами, без подсматривания в текст:
- объяснить, чем занимается программист беспилотников в нашем понимании профессии, и чем он не обязан быть;
- перечислить основные части системы «дрон + программы» и указать, где в этой схеме живёт Python;
- дать простые рабочие определения: полётный контроллер, MAVLink, наземная станция GCS, симулятор SITL, бортовой компьютер companion;
- понять карту курса M0–M12, зачем нужны контрольные точки (гейты), почему сначала коптер в симуляторе, а Matek F405 VTOL — позже;
- знать ритуал работы с ментором, маркеры отката и что писать, если фраза в конспекте непонятна;
- принять правило безопасности: до специального допуска нет arm на реальном аппарате с установленными пропеллерами.
2. Словарь урока
Прочитайте словарь спокойно один раз до основного текста. Заучивать наизусть не нужно: достаточно узнать слово «в лицо», когда оно встретится ниже.
| Термин | Простыми словами |
|---|---|
| БПЛА (UAV) | Беспилотный летательный аппарат. В быту почти всегда говорят «дрон». |
| Полётный контроллер (FC) | Маленькая плата-компьютер на раме. В полёте она очень часто читает датчики и подправляет моторы, чтобы аппарат не перевернулся и летел куда нужно. Целевая плата курса — Matek F405 VTOL. |
| Автопилот / прошивка ArduPilot | Программа, которая постоянно работает внутри полётного контроллера. ArduPilot — известный открытый автопилот; есть варианты для коптера, самолёта, VTOL и других типов. |
| Companion computer | «Компьютер-спутник» на борту рядом с полётным контроллером. У нас это Raspberry Pi: на нём удобно запускать Python, камеру и более «умные» алгоритмы. |
| GCS | Ground Control Station — наземная станция: программа на земле с картой, «приборами», кнопками режимов, загрузкой маршрута и логами. Готовый пример — Mission Planner. |
| MAVLink | Общий язык сообщений между автопилотом, землёй и Raspberry Pi. Это не программа с кнопками, а правила, как упаковывать данные в байты. |
| SITL | Software In The Loop — автопилот запускается как программа на вашем ПК, без настоящего дрона. Главная безопасная песочница обучения. |
| Телеметрия | Поток данных «как дела у дрона»: высота, скорость, батарея, режим полёта, координаты. |
| Команда | Сообщение автопилоту «сделай действие»: взлети, сядь, смени режим, лети в точку. |
| Arm (арминг) | Разрешение моторам вращаться. На живом аппарате с пропеллерами это опасная операция. В симуляторе — учебная и безопасная. |
| Режим полёта | «Характер» поведения автопилота: висеть, лететь по точкам, возвращаться на старт и т.д. |
| Failsafe | Заранее настроенный план на аварию: пропала связь, села батарея — например, вернуться домой или сесть. |
| VTOL | Vertical Take-Off and Landing — взлёт и посадка «по-вертолётному» и полёт вперёд «по-самолётному». Плата Matek F405 VTOL как раз под такие схемы; в курсе VTOL идёт после освоения коптера в симуляторе. |
3. Кто такой программист БПЛА
Представьте обычный дрон: рама, моторы, батарея, датчики и маленькая плата управления. Если дрон уже «умеет летать» под управлением автопилота, зачем программист?
Потому что «уметь летать» — только половина дела. В работе нужно, например:
- автоматически загрузить маршрут из файла;
- в полёте читать высоту, батарею и качество связи;
- записать подробный лог для разбора;
- на борту обработать картинку с камеры и сказать автопилоту: «цель слева, поверни и держи дистанцию»;
- если пропал GPS — перейти на запасной способ ориентирования.
Программист БПЛА в смысле нашей профессии пишет программное обеспечение вокруг автопилота: на земле (наземная станция), на борту (Raspberry Pi), для полезной нагрузки (камера, алгоритмы) и для связки всего этого в одну систему.
На плате Matek F405 VTOL будет прошивка ArduPilot. Она уже умеет стабилизировать положение, держать высоту, менять режимы полёта, возвращаться на точку старта (часто это называют RTL — Return To Launch, «вернись к месту взлёта»). Мы не пишем с нуля эту «рефлекторную» программу внутри полётного контроллера. Мы пользуемся ею через язык сообщений MAVLink.
Грубая схема (детали будут позже):
[Вы и ваш Python на Windows]
│ сообщения MAVLink (USB, сеть UDP или радио)
▼
[Полётный контроллер с ArduPilot]
│ сигналы на регуляторы и моторы
▼
[Моторы, сервоприводы, датчики]
Отдельно на борту:
[Raspberry Pi + ваш Python] ──UART/USB──► [тот же полётный контроллер]
│
└── камера, зрение, свои логи, своя логика задания
Какие роли закрывает курс
Названия должностей на работе бывают разными. Нам важнее четыре навыковых роли, которые вы соберёте по модулям.
| Роль | Что вы делаете | Где в курсе |
|---|---|---|
| Разработчик GCS | Программы на земле: телеметрия, команды, маршруты, логи | Windows, Python, Mission Planner как эталон; позже свой упрощённый GCS |
| Инженер companion | Программы на Raspberry Pi: сервис, связь с автопилотом, камера, решения на борту | Модуль M8 |
| Инженер интеграции | Стыковка портов, протоколов, параметров, безопасные проверки на столе | M3, M4, M9 |
| Дрон + зрение / ИИ | Узнать объект, вести в кадре, сопровождать, участок маршрута без GPS | Модуль M11 |
Чем мы в курсе не занимаемся
- Не пишем свою прошивку автопилота вместо ArduPilot (настраиваем и общаемся с ней — да).
- Не уходим с первого дня в глубокий ROS2.
- Не делаем главной целью «пилотировать руками как на соревнованиях»: нужен автоматический контур через код.
- Не обходим законы: только легальные учебные сценарии, симулятор и безопасный стенд.
4. Из каких частей состоит система дрона
Чтобы техника не превращалась в кашу, разложим систему на пять этажей. «Этаж» — удобная метафора уровня. Каждый этаж стыкуется с соседним через провода, сеть или сообщения протокола.
Пять этажей системы
| Этаж | Что это простыми словами | Пример в нашем курсе | Пишете ли вы это на Python? |
|---|---|---|---|
| 1. Сила и исполнительные механизмы | Батарея, регуляторы оборотов, моторы, сервоприводы | Рама коптера; позже схема VTOL | Нет, Python моторы напрямую не крутит |
| 2. Полётный контроллер | Бортовой компьютер + программа автопилота | Matek F405 VTOL + ArduPilot | Саму прошивку — нет; команды ей — да, через MAVLink |
| 3. Канал связи | Путь байтов: провод, USB, сеть, радио | USB к Mission Planner; UDP в симуляторе; UART между Raspberry Pi и контроллером | Да: открывать порт и сокет |
| 4. Протокол сообщений | Правила «как понимать байты» | MAVLink | Да: pymavlink, позже MAVSDK |
| 5. Прикладные программы | Логика оператора, бортовой сервис, зрение, сценарий задания | Mission Planner, ваш GCS, сервис на Pi, модули ИИ | Да — основная работа курса |
Коротко:
Моторы ≈ то, что исполняет движение
Полётный контроллер ≈ встроенный компьютер устройства
MAVLink ≈ язык запросов к устройству
Ваш Python ≈ программа, которая шлёт запросы и читает ответы
SITL ≈ устройство эмулируется на ПК
Примеры задач
Это не задания на сегодня, а «трейлеры» будущих модулей, чтобы этажи стали живыми.
Пример A. «Покажи текущую высоту»
Полётный контроллер шлёт телеметрию MAVLink. Скрипт на Python читает сообщение и печатает высоту. Этому учит модуль M5.
Пример B. «В симуляторе взлети на 10 метров и сядь»
Скрипт: дождаться сигнала «я жив», сменить режим, выполнить arm, взлёт, посадку. Это лаборатория K38 и гейт G4. На настоящих пропеллерах — только после допуска по безопасности.
Пример C. «На борту сам запустился сервис»
Raspberry Pi включился, система подняла ваш Python-сервис, сервис связался с полётным контроллером и отдаёт статус на землю. Модуль M8.
Пример D. «Вижу цель — лечу рядом; GPS пропал — запасная схема»
Камера, узнавание и ведение объекта, команды автопилоту; без GPS — локальные способы ориентирования (конспект K72). Модуль M11.
Типичные ошибки новичков
Ошибка 1. «Напишу свой автопилот целиком на Python»
Чтобы дрон не перевернулся, программа внутри полётного контроллера должна очень часто и очень вовремя читать датчики и подправлять моторы. Это похоже на удержание равновесия: если поправлять осанку раз в несколько секунд, вы уже упадёте. Такую быструю регулярную работу называют работой в режиме жёсткого реального времени (часто говорят realtime): опоздание здесь не «чуть неудобно», а «аппарат уже в крене».
Эту работу уже делает прошивка ArduPilot на плате Matek F405 VTOL. Python на Raspberry Pi и на Windows нужен для верхнего уровня задач: куда лететь, какой маршрут загрузить, кого сопровождать камерой, что записать в лог. Это важно, но не заменяет быстрый контур равновесия.
Если из медленного цикла Python напрямую «дёргать моторы как автопилот», команды будут опаздывать. Аппарат станет непредсказуемым и опасным. Правильно: Python ставит задачу → автопилот исполняет быстро и стабильно.
Ошибка 2. «Сначала соберу сложный VTOL, код потом»
VTOL сложнее коптера: больше режимов и параметров, выше цена ошибки. Без симулятора и понимания MAVLink отладка на живом железе дорогая и опасная.
Порядок курса: Python и база → коптер в SITL → надёжный код MAVLink → Raspberry Pi → Matek F405 VTOL на стенде по чек-листу.
5. Три опоры: MAVLink, SITL и GCS
Если на старте закрепить только три слова, пусть будут эти. Без них дальше всё выглядит набором случайных кнопок.
MAVLink
MAVLink (Micro Air Vehicle Link) — открытый протокол обмена сообщениями между автопилотом, наземной станцией и бортовым компьютером.
Простыми словами: это не программа с окошками, а договорённость о формате. Какими байтами передать «я жив», «высота 12 метров», «взлети», «пункт маршрута номер 3».
В Python чаще всего будем использовать библиотеку pymavlink. Позже сравним с MAVSDK. Пока достаточно идеи: и Mission Planner, и ваш скрипт говорят с автопилотом на одном языке.
Идея обмена (ещё не код урока):
1) Контроллер шлёт HEARTBEAT («я включён, я такого-то типа…»).
2) Скрипт читает и понимает: связь есть.
3) Скрипт шлёт команду (например, запрос на arm).
4) Контроллер отвечает ACK: «выполнил» или «отказал, потому что…».
SITL
SITL — Software In The Loop, «программное обеспечение в контуре». На практике: программа автопилота работает на вашем компьютере, физика полёта упрощённо моделируется. Настоящих моторов нет, зато есть почти тот же обмен MAVLink.
На старте: ArduCopter SITL (мультикоптер) и Mission Planner на Windows. Ваш Python подключается по сети UDP (часто порт 14550) почти так же, как позже к живому аппарату.
GCS
GCS (Ground Control Station) — программа на земле: карта, «приборы», режимы, загрузка маршрута, логи.
Готовые GCS: Mission Planner (наш основной инструмент на Windows) и, например, QGroundControl. Позже вы соберёте свой упрощённый GCS на Python. Mission Planner останется эталоном для прошивки, параметров и логов.
Как это связано по этапам курса
ЭТАП 1 — только Windows
Mission Planner ──UDP──► ArduCopter SITL
Ваш Python ──UDP──► ArduCopter SITL
(один и тот же MAVLink)
ЭТАП 2 — Raspberry Pi
Python на Pi ──UART──► Matek F405 VTOL (ArduPilot)
Python на Pi ──Wi‑Fi/UDP──► ноутбук на земле
ЭТАП 3 — акцент на VTOL
Те же идеи MAVLink и Python,
другая аэродинамика и более строгие проверки
Частые путаницы
| Путаница | Как правильно |
|---|---|
| «Mission Planner и есть MAVLink» | Mission Planner — программа (GCS). MAVLink — язык, на котором она (и ваш Python) говорит с автопилотом. |
| «SITL — игрушка с другим протоколом» | В SITL тот же MAVLink. Поэтому на нём и учат профессию. |
| «Raspberry Pi заменяет полётный контроллер» | Pi дополняет контроллер. Если Python на Pi упал, failsafe на автопилоте должен спасти аппарат (например, RTL или посадка). |
6. Карта курса, гейты, Copter и ИИ
Курс состоит из 12 модулей M0…M12 и конспектов K00…K80. Ниже — зачем такой порядок.
Модули M0–M12
M0 Старт: курс, Windows, знакомство с Mission Planner
M1 Python с нуля (ускоренно, но глубоко) до мини-проекта
M2 Математика дрона: координаты, углы, расстояние на карте
M3 Протоколы: UART, UDP/TCP, I2C/SPI, CAN, разбор байтов
M4 SITL Copter + Mission Planner + логи → гейт G3
M5 MAVLink и pymavlink (ядро) → гейт G4
M6 Миссии, режимы, логика сценария → гейт G5
M7 MAVSDK и аккуратная архитектура программ
M8 Raspberry Pi companion → гейт G6
M9 Matek F405 VTOL на стенде → гейт G7
M10 Датчики и модули
M11 ИИ: узнать / вести / сопровождать + без GPS → гейт G8
M12 Три проекта и портфолио → гейт G9
В модуле M2 появятся формулы. Мы пишем их в LaTeX. Пример формата (смысл разберём в M2) — расстояние на плоскости:
\[ d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \]На сайте формула должна отрисоваться, если подключён MathJax или KaTeX. Рядом с любой формулой в курсе всегда будет словесное пояснение.
Почему сначала Copter, а не сразу VTOL
- У учебного коптера в SITL проще набор режимов на старте.
- Легче впервые понять arm, взлёт, висение, возврат домой, полёт по точкам.
- Язык MAVLink тот же; VTOL добавляет раму и параметры, а не «другой MAVLink».
- Плата Matek F405 VTOL — цель модуля M9, когда софт уже твёрдый.
ИИ-фокус курса (зафиксировано)
- Идентификация — понять, что за объект перед камерой (в объёме курса).
- Трекинг — не терять объект от кадра к кадру.
- Сопровождение — превратить положение в кадре в команды автопилоту.
- Маршрут без GPS — локальные координаты, оптический поток, визуальные маркеры и другие запасные подходы (K72), плюс понятный failsafe, если оценка положения развалилась.
Что такое гейты
Гейт — контрольная точка навыка: не «пролистал текст», а «умею сделать и объяснить». Без гейта не прыгаем в следующий опасный слой — особенно в живое железо и в связку «зрение → моторы».
| Гейт | Что должно получаться на деле |
|---|---|
| G0 | На Windows установлено и проверено рабочее окружение |
| G1 | Своя небольшая Python-утилита с тестами и учебной заглушкой связи |
| G2 | UDP-обмен и разбор учебного бинарного кадра |
| G3 | SITL Copter, Mission Planner подключён, учебный лог сохранён |
| G4 | pymavlink в SITL: arm → взлёт → посадка |
| G5 | Из Python загружается и выполняется миссия |
| G6 | На Raspberry Pi работает сервис со связью MAVLink |
| G7 | Matek F405 VTOL проверен на стенде по чек-листу |
| G8 | Учебный конвейер: идентификация, трек, сопровождение и участок без GPS |
| G9 | Портфолио из трёх проектов |
Ошибки планирования учёбы
7. Как мы учимся с ментором
Три блока каждого шага
В каждом ответе ментора один и тот же каркас — общая картина без ощущения «нас куда-то несёт».
| Блок | Вопрос | Зачем |
|---|---|---|
| Что сделано | Какой результат уже зафиксирован? | Общая память; не спорим, проходили ли тему |
| Что планируем | Куда идём в ближайшие шаги? | Виден горизонт на один–три шага |
| Что делаем прямо сейчас | Какое одно действие сейчас? | Не распыляемся на пять дел |
Маркеры и откат
Ментор тоже может ошибиться: неверно назвать плату, сжать фразу до нечитаемой, дать шаг не в том порядке. Для этого есть маркеры.
«Маркер» → снимок SNAP перед рискованным шагом
«Откат к CHECKPOINT-K05» → вернуть состояние после урока K05
«Blocker» → стоп, пока не разберём проблему
«Skip» → тема знакома, чек-лист отмечу, идём дальше
«Не понял фразу: …» → переписать материал простым языком
CHECKPOINT-Knn— конспект nn пройден, практика принята.CHECKPOINT-Gn— закрыт гейт n.SNAP-...— снимок «как есть».FIX-...— исправление ошибки ментора; у файла растёт номер редакции.
Сейчас активен SNAP-20260810-START. Уже применены FIX по плате F405, по языку и по формату вёрстки сайта. После закрытия этого урока поставим CHECKPOINT-K00.
Правила практики и ссылок
- Задания — только на уже пройденном. Внешний факт — только с конкретной проверенной ссылкой от ментора, не «погуглите».
- Знакомое можно Skip, но чек-лист лучше пройти глазами.
- Конспект на сайте — источник правды: нашли ошибку — правим fragment и пишем FIX.
- Установку Python, PyCharm и Git начинаем в K01. В K00 программы ставить не нужно.
Правила безопасности
Типичные ошибки учёбы
Публикация уроков на сайте
Уроки выкладываются на technobee.ru (Joomla, YOOtheme, ZOO), доступ по логину. Стили — с сайта. Формат вёрстки — как у ваших уроков Mission Planner: оглавление-аккордеон, таблицы в uk-overflow-auto, блоки ok-inline / note-inline / danger-inline, формулы LaTeX.
8. Практика
В K00 практика без установки программ. Ответы — в блокнот. Сверяйте смысл, не дословное совпадение с эталоном.
Блок 1. Карта системы
Задача 1. Пять этажей
Перечислите пять этажей из раздела 4. Укажите, на каком этаже живёт Python-сервис на Raspberry Pi и через какие этажи он говорит с полётным контроллером.
Эталон смысла:
1) сила и исполнительные механизмы
2) полётный контроллер с автопилотом
3) канал связи
4) протокол MAVLink
5) прикладные программы
Python на Raspberry Pi — этаж 5.
С этажом 2 он говорит через этажи 3 и 4.
Задача 2. Зачем SITL, если есть Matek
Одним абзацем объясните, зачем симулятор при наличии (или ожидании) Matek F405 VTOL.
Эталон смысла:
SITL гоняет тот же класс автопилота и тот же MAVLink на компьютере
без риска для людей и рамы. На нём отлаживают скрипты, маршруты и логи.
На Matek переносят уже проверенную логику, меняя в основном подключение
и соблюдая безопасность.
Задача 3. MAVLink и Mission Planner
В чём разница? Можно ли работать без Mission Planner?
Эталон смысла:
MAVLink — язык (протокол) сообщений.
Mission Planner — одна из программ GCS, которая этим языком пользуется.
Без MP можно: свой Python или другая GCS. MP всё равно нужен как эталон,
прошивка, параметры, логи и удобный SITL на Windows.
Блок 2. Безопасность и маршрут
Задача 4. Порядок этапов
Расставьте: bench Matek VTOL; Python M1; Copter SITL; UART Raspberry Pi; первый взлёт-посадка через pymavlink.
Эталон:
1) Python M1
2) Copter SITL (M4)
3) pymavlink взлёт-посадка (M5, G4)
4) Raspberry Pi и UART (M8)
5) bench Matek F405 VTOL (M9, G7)
Задача 5. Фраза для отката
Что напишете ментору, если в K18 пример с сетью не сходится с конспектом и вы не хотите идти дальше?
Эталон смысла:
«Blocker по K18, раздел про UDP. Ожидал …, получил ….
Откат к CHECKPOINT-K17, пока не разберём. Нужен FIX в конспекте.»
Задача 6. ИИ-фокус и запрет arm
Четыре элемента ИИ-фокуса. Почему зрение не должно само делать arm?
Эталон смысла:
1) идентификация 2) трекинг 3) сопровождение 4) участок без GPS
Arm включает готовность моторов. Ошибка распознавания или сбой камеры
не должны подавать питание на силовую часть. Arm — решение человека
и safety-слоя, не прямой выход модели.
Задача 7. Упал Python на Raspberry Pi
Учебный сценарий: в полёте завис бортовой Python. Что должно спасти аппарат?
Эталон смысла:
Failsafe на полётном контроллере (например RTL или посадка).
Companion — помощник. Контроллер — последняя линия доверия.
9. Проверьте себя
Сформулируйте ответ своими словами, затем сверьте с эталонами практики в разделе 8 и с текстом урока.
- Чем программист БПЛА в нашем курсе отличается от «человека, который собирает раму»?
- Назовите пять этажей системы и этаж, на котором живёт Python на Raspberry Pi.
- Почему Python не должен заменять прошивку автопилота на полётном контроллере?
- Чем MAVLink отличается от Mission Planner?
- Зачем нужен SITL, если есть Matek F405 VTOL?
- Почему в курсе сначала Copter, а VTOL — позже?
- Перечислите четыре линии ИИ-фокуса.
- Что такое гейт и зачем G4 до работы с железом?
- Какие фразы вы напишете ментору при ошибке в конспекте и при желании откатиться?
- Почему алгоритмам зрения нельзя давать право arm?
10. Чек-лист самопроверки
Урок освоен, если каждый пункт вы можете объяснить вслух простыми предложениями:
- Объясняю роль программиста БПЛА и границы курса
- Перечисляю пять этажей и указываю, где Python
- Отличаю MAVLink от Mission Planner
- Объясняю SITL и зачем он при наличии железа
- Понимаю разницу GCS (земля) и companion (Raspberry Pi)
- Обосновываю порядок Copter → Matek F405 VTOL
- Называю, где в карте курса ядро MAVLink и где модуль ИИ
- Понимаю смысл гейтов G0–G9
- Перечисляю ИИ-фокус: идентификация, трекинг, сопровождение, без GPS
- Знаю ритуал «сделано / планируем / сейчас»
- Умею использовать Marker, Откат, Blocker, Skip, «Не понял фразу»
- Принимаю: без допуска нет arm с пропеллерами; ИИ не делает arm
- Развёрнуто объясняю, почему Python не заменяет автопилот на FC
K00 чек-лист закрыт. После этого ставим CHECKPOINT-K00 и переходим к K01 (установка Python, PyCharm Pro и Git на Windows) в этой же вёрстке.11. Что дальше
- Следующий конспект: K01 · Окружение Windows: Python, PyCharm Pro, Git
- Целевая плата курса: Matek F405 VTOL (модуль M9)