Беспилотная авиационная система и место полётного контроллера в ней … ↩
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. Цикл управления
Главная работа полётного контроллера повторяется по кругу с постоянной частотой. Один проход цикла управления состоит из пяти шагов.
- Прочитать показания гироскопа и акселерометра.
- Отфильтровать показания от шума и вибраций.
- Сравнить фактическую угловую скорость с заданной и рассчитать управляющее воздействие регулятором.
- Распределить управляющее воздействие по двигателям в микшере.
- Передать команды регуляторам частоты вращения.
Чем выше частота цикла, тем быстрее аппарат реагирует на возмущения. Частота определяется прошивкой и аппаратной частью. В ArduCopter основной цикл по умолчанию выполняется с частотой 400 Гц и задаётся параметром SCHED_LOOP_RATE. В PX4 регулятор угловой скорости запускается по каждому новому отсчёту гироскопа, частота ограничена параметром IMU_GYRO_RATEMAX со значением по умолчанию 400 Гц. В Betaflight частота цикла регулятора составляет несколько килогерц и задаётся параметрами частоты опроса гироскопа и делителем pid_process_denom.
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 служба непрерывной интеграции выполняет три шага.
- Сборка модульных тестов компилятором
gccдля компьютера и их запуск командойmake test. - Проверка правил архитектуры командой
make arch-check: ядро не должно включать заголовочные файлы микроконтроллера. - Сборка прошивки для платы компилятором
arm-none-eabi-gccс флагом-Werror, при котором любое предупреждение считается ошибкой.
8. Практика
Задание S1.1. Создание рабочего репозитория
Продолжительность — 30 минут. Ссылка на шаблонный репозиторий выдаётся при записи на курс.
- Создать собственный репозиторий из шаблона кнопкой Use this template на странице шаблона.
- Клонировать репозиторий на компьютер и выполнить сборку тестов.
- Убедиться, что все тесты пройдены, и отправить изменения на 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. Проверьте себя
- Из каких пяти частей состоит беспилотная авиационная система?
- Перечислите пять шагов цикла управления полётного контроллера.
- Почему частота цикла в Betaflight выше, чем в ArduCopter?
- Чем запускается регулятор угловой скорости в PX4?
- Почему ядро BeeFC можно проверять тестами на компьютере?
11. Чек-лист самопроверки
12. Источники
- Документация Betaflight.
- Руководство разработчика ArduPilot.
- Руководство пользователя и разработчика PX4.
- Документация INAV.
- Книга Pro Git на русском языке.
- Документация GitHub Actions.
13. Что дальше
- Следующий урок: S2. Инструменты разработки и первая прошивка.
- Полный перечень уроков приведён в статье «Курс BeeFC: содержание уровня „Старт“».
Проверено: 13.10.2026
↑ К оглавлению- мод. : Среда, 14 октября 2026