Drone X

Итоговый проект: программная автономная миссия

9 блок(ов) теории · 10 заданий · 135 баллов

Итоговый модуль — не новые железки, а полный инженерный цикл из навыков курса: вы читаете телеметрию прямо из байтов, считаете энергию, готовите автопилот к автономному вылету, проводите миссию в симуляторе, разбираете её результаты и закрываете полёт регуляторной самопроверкой. Так выглядит работа и за пределами курса: сначала данные, потом расчёт, потом конфигурация, полёт и отчёт.

Проект интегрирует все 14 компетенций курса. Первые двенадцать — опора: анатомия и классификация БВС (модуль 1), физика каналов (модуль 2), силовая установка (модуль 3), LiPo, пропеллеры и пайка (модули 4–6), сборка и настройка (модули 7–9), пилотирование (модуль 10), ArduPilot и миссии (модуль 11). Две новые вы нарабатываете здесь: программная работа на Python (только стандартная библиотека) и автономная миссия с анализом телеметрии и регуляторной самопроверкой. В финальном задании вы пройдёте по всем четырнадцати строкам: по каждой — «уверен» или «нужна практика».

Маршрут из десяти заданий повторяет цикл инженера. Разбор телеметрии: две задачи на пакеты MSP (задания 1–2), гистограмма высоты из лога (задание 3) и подбор регулятора (задание 4). Подготовка и полёт: конфигурация ArduPilot в эмуляторе (задание 5) и автономная миссия в симуляторе (задание 6). Разбор полёта: энергия из записанного лога (задание 7). Закрытие проекта: регуляторная самопроверка (задание 8), порядок входа в режимы (задание 9) и финальная рефлексия по компетенциям (задание 10).

Телеметрию «Модуля» вы уже видели на языке MSP (MultiWii Serial Protocol — пакетный протокол обмена с полётным контроллером; в модуле 8 вы считали длину его пакета). Пакет — заголовок, полезная нагрузка и контрольная сумма; внутри нагрузки числа лежат байтами, и разбирать их — та работа, которую делает любой лог-анализатор.

Числа в MSP — целые, по два байта, порядок байтов — little-endian, «младший вперёд»: первый байт — младшие восемь бит, второй — старшие. Беззнаковое uint16 покрывает 0…65535. Знаковое int16 хранит минус в старшем бите: если он установлен, из значения вычитают 65536 — байты 83 FF дают 65411 без знака, но −125 со знаком.

Два пакета курса. MSP_ATTITUDE (команда 108) несёт углы корпуса: roll и pitch — в десятых градуса (−125 десятых = −12.5°), yaw — в градусах, и его приводят к диапазону ±180° — лишние полные обороты (по 360°) отбрасывают. MSP_ANALOG (команда 110) несёт питание: vbat — напряжение батареи в милливольтах (22200 мВ = 22.2 В — норма для 6S, шести ячеек), powerMeterSum — потраченная ёмкость в миллиампер-часах, rssi — качество радиолинка, amperage — ток в миллиамперах. Единицы полей этих двух пакетов — учебная конвенция курса; главное — прочитать поле и перевести его в понятные величины.

П-регулятор — простейший контур удержания: ошибка e = цель − высота, и регулятор задаёт вертикальную скорость пропорционально ошибке: v = Kp·e. Больше ошибка — сильнее разгон к цели; Kp — единственная ручка. Но у аппарата есть инерция: скорость набирается и гасится не мгновенно (в модели курса — постоянная времени TAU), и к моменту, когда высота дошла до цели, дрон уже летит вверх — он проскакивает и возвращается. Чем больше Kp, тем агрессивнее разгон и тем вероятнее перерегулирование — выброс выше цели.

Поэтому Kp подбирают по двум критериям сразу: выйти на заданную высоту за отведённое время (в задании — 5 м ± 0.2 м за 10 с) и не перерегулировать больше допуска (в задании — 1 м). Модель в заготовке — учебная, одномерная: канал высоты без кренов и ветра; на настоящем «Модуле» тем же способом — по двум критериям — настраивают параметры автопилота.

Автономный вылет готовят параметрами. GeoFence — виртуальная граница, за которую автопилот не выпустит аппарат: FENCE_ENABLE включает проверку, FENCE_ALT_MAX задаёт потолок высоты, FENCE_RADIUS — радиус; в задании курса оба барьера по 100 м. FS_THR_ENABLE назначает поведение при потере сигнала пульта: значение 1 — RTL, возврат к точке взлёта. Страховка из модуля 11 здесь работает в связке с миссией: пока автопилот ведёт аппарат по программе, GeoFence и failsafe страхуют от выхода за границу и от молчания пульта.

Миссия — пять элементов: TAKEOFF (взлёт на 5 м), три путевые точки — WP1 (20, 0), WP2 (40, 10), WP3 (20, 20) — и RTL: возврат и посадка. Те же числа у симулятора: сцена mission-wp3 ведёт аппарат ровно по этому маршруту.

После полёта лог превращают в энергию. Средний ток — среднее арифметическое ряда измерений; длительность — число измерений N на интервал dt; потраченная ёмкость в миллиампер-часах = средний ток × длительность / 3.6 (ток в амперах, время в секундах). Для штатной АКБ «Модуля» LiPo 6S 5000 мА·ч (паспорт: 4200–5200) легко прикинуть, какая доля банки ушла на миссию.

Чек госучёта перед вылетом: БВС 0,15–30 кг подлежит постановке на госучёт (ч. 3.2 ст. 33 ВК РФ, ПП № 658, учёт — Росавиация через Госуслуги); «Мини» 32 г — учёта нет, «Модуль» 1150 г без АКБ — подлежит; актуальность — октябрь 2026

Перед настоящим вылетом «Модуля» (1150 г без АКБ по паспорту — уже внутри диапазона учёта) регуляторная самопроверка обязательна. Аппараты с максимальной взлётной массой от 0,15 до 30 кг ставятся на государственный учёт: портал учёта БВС Росавиации (bvs.favt.ru) или Госуслуги; на корпус наносится учётный опознавательный знак (ФАП-128). Маршрут проверяют по карте запретных зон и временных региональных ограничений. Сам полёт — до 150 м и в светлое время суток, вне зон ограничения полётов (ФП ИВП, утверждены постановлением Правительства РФ № 138).

Реквизиты: ч. 3.2 ст. 33 Воздушного кодекса РФ и ПП РФ № 658 от 25.05.2019 (госучёт), приказ Минтранса № 128 от 31.07.2009 (внешние опознавательные знаки), ПП РФ № 138 от 11.03.2010 (порядок использования воздушного пространства). Актуальность — октябрь 2026; перед вылетом сверяйтесь со свежей редакцией: нормы меняются, и это часть профессии.

Задания

0/10 заданий · 0/135 баллов

1. Код: разбор MSP_ATTITUDE — углы из байтов

15 балл(ов)

Соберите функцию parse_attitude(payload) — разбор телеметрии MSP_ATTITUDE (команда 108): payload — 6 байт; roll и pitch — int16 little-endian в десятых градуса, yaw — int16 little-endian в градусах, его приведите к диапазону ±180° (лишние полные обороты по 360° отбрасываются). Верните кортеж (roll, pitch, yaw) в градусах. Пример из лога: [0x83, 0xFF, 0x5E, 0x01, 0x0B, 0x07] — в нём спрятаны отрицательный крен, тангаж вверх и рыскание с лишними полными оборотами.

Монтируем песочницу…
1 / 10