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

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

Беспилотная авиационная система и место полётного контроллера в ней mod. Четверг, 15 октября 2026 22:55 . См. 3

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. Четыре открытые прошивки

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

ПрошивкаВерсия в курсеЯзыкОсноваНазначение
Betaflight2026.6.2Cсобственный планировщик без операционной системыпилотажные аппараты, гонки
INAV9.1.0Cсобственный планировщик без операционной системынавигация, самолёты и мультироторы
ArduPilotCopter-4.7.2C++ChibiOS на STM32универсальный автопилот для многих типов аппаратов
PX4v1.17.0C++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        # сборка прошивки для платы
Plain text

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

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

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

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

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

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

ПрошивкаВерсияФайл в исходном коде
Betaflight2026.6.2src/main/fc/core.c
INAV9.1.0src/main/fc/fc_core.c
ArduPilotCopter-4.7.2ArduCopter/Copter.cpp
PX4v1.17.0src/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

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