У нас в МАИ, в 8-м институте, учатся будущие разработчики IT‑продуктов и софта для авиационных систем, аэропортов, логистики и много чего ещё интересного. Один из курсов с 2023 года мы решили посвятить разработке программного обеспечения для автопилота. В курсе всё как положено, с красивыми диаграммами регуляторов, кватернионами и кодами таких проектов как Ardupilot, PX4, Betaflight, iNav и другими.
Однако, довольно сложно сразу вкатиться в тему полетных прошивок — они переполнены всякими фичами и функционалом, так что неподготовленному разработчику сложно понять как же это всё работает. Поэтому долгое время я искал такой проект, который позволяет «на пальцах» объяснить как работает прошивка полётника. Таким проектом для меня стал Flix от Олега Калачева. Про опыт сборки проекта и изучения на его основе полетной прошивки со студентами и пойдет разговор в этой статье.
Оглавление
Что нужно знать для понимания
Чтобы программировать полетный контроллер квадрокоптера нужно как минимум понимать почему и как этот набор различного «железа» вообще летает. А для этого нужно знать конструкцию типового квадрокоптера и принципы управления. Плюс все коды написаны на C++ или даже LUA и как минимум C++ нужно изучить в части синтаксиса.
Далее будет нудный нужный текст про то что нужно знать чтобы программировать беспилотник. Те, кто считают, что можно сразу приступать к программированию не зная основ могут его пропустить, наш девиз: Слабоумие и Отвага! но мы любим во всем детально разобраться.
Раз уж мы про программирование на Си, то для начала всегда рекомендую изучить синтаксис C++, благо для этого сейчас есть много готовых курсов и решений. Мы в МАИ пользуемся Хендбуком от коллег из Яндекса — изучить можно тут. В целом, тем кто пройдет такой курс уже будет просто разобраться в коде и понять, как все это работает. Плюс коллеги постоянно актуализируют Хендбук и следят за стандартами языка, поэтому даже тем, кто и так всё знает, бывает полезно его пролистать.
Дальше больше — многие наши программисты не видели как летает беспилотник и из чего он состоит, поэтому как минимум нужно разобраться как летает квадрокоптер. Например вот тут можно «на пальцах» понять как осуществляется управление и зачем квадрокоптеру 4 винта. После того как в целом стало понятно какой винт нужно ускорить, какой замедлить чтобы выполнить маневрирование уже можно переходить к более сложным материалам.
Из каких частей обычно состоит квадрокоптер — это тоже нужно знать, чтобы его программировать. Например вот тут можно почитать про конструкцию простых квадрокоптеров и из чего они состоят. А то иногда студенты представляют электрическую схему квадрокоптера как сеть Кандинский.
В целом нужно понимать, какие датчики можно установить на борт беспилотного летательного аппарата. Какой контроллер всё это может обрабатывать. На практике достаточно представлять, что аппарату требуется IMU, а для ориентации вне помещений можно использовать GPS. Про GPS можно отдельно посмотреть тут для глубокого понимания. Очень классная статья — рекомендую. Я «завис» на несколько часов.
Для задач управления используются PID регуляторы. Вот тут можно посмотреть, что это такое и «с чем его едят». Плюс представлять, что такое фильтрация сигналов, хотя бы в части понимания и общего представления про фильтрацию. Привет Электротехнике, которую очень часто забывают или вообще игнорируют.
И наконец самое сложное, что нужно знать чтобы понимать полетные прошивки — это про кватернионы. Именно их используют для описания ориентации квадрокоптера в пространстве. Вот тут можно почитать про математику этих интересных гиперкомплексных чисел. Для любителей математики есть даже сравнение кватернионных с матричными преобразованиями, где наглядно показывается что кватернионы позволяют выполнить те же операции с меньшим количеством математических действий.
В ядерной войне
победит тот,
чьи солдаты
лучше понимают
кватернионы...
© Алексей Савватеев
.
Еще мне очень нравится вот такой сайт, где можно «покрутить» кватернионы и понять как из них можно получить ориентацию объекта в пространстве.
На этом в целом можно уже можно закончить нудную часть перейти к теме статьи.
Проекты полетных прошивок и их коды
Благодаря тому, что сейчас микроконтроллеры довольно дёшевы уже есть много проектов квадрокоптеров для самостоятельной сборки, часто имеющие свои полетные коды. Я принципиально стараюсь не рассматривать самые известные проекты — Ardupilot, PX4, Betaflight, iNav, как фактически уже промышленные решения. Попытаюсь найти небольшие проекты на которых становится понятно как работает полетная прошивка. То есть будем искать проекты для обучения на которых можно быстро понять основные принципы (с прицелом на последующее изучение промышленных решений) и при необходимости доработать всё что хочется.
Тот же проект betaflight начинался в 2015 году с совершенно небольшого объема кода и был довольно прост для изучения. Сейчас данный проект существенно больше, почти в 14.5 раз и ориентироваться в нём гораздо сложнее. Это прямая оценка по количеству строк кода без учета роста сложности.
Рассмотрим проекты полетных прошивок небольших квадрокоптеров на ESP32 и не только. Далее будут те проекты, которые удалось найти на обширных просторах интернета. Наверняка их больше, так что если в комментах накидаете ещё, буду рад расширить этот список.
Проекты квадрокоптеров и ссылки |
Полетная прошивка |
Краткое описание |
Mini Arduino FPV Drone |
Есть FPV, свой софт для заливки прошивки, свой кастомный пульт, все программируется и собирается с максимальным использованием Arduino совместимых компонентов, относительно дешевый, код поддерживает 10 мультироторных аппаратов, код хотя и разделен на модули требует времени на понимание |
|
Crazyflie (видео, материалы) |
Фактически OpenSource автопилот для квадрокоптера весом 27 грамм (есть готовые рамы-платы, можно собрать из частей и существует много таких проектов), есть всё тоже что в предыдущем проекте и ещё намного больше, как следствие код уже чем-то напоминает коды более сложных проектов. |
|
Есть всё необходимое. Довольно много разных проектов на данном коде, но код уже весьма сложный для понимания, хотя и разделен на блоки и подсистемы |
||
Различные проекты (пример видео) |
Решение для мультикоптеров и аппаратов самолетного типа, в целом также большой и уже профессиональный код и своя экосистема |
|
Супер минималистичный код всего на 170 строк для управления квадрокоптером. Очень классные материалы для STEM обучения, но не содержит архитектуры для более сложных проектов |
А ещё есть много вот таких видео в т.ч. проектов на raspberry pi или orange pi от индийских коллег. В основном, у них всё классно летает, но непонятно на чём, а в ссылках вообще не указывается что за прошивка была использована (полагаю одна из упомянутых выше).
Практически все полетные прошивки идут по пути от небольшого количества кода до огромных кодов с разными летательными аппаратами, поддержкой различных контроллеров, своей наземной станцией и софтом для "заливки" кода на борт, кастомизации сборки, просмотра логов, настройки и др.
Создается экосистема вокруг кода-ядра полетной прошивки. Но вот как раз это ядро начинает теряться из виду, хотя именно на нём все и работает.
Все перечисленные выше проекты имеют свои достоинства и недостатки, но ни один из них не позволяет быстро выполнять полеты если у вас нет "железа" или симулятора полета, которые так часто используются в профессиональных проектах на базе PX4 или Ardupilot, например. Подключение симулятора или игры для симуляций в таких проектах порой представляет отдельный "квест", поэтому хотелось найти проект проще в запуске.
И вот после определенных поисков случайно наткнулся на проект Flix. Плюс группу в телеграм, где обсуждался данный проект и процесс сборки небольшого квадрокоптера и отладки его полетной прошивки.
Что сразу порадовало - это наличие симуляции в Gazebo! А значит можно летать без "железа", которое нужно заказывать из Китая и потом ждать не менее месяца. Стоимость "железа" тоже весьма демократичная, особенно если у вас уже есть какая-либо аппаратура радиоуправления.
При просмотре кода проекта оптимизма ещё прибавилось, т.к. код представляет то что нужно - не 170 строк чтобы что-то летало и не кучу файлов и тулзов для всего чего только можно, а только основные модули и библиотеки. Всего 17 файлов в одной директории. Давайте познакомимся с кодом.
Код прошивки flix
Давайте знакомится с кодом. Первым делом настроим среду для работы и клонируем репозитарий flix. Можно работать как с VSCode, так и со средой Arduino, тут кому что больше нравится. Удобнее всего работать под ОС Linux. Первым делом клонируем репозитарий git проекта:
git clone https://github.com/okalachev/flix
Установка и работа в Arduino IDE хорошо описана тут. Поэтому на этом сильно останавливаться не будем. Самое главное не забудьте пройти гайд до конца и дать разрешения на работу с серийным портом, почему-то наши студенты про это забывают и часто не могут понять в чем проблема с загрузкой прошивки или доступа к микроконтроллеру. Теперь откроем код в среде и пробежимся по файлам прошивки.
Общее описание работы кода приведено в репозитарии. Но оно очень лаконичное и краткое. Разберем код более подробно. Логика работы квадрокоптера прекрасно прослеживается в коде! Первым делом открываем файл flix.ino. Всё четко и понятно с интуитивно понятными названиями функций. Лаконично в 66 строк на момент написания статьи. Так, например, выглядит основной цикл:
void loop() {
readIMU();
step();
readRC();
estimate();
control();
sendMotors();
parseInput();
#if WIFI_ENABLED == 1
processMavlink();
#endif
logData();
}
Сразу понятно как "работает" квадрокоптер. Так же работают практически все полетные прошивки: считывание данных с IMU, задержка, считывание данных сигналов управления с аппаратуры, вычисление будущего положения беспилотника (эстиматор), определение управляющих воздействий (контрол), отправка на моторы полученных команд. Плюс три служебных блока - взаимодействие по uart, если включено, то обработка команд Mavlik и сохранение данных логов.
Также лаконично выглядит и setup. Все те настройки которые нужны в первую очередь тоже тут. Это скорость порта, каналы управления и номера моторов. А пины моторов там где им и положено - в файле motors.ino.
#define RC_CHANNELS 6
#define RC_CHANNEL_ROLL 0
#define RC_CHANNEL_PITCH 1
#define RC_CHANNEL_THROTTLE 2
#define RC_CHANNEL_YAW 3
#define RC_CHANNEL_ARMED 4
#define RC_CHANNEL_MODE 5
#define MOTOR_REAR_LEFT 0
#define MOTOR_REAR_RIGHT 1
#define MOTOR_FRONT_RIGHT 2
#define MOTOR_FRONT_LEFT 3
Особенно порадовал код эстиматора. Это вам не EKF3 в Ardupilot. На таком коде просто можно объяснить сложные концепции.
А на блоке управления полетом очень хорошо можно показывать различные режимы полета и как осуществляется управление. Вот тут про режимы полета:
А вот этот код позволяет далее объяснять концепцию микшера, ну или библиотек моторов в более сложных полетных прошивках.
void controlTorque() {
if (!armed) {
memset(motors, 0, sizeof(motors));
return;
}
motors[MOTOR_FRONT_LEFT] = thrustTarget + torqueTarget.x + torqueTarget.y - torqueTarget.z;
motors[MOTOR_FRONT_RIGHT] = thrustTarget - torqueTarget.x + torqueTarget.y + torqueTarget.z;
motors[MOTOR_REAR_LEFT] = thrustTarget + torqueTarget.x - torqueTarget.y + torqueTarget.z;
motors[MOTOR_REAR_RIGHT] = thrustTarget - torqueTarget.x - torqueTarget.y - torqueTarget.z;
motors[0] = constrain(motors[0], 0, 1);
motors[1] = constrain(motors[1], 0, 1);
motors[2] = constrain(motors[2], 0, 1);
motors[3] = constrain(motors[3], 0, 1);
}
Описание текущей версии кода прошивки по 17 файлам
Файл |
Описание |
flix.ino |
Основной запускаемый файл проекта с главным циклом |
cli.ino |
Реализация интерфейса командной строки (через COM порт) |
control.ino |
Логика управления полетом |
estimate.ino |
Эстиматор для определения положения коптера на основе гироскопа и акселерометра |
imu.ino |
Работа с IMU - гироскоп и акселерометр, включая калибровку |
led.ino |
Работа с лампочкой микроконтроллера |
log.ino |
Логирование в RAM микроконтроллера |
lpf.h |
Фильтр нижних частот (LPF) |
mavlink.ino |
Протокол MAVLink для коммуникации по Wifi |
motors.ino |
Код для контроля моторов через ESC |
pid.h |
Реализация PID регулятора |
quaternion.h |
Легкая библиотека работы с кватернионами (с удобными преобразованиями в вектора) |
rc.ino |
Работа с радиоприемником |
time.ino |
Работа со временем микроконтроллера |
util.ino |
В основном математические функции и защита от перезагрузки при низком напряжении питания |
vector.h |
Легкая библиотека работы с векторами |
wifi.ino |
Параметры и логика Wifi подключения |
Некоторые полезные штуки сразу включенные в проект, такие как работа с протоколом MAVLink, возможность работы по Wifi и конечно же симулятор в Gazebo о котором далее.
Запуск в симуляторе Gazebo и с телефоном вместо RC
Для управления коптером в среде симуляции нам понадобится пульт радиоаппаратуры мобильный телефон. Но для того чтобы управлять беспилотником нам нужно установить приложение наземной станции управления. Наиболее популярным проектом является приложение qgroundcontrol. Но ставить его мы будем не через магазины приложений, а напрямую из релизов официального репозитария (качаем последнюю версию тут).
В зависимости от того какой у вас телефон можно выбрать сборку под соответствующую ОС. У меня на мобильнике Android, а значит скачиваю пакет apk и устанавливаю на телефоне. Для этого нужно на время разрешить установку приложений из непроверенных источников. После установки приложение на телефоне выглядит примерно так
Для работы с нашим проектом нужно будет внести некоторые настройки. А именно включить виртуальный джойстик (если он не был включен ранее) и убрать автоцентрирование газа. Иначе виртуальный квадрокоптер будет как у меня при первом запуске постоянно улетать в космос. Переходим в настройки приложения (нажимая на иконку приложения в левом верхнем углу)
Далее выбираем пункт Application Settings и ставим настройки как показано ниже. У нас все равно на борту нет GPS, поэтому и центрировать карту не обязательно ;)
В принципе когда наш виртуальный беспилотник на компьютере с Gazebo и телефон находятся в одной сети, то наземная станция сразу его увидит. Вы сразу услышите голосовые оповещения о том что подключен беспилотник. Но у меня этого не случилось - видимо что-то намудрил с безопасностью на роутере, поэтому рекомендую на 100% рабочий вариант.
Заводим на мобильном телефоне точку доступа (hotspot) и подключаем ваш ПК к этой точке доступа. После этого устанавливаем и запускаем симулятор Gazebo следующим набором команд из директории проекта flix для ОС Ubuntu. Есть возможность запуска и на MacOS
-
Устанавливаем Arduino CLI
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | BINDIR=~/.local/bin sh
-
Устанавливаем Gazebo 11:
curl -sSL http://get.gazebosim.org | sh
Настраиваем среду Gazebo и все переменные:
echo "source /usr/share/gazebo/setup.sh" >> ~/.bashrc source ~/.bashrc
Устанавливаем SDL2 и другие зависимости:
sudo apt-get update && sudo apt-get install build-essential libsdl2-dev
-
Добавляем вашего пользователя в группу
input
для того, чтобы работала поддержка джойстика (вам нужно будет выполнить перезагрузку или разлогинится и залогинится после выполнения данной команды):sudo usermod -a -G input $USER
-
Запускаем симуляцию:
make simulator
Управление в симуляторе выгладит вот так (у меня пока так красиво летать не получается, но ещё несколько дней в симуляторе и будет похоже):
У меня первым делом была аппаратура, но не было самого аппарата. Поэтому я задумался о покупке переходника, чтобы можно было летать в симуляторе. Выбор пал на вот такой переходник, который почему-то не работает в Windows, поэтому тут ищите более интересные решения. В Linux все распознается и работает. Марку приводить не буду, т.к. мне по итогу продукт не понравился, нет драйверов под Win и в целом не работает в RealFlight, а диск оказался пустым и не читался ни на одном из доступных мне 4 дисководов...
Для настройки пульта я использовал программу jstest-gtk для настройки виртуальных джойстиков. Она же мне помогла с калибровкой пульта в прошивке для режима симуляции.
Калибровка пульта выполняется также как и для реального оборудования и описана ниже. По итогу работает и с телефоном и с аппаратурой радиоуправления, что очень здорово!
Теперь можно летать как на настоящем аппарате и отлаживать полетную прошивку добавляя различные фичи ;) После отладки в симуляторе можно переходить к суровой реальности сборке настоящего аппарата и полетам на нём.
Схема и процесс сборки
После того, как вдоволь наигравшись с кодом и симулятором я понял, что данный проект будет очень полезен для наших студентов, возникло желание собрать реальный аппарат. На тот момент инструкций по сборке практически не было. Была блок-схема от автора проекта и два информативных фото на которых можно было проследить некоторые соединения.
В процессе поиска компонентов, которые представлены в репозитарии проекта выяснилось, что некоторые из них практически невозможно купить - в первую очередь приемник DF500 (SBUS), плюс с поиском пульта возник ряд вопросов. Всё остальное легко находится на Aliexpress или в Озоне. Правда есть нюансы, о которых расскажу далее.
У меня в наличии была аппаратура RadioLink AT10 (ссылка на видеогайд по ней), поэтому путем нехитрых поисков был найден соответствующий приемник с SBUS Radiolink R6DSM с рабочим питанием от 3 до 6В. В принципе вы можете выбрать любой приемник, главное чтобы он поддерживал SBUS и имел соответствующий диапазон напряжения питания. При заказе R6DSM также обращайте внимание на верный диапазон питания, т.к. рекомендательные алгоритмы нередко подсовывают то что не нужно.
После этого мною была составлена схема для сборки квадрокоптера. Она постоянно обновляется и если кто-то найдет в ней баги или неточности, то пишите в комментариях. Из последнего - были исправлены цвета для подключения моторов и подключение питания IMU (питать напрямую от батареи надёжнее). Забыл заменить после сборки, так как на радостях долго летал по помещениям IT-Центра МАИ был очень занят по работе и забыл. Кстати, в прошивке предусмотрены тесты направления вращения моторов, что очень помогает при отладке.
По компонентам следует обратить внимание на напряжение моторов и диаметр валов. Рабочее напряжение должно быть именно 3.7В. Причем диаметр вала нужен 0.8 мм, чтобы к нему подходили пропеллеры. Найти именно такие моторы оказалось весьма сложно. Практически все пропеллеры имеют посадочный диаметр 0.8 мм, поэтому если вы, как и я закажите моторы с большим диаметром (1 мм), то есть выход в виде набора микросвёрл. Кстати, с ними пропеллеры держатся очень хорошо, если диаметр отверстия расширить до 0.9 мм. Кроме этого есть готовые наборы 8520 3.7V brushed motor вместе с пропеллерами (там диаметр валов тоже 1мм, если будете заказывать запчасти).
Я не сотрудничаю с магазинами, поэтому не стал долларовым миллионером приведу просто список компонентов для сборки базового комплекта, как получилось у меня для полного и работоспособного проекта. Всё легко находится на популярных площадках.
Название компонента |
Цена на 08.09.2024 |
Аппаратура радиоуправления RadioLink AT10 II (V2) |
12 000 руб |
Радиоприемник Radiolink R6DSM |
940 руб |
Аккумулятор GNB 850mah 1S 60C HV |
493 руб |
Межплатный кабель JST PH2.0 2PIN с проводом, чтобы подключить аккумулятор (как правило продаются наборами по 10 штук, поэтому цена за всё) |
227 руб |
ESP32-WROOM-32 WeMos D1 mini 40 pin Type-C USB |
274 руб |
Гироскоп, акселерометр, магнитометр, барометр GY-91 MPU9250 (обращайте внимание на чип, должен быть MPU-9250 + BMP280, очень много подделок или чипов на базе более дешевого чипа, об этом ниже) |
826 руб |
Micro FPV RC Quadcopter 100MM Brushed Frame Kit Support 8520 Coreless Motor (собственно сама рама) |
818 руб |
4 штуки 2.7A 1S Dual Way Micro Brush ESC (сейчас в проекте рассматривается замена на мосфеты, т.к. это одна из дорогих частей проекта) |
3272 руб |
4 штуки 8520 3.7V brushed motor shaft 0.8mm |
192 руб |
4 штуки Пропеллеры Hubsan 55 mm (обычно комплект из 20 штук) |
236 руб |
Итого без аппаратуры радиоуправления: |
7278 руб. |
Для сборки также понадобится паяльная станция (лучше сразу покупать станцию, если вы собираетесь дальше заниматься квадрокоптерами или робототехникой) - порядка 10 тысяч рублей на 08.09.2024, плюс мелочевка в виде проводов и изоленты для крепления всякой мелочевки. А для крепления плат к раме я использовал уникальный продукт - Двусторонняя Клейкая Лента Прозрачная за 97 рублей.
Плюс для сборки ещё неплохо защитить моторы, распечатав небольшое крепление внизу, если у вас есть 3D принтер. Модельку можно скачать тут. За неё отдельное спасибо Олегу Калачёву. Судя по количеству проб и ошибок - это уже 14 версия где все идеально подходит к моторам при распечатке стандартным соплом 0.4 и слоем 0.2 мм.
Если у вас нет 3D принтера, то после сборки можно просто обмотать моторы внизу изолентой, чтобы проводки от моторов не порвались при первой успешной посадке.
Итого в среднем включая всё оборудование стоимость сборки (с учетом, что аппаратура и паяльная станция останутся у вас для других проектов) составит около 30 000 тысяч. Если у вас уже есть всё для пайки, то около 20 000 тысяч, а если у вас есть аппаратура радиоуправления, то около 7800 рублей. Как я понимаю в будущем проект будет ещё дешевле за счет замены ESC на мосфеты, что явно необходимо, т.к. при подключении от USB они стараются инициализироваться, но у них не получается, что напрягает при работе с проектом.
Помимо базовой конструкции я в схему включил цепь для контроля напряжения на батарейке - т.к. контроль напряжения питания очень важен практически для всех беспилотных летательных аппаратов. В базовой версии кода этого нет - получилось отличное задание для студентов и всего два резистора и конденсатор плюсом к покупкам. Выше их учел в стоимости ;)
Начинаем собирать конструкцию - на картинке ниже фото компоновки IMU и радиоприемника. Причем в финальной конструкции от приемника были отпаяна гребенка с контактами и провода напрямую впаяны в плату, плюс немного подрезал термоусадку, чтобы вся конструкция поместилась в нижней части рамы.
Верный порядок моторов на схеме в Miro. Крепление IMU и радиоприемника к раме сделал на двустороннюю прозрачную липкую ленту. Причем удобно, что у приемника кнопка находится в доступе со внешней стороны рамы. Эта кнопка нам может понадобиться для переключения протокола передачи данных и бинда с аппаратурой управления в дальнейшем.
Первым делом при сборке проекта рекомендую подпаивать IMU и выполнить его проверку не прикрепляя к раме, т.к. потом отклеивать в принципе возможно, но лучше до этого не доводить. Для проверки необходимо подпаять питание и IMU к плате микроконтроллера ESP32 Mini и спаять питания 3.3В платы микроконтроллера и GY-91. Это позволит запитать наш IMU через USB. Подключение можно посмотреть на рисунке одного пользователя ниже:
Далее подключаем микроконтроллер к USB вашего компьютера и грузим прошивку следующей командой. Плюс у нас сразу откроется монитор. Если вы увидите ошибку IMU, значит вам попался "палёный" или "левый" GY-91. Как было в моем случае и у коллеги выше, что сильно задержало первый полет. Детальные инструкции по запуску тут.
Ещё на данном этапе частенько возникают проблемы с USB кабелем - убедитесь, что у вас кабель для передачи данных, а не просто кабель от зарядки (в них просто нет 2-х проводников для данных). И если у вас возникают ошибки при загрузки прошивки на борт, то скорее всего дело именно в кабеле - лучше взять короткий кабель данных :) В моем случае длинный кабель от очков VR не справлялся с задачами загрузки прошивки на микроконтроллер и постоянно летели рандомные ошибки.
Выполняем запуск
make upload monitor
Если все прошло успешно, то вы увидите процесс компиляции (если не выполняли ранее), загрузки полетной прошивки на микроконтроллер и приглашение от полетной прошивки. Нажмите Reset на микроконтроллере. Этап Setup IMU должен пройти успешно. После полной сборки и подключения в окне должно отобразиться следующее:
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1184
load:0x40078000,len:13260
load:0x40080400,len:3028
entry 0x400805e4
Initializing flix
Setup Motors
Motors initialized
Setup IMU, stand still
Setup RC
Initializing complete
Welcome to
_______ __ __ ___ ___
| ____|| | | | \ \ / /
| |__ | | | | \ V /
| __| | | | | > <
| | | `-.| | / . \
|__| |_______||__| /__/ \__\
Commands:
help - show help
show - show all parameters
<name> <value> - set parameter
ps - show pitch/rollw
psq - show attitude quaternion
imu - show IMU data
rc - show RC data
mot - show motor data
log - dump in-RAM log
cr - calibrate RC
cg - calibrate gyro
ca alibrate accel
fullmot <n> - full motor test
reset - reset drone's state
В этом случае можно собирать дальше, припаиваем моторы к ESC и крепим на лучи изолентой любого цвета который вам нравится, спаиваем вместе все провода питания и заводим на разъем для подключения к аккумулятору. По желанию припаиваем питание IMU напрямую к аккумулятору (можно питать и от микроконтроллера через пин 3.3В, а можно напрямую от батареи через 5В - оба варианта рабочие: первый удобен для отладки на первом этапе при питании от USB, дальнейший для отладки с моторами и большей надежности).
После монтажа цепей моторов припаиваем пины приемника и с помощью кнопки на приемнике выбираем нужный режим работы. Нужно нажать дважды в течение 1 секунды для переключения режима на SBUS - светодиод станет фиолетовым.
В итоге должно получиться вот такое чудо техники. Тут отдельно торчат провода для цепи контроля напряжения батареи, а в остальном все собрано как нужно.
Кроме переключения приемника на SBUS не забудьте перевести аппаратуру в 10 канальный режим, т.к. у меня по умолчанию аппаратура была в 12-ти канальном режиме и я долго не мог понять почему при удачном бинде ничего не работает.
Далее биндим приемник и аппаратуру, выбираем на ней нужный нам вид аппарата и можно приступать к настройке. О ней далее
Запуск и настройка квадрокоптера
Когда квадрокоптер собран и выполнен бинд аппаратуры и приемника, то нужно выполнить ещё несколько операций на понимание кода. Это калибровка акселерометра и радиоаппаратуры. Для калибровки подключаем квадрокоптер к USB и запускаем монитор как было описано выше.
Запуск калибровки imu - калибровка акселерометра выполняется командой ca
, после чего выполняется стандартная для любой полетной прошивки процедура калибровки и полученные данные нужно вписать в коде в файл imu.ino
Запуск калибровки RC осуществляется командой cr
, после чего нужно пройти процесс калибровки последовательно выполняя инструкции. Далее полученные параметры нужно заполнить в файле rc.ino
При калибровке радиоаппаратуры убедитесь, что у вас не включено инвертирование каналов на АТ-10. Вот тут гайд как работать с этой аппаратурой. У меня с этим были проблемы. Если же вы ранее подключали пульт через переходник в среде Gazebo, то все-равно рекомендую выполнить настройку аппаратуры, т.к. значения будут отличаться.
Когда все параметры внесены в код, заливаем прошивку на борт и можно начинать первый полет. Лучше всего это делать над мягкой поверхностью. У меня для этих целей использовался домашний диван ;))) Только не забывайте об эффекте Вентури и не располагайте его близко к спинке.
Первый полет прошел успешно, т.к. не пришлось долго разбираться с калибровкой RC и после штатной калибровки всё работало как задумано. Полет над гнездом кукушки диваном вы можете наблюдать на следующем видео.
Собственно далее полеты над нашей усадьбой Гончаровых в Яропольце показали, что мощности передатчика и усиления приемника достаточно чтобы квадрокоптер улетел на дальность около 120 метров. Больше просто не пробовал ввиду непредвиденной поломки.
Обучение студентов МАИ
В 2024 году, весной, материалы проекта Flix использовались на практике в курсе "Программирование полетных контроллеров" для студентов Передовой инженерной школы МАИ и на 8 институте. Самое прикольное было отлаживать прошивку в симуляторе Gazebo — это реально очень важная и бесценная часть данного проекта.
Плюс объясняя код проекта можно легко понять довольно сложные концепции по программированию полетных контроллеров и логике автопилота. А уже далее переходить к более сложным проектам и даже собственным реализациям алгоритмов управления. Так как проект «зашел» нашим студентам, то мы его включили в учебную программу этого курса.
Дальше больше — на IV Весенней школа математического моделирования в Яропольце ребята разрабатывали элементы беспилотных авиационных систем для поддержания порядка на массовых мероприятиях. В рамках этого трека прошел мастер‑класс по полетным прошивкам на примере данного проекта. Получилось хорошо, правда аппарат со всего размаху влетел в бетон произвел непредвиденную посадку на плитку усадьбы Гончаровых и был выведен из строя. Но до этого успел произвести несколько полетов. В последствии заменен один двигатель и все работает отлично, даже винты все остались целы.
Также мы демонстрируем разные проекты на курсах повышения квалификации для специалистов и разработчиков. Так что если кто захочет разобраться в премудростях программирования полетных прошивок, то приходите к нам. Тем более, что большую часть расходов на обучение компенсирует специальная грантовая программа. Курс называется - Разработка программного обеспечения для полётного контроллера БАС и будет проводиться в режиме ON LINE.
Вот такая получилась статья в которой много букв и ещё реклама про обучение и про отличный проект Flix. Кто дочитал до конца (или докрутил до этого места) и кому интересен проект залетайте в TG группу, где обсуждается дальнейшее развитие проекта и новая версия реализации этого замечательного аппарата.
А мы и дальше будем на примере таких отличных проектов обучать наших студентов и всех желающих изучить программирование автопилотов :)
// С уважением,
Зам. директора IT-Центра МАИ по RnD, Петр Ухов
Комментарии (21)
semenyakinVS
08.09.2024 18:54С одной достопамятной даты любые проекты связанные с дронами и ракетостроением в России воспринимаются однозначно - как посты делающие врага сильнее. Заверения авторов об исключительно гражданском использовании на веру брать не выходит. И так будет ещё доолго, увы. Поэтому, автор, не обессудьте...
AWRDev
08.09.2024 18:54+4А союзников сильнее они не сделают?
Stratum
08.09.2024 18:54А союзнику свой президент фактически запретил любые разработки в этой сфере, если ты не оборонное КБ.
Dynasaur
08.09.2024 18:54+5В этой статье нет ничего, чего было бы откровением для специалиста. Это популярное объяснение для тех, кто не писал прошивки полётных контроллеров. Не считая того, что есть открытый проект ArduPilot, где в написании прошивки может поучаствовать кто угодно, как и скачать готовую. Книжки про конструкции и расчёты ракетных двигателей, например, свободно продавались и продаются с незапамятных времён. Как и по системам управления ракетами. По тому, что секретить надо то, что действительно представляет секрет, а не всё подряд.
DmitryOlkhovoi
08.09.2024 18:54Дак и бетафлайт накатить на свой арм не составит никакого труда. Все это и так опенсорсное. Ну и десяток других прошивок. Там компоненты все копешные и есть уже не одна схема. Берешь ф7, гиро и поехали. Писать самим с нуля это чисто ради интереса.
Dynasaur
08.09.2024 18:54Есть достаточно ситуаций когда надо делать свою прошивку. Не писать с нуля, но добавлять в неё свои функции. Это всё что касается необычных, нестандартных бпла. Например, захотите управлять орнитоптером или конвертопланом, а не квадрокоптером - придётся адаптировать имеющуюся прошивку.
QwertyOFF
08.09.2024 18:54+4Если кто-то захочет повторить, берите любую современную аппаратуру и приемник с протоколом ELRS. Дешевле, связь лучше (LoRa) и широко используется в хобби фпв-полетов
itmai Автор
08.09.2024 18:54+1Спасибо за комментарий! Сами задумываемся над этим. Просто с аппаратурой, приведенной в статье, исторически сложилось. Может порекомендуете какой-нибудь приемник таких размеров и с напряжением питания 3.7В, плюс недорогую аппаратуру, а то цены на Boxer "кусаются".
QwertyOFF
08.09.2024 18:54+1Можно взять pocket если не смущает его маленький размер. Недорого, отзывы пользователей хорошие.
Приемников работающих напрямую от одной ячейки лития я не видел, обычно от 5В, но внутри стоит LDO на 3.3В, так что с какой-то долей везения может заработать. Если захотите, замените этот LDO на перемычку (паять очень мелко) и будете питать напрямую от бортовых 3.3В.
В вашем случае я выбрал бы приемник с интегрированной антенной, чтоб не мешалась. Как вариант Happymodel ep2, BetaFPV lite
itmai Автор
08.09.2024 18:54Pocket около 8500 руб. в среднем, что уже неплохо. Но как раз проблема с тем, что не удалось найти такого приемника на 3.3В - 3.7В, а чтобы впаять перемычку нужно оборудование (специальные пинцеты и как минимум увеличительное стекло с зажимами), плюс навыки работы с SMD (может и паста и гель понадобится) и не факт что заработает, т.к. питать придется от LDO на плате микроконтроллера, а наводки и прочие плюсы от проводов тоже будут оказывать влияние. Попробуем ещё в этом направлении посмотреть. Спасибо!
QwertyOFF
08.09.2024 18:54+1Посмотрите на озоне из Китая и Али, там бывают хорошие цены на аппаратуры и прочее по теме, покет стоит около 5 т.р.
Кстати, в вашем микроконтроллере же тоже напряжение 3.3В через LDO получается? Тогда я бы не стал сильно переживать из-за приемника с LDO.
blind_oracle
08.09.2024 18:54+1Проще всего поставить step-up с лития на 5 вольт. Ток на приёмнике мизерный, так что потерь особо не будет.
itmai Автор
08.09.2024 18:54Спасибо за комментарий! Тоже об этом задумались - т.к. в принципе приемники есть миниатюрные на 5В. Подскажите, а есть ли прямо миниатюрные платки DC-DC преобразователей для этих целей которые можете посоветовать, может пользовались?
blind_oracle
08.09.2024 18:54+1Я пользовался такими: https://www.aliexpress.com/item/1005002587844860.html
Они, правда, buck-boost и будут больше приёмника размером :)
Есть ещё чистый boost, который вообще миниатюрный: https://www.aliexpress.com/item/32809095271.html
Ток до 0.5А тянет, что для приёмника ELRS будет более чем достаточно даже если там мощная телеметрия.
MasterIT75
08.09.2024 18:54+1Большое спасибо за Ваш труд. Все достаточно подробно объяснено на доступном языке.
chv
08.09.2024 18:54+2Почитал статью, спасибо за веру в мой проект и использование в образовательном процессе МАИ! Описан опыт использования довольно интересно и качественно.
itmai Автор
08.09.2024 18:54Спасибо за отличный проект! Ждем продолжения с заменой ESC на мосфеты (как уже понятно первый полет прошел успешно) и готовых комплектов для обучения! ;)
Dynasaur
Такую обширную тему раскрыли в одной статье! Браво! Всё чётко, по порядку, со всеми нужными ссылками и ничего лишнего. Как минимум, чувствуется опыт преподавания :-) Спасибо за качественный материал.