Дипломный проект … ↩
mod. Пятница, 16 октября 2026 07:36 . См. 13
BeeFC · Урок A10 из 33 · Уровень «Автопилот»
Последний урок курса — самостоятельный проект. Слушатель выбирает одну тему из шести, развивает BeeFC или пишет сценарий для ArduPilot, доказывает результат тестами и измерениями и защищает работу у преподавателя. Обязательное условие защиты — зелёная автоматическая проверка в репозитории: те же тесты, что работали весь курс, плюс тесты самого проекта.
Темы со стендами выполняются только на стенде с закреплённой рамой. Свободный полёт не требуется ни в одной теме и в Московской области ограничен.
Содержание
1. Цели урока
Продолжительность урока — пять часов: полчаса теории и четыре с половиной часа практики. Это время на план, основную часть работы и защиту; большой проект потребует дополнительной самостоятельной работы. После урока слушатель:
- выполняет законченный проект в полётной прошивке: от постановки задачи до измерения результата;
- подтверждает результат тестами, которые запускаются автоматически при каждом изменении;
- пишет отчёт и защищает решения перед преподавателем.
2. Термины и сокращения
| Термин | Определение |
|---|---|
| CI | непрерывная интеграция: автоматическая сборка и проверка при каждом изменении в репозитории |
| рабочий процесс | файл с описанием шагов проверки для GitHub Actions |
| артефакт | файл, который проверка сохраняет для просмотра, например результаты измерений |
| эталон | заранее известный результат, с которым тест сравнивает вычисление |
| RPM | частота вращения в оборотах в минуту |
3. Автоматическая проверка
Весь курс тесты запускались командами make test, make navtest и другими. Для защиты они собраны в одну цель make ci:
ci: test arch-check mavtest navtest luatest dumptest
$(MAKE) -f target.mk
@echo "ci: все проверки пройдены"Цель выполняет модульные тесты всех уровней, проверку архитектуры, проверку MAVLink, полёт по заданию через MAVLink, тесты сценария Lua, проверку дампов и сборку прошивки для STM32F405. На компьютере курса вся цепочка занимает около двадцати секунд.
В репозитории та же цель запускается рабочим процессом GitHub Actions при каждой отправке изменений:
Файл .github/workflows/ci.yml
ci:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Компилятор для STM32
run: sudo apt-get update && sudo apt-get install -y gcc-arm-none-eabi libnewlib-arm-none-eabi
- name: Библиотеки Python
run: pip install pymavlink pyubx2 numpy geographiclib pymap3d lupa
- name: Тесты, проверки и сборка прошивки
run: make ci TC=arm-none-eabi-
- name: Размер прошивки
run: arm-none-eabi-size build/target/beefc.elfВторая часть сравнивает BeeFC с ArduPilot в программной имитации и проверяет сценарий Lua. Она дольше и зависит от внешней программы, поэтому выполняется только после успешной основной части, а результаты сохраняются артефактом:
Файл .github/workflows/ci.yml
sitl:
runs-on: ubuntu-24.04
needs: ci
steps:
- uses: actions/checkout@v4
- name: Библиотеки Python
run: pip install pymavlink numpy pymap3d
- name: ArduCopter 4.7.2 для Linux
run: |
mkdir -p ~/.cache/ap && cd ~/.cache/ap
curl -fsSL -o arducopter https://firmware.ardupilot.org/Copter/stable-4.7.2/SITL_x86_64_linux_gnu/arducopter
curl -fsSL -o copter.parm https://raw.githubusercontent.com/ArduPilot/ardupilot/Copter-4.7.2/Tools/autotest/default_params/copter.parm
chmod +x arducopter
- name: BeeFC и ArduPilot на одном задании, сценарий Lua
run: make ci-sitl
- uses: actions/upload-artifact@v4
with:
name: nav-results
path: build/nav_*.jsonmake ci и make ci-sitl проверены на компьютере курса: все проверки пройдены. Сам файл рабочего процесса проверен на синтаксис, но на серверах GitHub не запускался. Компилятор для STM32 из пакетов Ubuntu может отличаться версией от компилятора курса, поэтому размер прошивки в CI может отличаться на десятки байт.4. Темы проектов
Каждая тема задаёт минимальный результат, обязательный автоматический тест и измерение для отчёта. Свою тему можно предложить преподавателю, если она проверяется тестами так же.
1. Двунаправленный DShot и фильтр по частоте вращения. Регулятор двигателя возвращает частоту вращения по тому же проводу. BeeFC принимает ответ, проверяет контрольную сумму и настраивает режекторный фильтр гироскопа на частоту вращения. Тест: разбор ответов регулятора по эталонным кадрам. Измерение: спектр гироскопа на тяговом стенде с фильтром и без него.

2. Перенос на AT32F435. BeeFC собирается для микроконтроллера Artery AT32F435 через слой абстракции аппаратной части; модули core не меняются. Тест: все тесты курса и проверка архитектуры проходят, обе прошивки собираются. Измерение: время цикла и размер прошивки на двух микроконтроллерах.
3. Автоматическая настройка регулятора релейным методом. Регулятор временно заменяется реле, по амплитуде и периоду автоколебаний вычисляются коэффициенты. Тест: программная имитация качелей, коэффициенты в пределах заданного отклонения от расчётных. Измерение: переходный процесс на стенде «Качели» до и после настройки.

4. Геозона. BeeFC принимает границу геозоны по протоколу MAVLink и включает возврат при её пересечении. Тест: программная имитация с ветром, сносящим аппарат к границе, и проверка загрузки границы кадрами pymavlink. Измерение: наибольший выход за границу при разном ветре.
5. Сценарий Lua с отчётом по журналу. Сценарий для ArduPilot с собственными параметрами и реакцией на отказы, например облёт по спирали или поиск по галсам. Тест: макет окружения и программная имитация ArduPilot, разбор журнала полёта. Измерение: отклонение от заданной траектории по журналу.
6. Драйвер нового датчика. Датчик оптического потока или лазерный дальномер: драйвер, модель датчика для тестов и использование в регуляторе. Тест: драйвер на модели датчика, включая ошибки связи. Измерение: показания на столе и сравнение с линейкой или известным расстоянием.
5. Отчёт и защита
Отчёт занимает 4–8 страниц и содержит:
- Постановку задачи и критерии успеха в числах.
- Устройство решения: модули, данные, ограничения.
- Тесты: что проверяет каждый тест и как проверено, что тест ловит ошибку.
- Измерения: условия, таблицы, графики, разброс.
- Сравнение с решением в одной из больших прошивок со ссылками на исходный код.
- Что не сделано и почему.
Защита длится пятнадцать минут: пять минут доклада с показом журнала полёта, видео со стенда или записи программной имитации и десять минут вопросов. Перед защитой преподаватель проверяет, что автоматическая проверка зелёная.
| Критерий | Что оценивается |
|---|---|
| результат | достигнуты ли критерии из постановки задачи |
| тесты | проверяют ли тесты поведение, ловят ли они намеренно внесённую ошибку |
| измерения | повторяемы ли, указан ли разброс |
| сравнение | понятно ли, чем решение отличается от больших прошивок |
| защита | может ли слушатель объяснить каждое решение в своём коде |
6. Тесты
Обязательная проверка — make ci в репозитории проекта, зелёная на последнем изменении. Тесты проекта добавляются в цель test или отдельной целью, которая включается в ci. Для четвёртой и пятой тем к проверке добавляется цель с программной имитацией, как make ci-sitl.
7. Практика
Задание A10.1. План проекта
Продолжительность — 30 минут, выполняется на компьютере.
Выберите тему, запишите критерии успеха в числах, перечень тестов и измерений. Согласуйте план с преподавателем.
Критерий автоматической проверки: нет, план согласует преподаватель.
Задание A10.2. Реализация
Продолжительность — три часа, выполняется на компьютере, для первых трёх тем — с учебной платой и стендом.
Напишите код и тесты, проверьте тесты мутациями, выполните измерения.
Критерий автоматической проверки: make ci зелёный в репозитории; новые тесты проекта входят в цель ci.
Задание A10.3. Отчёт и защита
Продолжительность — 60 минут.
Подготовьте отчёт по структуре выше и доклад на пять минут. Защитите проект.
Критерий автоматической проверки: перед защитой рабочий процесс CI зелёный на последнем изменении; защиту принимает преподаватель.
8. Как это сделано в больших прошивках
| Прошивка | Версия | Файл в исходном коде |
|---|---|---|
| Betaflight | 2026.6.2 | .github/workflows/ci.yml |
| INAV | 9.1.0 | .github/workflows/ci.yml |
| ArduPilot | Copter-4.7.2 | .github/workflows/test_sitl_copter.yml |
| PX4 | v1.17.0 | .github/workflows/mavros_mission_tests.yml |
- В Betaflight рабочий процесс
ci.ymlсобирает прошивки для всех описаний плат и выполняет командыmake checksиmake test-allс флагом-Werror: предупреждение компилятора считается ошибкой, как в BeeFC. - В INAV рабочий процесс
ci.ymlсобирает прошивки для всех плат группами и программную имитацию с флагом «предупреждения как ошибки», а если изменение касается одной платы — только её. Отдельный процессpr-test-builds.ymlвыкладывает пробные прошивки для каждого предложенного изменения. - В ArduPilot процесс
test_sitl_copter.ymlвыполняет полётные тесты изarducopter.pyурока A7 в программной имитации. Тесты разбиты на группы отtests1aдоtests2bи выполняются параллельно, иначе проверка занимала бы часы. - В PX4 процесс
mavros_mission_tests.ymlвыполняет полётное заданиеMC_mission_boxв программной имитации и проверяет его. Отдельный процессflash_analysis.ymlследит за размером прошивки на платах fmu-v5x и fmu-v6x.
Все четыре прошивки принимают изменения только после зелёной автоматической проверки. Курс BeeFC построен по тому же правилу с первого урока.
↑ К оглавлению9. Проверьте себя
- Почему часть проверок с ArduPilot вынесена в отдельный этап?
- Как убедиться, что тест проекта действительно проверяет поведение?
- Зачем в отчёте раздел о том, что не сделано?
- Почему ArduPilot разбивает полётные тесты на группы?
10. Чек-лист самопроверки
11. Источники
- Рабочий процесс CI Betaflight.
- Рабочий процесс CI INAV.
- Полётные тесты ArduCopter в CI.
- Тест полётного задания PX4 в CI.
- Контроль размера прошивки PX4.
- Документация GitHub Actions.
12. Что дальше
- Ответы на вопросы уровня собраны в статье «Курс BeeFC: ответы на контрольные вопросы уровня „Автопилот“».
- Полный перечень уроков приведён в статье «Курс BeeFC: содержание уровня „Автопилот“».
Проверено: 13.10.2026
↑ К оглавлению- мод. : Пятница, 16 октября 2026