Перейти к содержимому

Беспилотная авиационная система и место полётного контроллера в ней … ↩

mod. Среда, 14 октября 2026 11:18 . См. 2

BeeFC · Урок S1 из 33 · Уровень «Старт»

Из каких частей состоит беспилотная авиационная система, какую задачу в ней решает полётный контроллер и как устроены четыре открытые прошивки, с которыми слушатель будет сравнивать свою прошивку BeeFC на протяжении всего курса.

В этом уроке создаётся рабочий репозиторий слушателя и выполняется первая автоматическая проверка. С этого момента каждое изменение кода проверяется тестами на компьютере.

Содержание

1. Цели урока

Продолжительность урока — два часа: один час теории и один час практики. После урока слушатель:

  • называет составные части беспилотной авиационной системы и объясняет назначение каждой;
  • описывает цикл управления полётного контроллера от чтения датчиков до выдачи команд двигателям;
  • различает четыре открытые прошивки по назначению, языку программирования и операционной системе;
  • создаёт собственный репозиторий BeeFC и получает первый успешный результат автоматической проверки.
↑ К оглавлению

2. Термины и сокращения

ТерминОпределение
беспилотная авиационная система (БАС) комплекс из беспилотного воздушного судна, средств управления, связи и обслуживания
беспилотное воздушное судно (БВС) летательный аппарат, управляемый без экипажа на борту
полётный контроллер бортовой вычислитель, который по данным датчиков управляет двигателями
инерциальный измерительный блок (IMU) датчик, объединяющий гироскоп и акселерометр
электронный регулятор частоты вращения (ESC) плата, которая по командам полётного контроллера управляет бесколлекторным двигателем
наземная станция управления (GCS) программа на компьютере для настройки и контроля аппарата
программная имитация (SITL) запуск прошивки на компьютере вместо платы, с моделью аппарата
непрерывная интеграция (CI) автоматическая сборка и проверка кода при каждом изменении
модульный тест программа, которая проверяет одну функцию прошивки на компьютере
↑ К оглавлению

3. Состав беспилотной авиационной системы

Беспилотная авиационная система состоит из пяти частей. Беспилотное воздушное судно несёт на борту полётный контроллер, датчики, регуляторы частоты вращения и двигатели. Аппаратура управления передаёт команды внешнего пилота. Канал связи доставляет эти команды на борт и возвращает телеметрию. Наземная станция управления позволяет настраивать аппарат и контролировать полёт. Внешний пилот принимает решения и отвечает за безопасность.

Полётный контроллер среди бортового оборудования

Полётный контроллер — это плата с микроконтроллером, к которой подключено остальное бортовое оборудование. На учебной плате курса установлены микроконтроллер STM32F405, инерциальный измерительный блок на шине SPI, микросхема флеш-памяти для журнала полёта, стабилизатор питания и разъёмы для приёмника, регуляторов и периферии.

НаправлениеУстройствоИнтерфейс
вход инерциальный измерительный блок SPI, линия готовности данных
вход приёмник аппаратуры управления UART, протокол CRSF
вход делитель напряжения аккумуляторной батареи аналоговый вход
выход регуляторы частоты вращения таймеры, протоколы ШИМ или DShot
обмен наземная станция управления USB, протокол MSP или MAVLink
↑ К оглавлению

4. Цикл управления

Главная работа полётного контроллера повторяется по кругу с постоянной частотой. Один проход цикла управления состоит из пяти шагов.

  1. Прочитать показания гироскопа и акселерометра.
  2. Отфильтровать показания от шума и вибраций.
  3. Сравнить фактическую угловую скорость с заданной и рассчитать управляющее воздействие регулятором.
  4. Распределить управляющее воздействие по двигателям в микшере.
  5. Передать команды регуляторам частоты вращения.

Чем выше частота цикла, тем быстрее аппарат реагирует на возмущения. Частота определяется прошивкой и аппаратной частью. В ArduCopter основной цикл по умолчанию выполняется с частотой 400 Гц и задаётся параметром SCHED_LOOP_RATE. В PX4 регулятор угловой скорости запускается по каждому новому отсчёту гироскопа, частота ограничена параметром IMU_GYRO_RATEMAX со значением по умолчанию 400 Гц. В Betaflight частота цикла регулятора составляет несколько килогерц и задаётся параметрами частоты опроса гироскопа и делителем pid_process_denom.

Почему частоты так различаются: Betaflight создан для пилотажных аппаратов с малой инерцией, где задержка в одну миллисекунду заметна внешнему пилоту. ArduPilot и PX4 рассчитаны на аппараты разных размеров с навигацией, и для большинства из них 400 Гц достаточно, а освободившееся время процессора расходуется на оценку состояния и навигацию.
↑ К оглавлению

5. Четыре открытые прошивки

В курсе для сравнения используются четыре прошивки с открытым исходным кодом. Чтобы ссылки не устаревали, все они зафиксированы на конкретных версиях.

ПрошивкаВерсия в курсеЯзыкОсноваНазначение
Betaflight 2026.6.2 C собственный планировщик без операционной системы пилотажные аппараты, гонки
INAV 9.1.0 C собственный планировщик без операционной системы навигация, самолёты и мультироторы
ArduPilot Copter-4.7.2 C++ ChibiOS на STM32 универсальный автопилот для многих типов аппаратов
PX4 v1.17.0 C++ NuttX, обмен сообщениями uORB модульный автопилот, исследовательские проекты

Betaflight, INAV и ArduPilot распространяются по лицензии GPL версии 3, PX4 — по лицензии BSD. Прошивка BeeFC по устройству ближе всего к Betaflight: в ней тоже нет операционной системы, а задачи выполняет собственный планировщик. Это сознательное решение: без операционной системы слушатель видит каждый шаг работы микроконтроллера.

↑ К оглавлению

6. Проект BeeFC

BeeFC — учебная прошивка, которую слушатель пишет сам. Код разделён на слои, и каждый слой отвечает за свой уровень абстракции.

СлойКаталогСодержимое
описание платы boards номера выводов, частота кварца
уровень аппаратных абстракций hal работа с регистрами STM32 и поддельная реализация для тестов
драйверы drivers датчики и внешние микросхемы
ядро core планировщик, фильтры, регуляторы, логика безопасности
приложение app функция main и таблица задач

Ядро и драйверы не обращаются к регистрам микроконтроллера напрямую. Поэтому почти весь код BeeFC проверяется модульными тестами на компьютере, без платы. Это свойство курса будет подробно разобрано в уроке S4.

↑ К оглавлению

7. Автоматическая проверка

Каждое задание курса проверяется автоматически. При отправке изменений на GitHub служба непрерывной интеграции выполняет три шага.

  1. Сборка модульных тестов компилятором gcc для компьютера и их запуск командой make test.
  2. Проверка правил архитектуры командой make arch-check: ядро не должно включать заголовочные файлы микроконтроллера.
  3. Сборка прошивки для платы компилятором arm-none-eabi-gcc с флагом -Werror, при котором любое предупреждение считается ошибкой.
Правило безопасности курса: Двигатели с воздушными винтами запускаются только на закреплённом стенде. В уроках S1–S7 воздушные винты не нужны вовсе. Перед каждым запуском двигателя необходимо убедиться, что в плоскости вращения винта нет людей и предметов.
↑ К оглавлению

8. Практика

Задание S1.1. Создание рабочего репозитория

Продолжительность — 30 минут. Ссылка на шаблонный репозиторий выдаётся при записи на курс.

  1. Создать собственный репозиторий из шаблона кнопкой Use this template на странице шаблона.
  2. Клонировать репозиторий на компьютер и выполнить сборку тестов.
  3. Убедиться, что все тесты пройдены, и отправить изменения на GitHub.
git clone https://github.com/ВАШ_ЛОГИН/beefc.git
cd beefc
make test          # модульные тесты на компьютере
make arch-check    # правила зависимостей между слоями
make target        # сборка прошивки для платы

Критерий автоматической проверки: все шаги в разделе Actions репозитория завершены успешно, в журнале сборки есть строка 0 Failures.

Задание S1.2. Поиск цикла управления в больших прошивках

Продолжительность — 30 минут, проверяется преподавателем по короткому отчёту.

Для каждой из четырёх прошивок по ссылкам из следующего раздела найти функцию, которая выполняется на каждом проходе цикла управления, и записать в файл docs/s1_report.md её имя, файл и способ запуска. Подсказки приведены там же.

↑ К оглавлению

9. Как это сделано в больших прошивках

ПрошивкаВерсияФайл в исходном коде
Betaflight 2026.6.2 src/main/fc/core.c
INAV 9.1.0 src/main/fc/fc_core.c
ArduPilot Copter-4.7.2 ArduCopter/Copter.cpp
PX4 v1.17.0 src/modules/mc_rate_control/MulticopterRateControl.cpp
  • В Betaflight таблица задач находится в файле src/main/fc/tasks.c. Задачи GYRO, FILTER и PID имеют приоритет TASK_PRIORITY_REALTIME и вызывают функции taskGyroSample, taskFiltering и taskMainPidLoop из файла core.c.
  • В INAV функция цикла называется так же — taskMainPidLoop в файле fc_core.c: INAV и Betaflight происходят от общего предка Cleanflight.
  • В ArduCopter в начале таблицы scheduler_tasks[] файла Copter.cpp перечислены задачи с макросом FAST_TASK, которые выполняются на каждом проходе основного цикла, в том числе run_rate_controller_main и motors_output_main.
  • В PX4 модуль mc_rate_control подписывается на сообщение vehicle_angular_velocity и выполняет метод Run() при каждом новом сообщении: цикл запускается данными, а не таймером.
↑ К оглавлению

10. Проверьте себя

  1. Из каких пяти частей состоит беспилотная авиационная система?
  2. Перечислите пять шагов цикла управления полётного контроллера.
  3. Почему частота цикла в Betaflight выше, чем в ArduCopter?
  4. Чем запускается регулятор угловой скорости в PX4?
  5. Почему ядро BeeFC можно проверять тестами на компьютере?
↑ К оглавлению

11. Чек-лист самопроверки

Результат: Все пункты выполнены. Можно переходить к уроку S2.
↑ К оглавлению

12. Источники

  1. Документация Betaflight.
  2. Руководство разработчика ArduPilot.
  3. Руководство пользователя и разработчика PX4.
  4. Документация INAV.
  5. Книга Pro Git на русском языке.
  6. Документация GitHub Actions.
↑ К оглавлению

13. Что дальше

  • Следующий урок: S2. Инструменты разработки и первая прошивка.
  • Полный перечень уроков приведён в статье «Курс BeeFC: содержание уровня „Старт“».

Проверено: 13.10.2026

↑ К оглавлению
  • мод. : Среда, 14 октября 2026