Flix: разработка полетного контроллера с нуля
2.02K subscribers
48 photos
31 videos
3 files
67 links
По всем вопросам @okalachev
Чат обсуждения: @opensourcequadcopterchat
GitHub: https://github.com/okalachev/flix
Учебник: https://quadcopter.dev
Download Telegram
Flix: разработка полетного контроллера с нуля
flix2-draft.pdf
Пока в Курсе возникла пауза, я решил наконец возобновить работу над платой. Тем более что про нее продолжают спрашивать.

В прошлый раз я застопорился из-за того, что разъем для камеры использует огромное количество пинов. В результате их не очень хватает, чтобы все остальное красиво подключить — как выяснилось, часть пинов на самом деле заняты внутренним PSRAM.

Чтобы наконец-то доделать плату, я решил пока остановиться на упрощенной версии, без подключения камеры (но идею с камерой я не забрасываю).

Я переработал схему, учел комментарии к прошлому посту (в частности, добавил токоограничивающие резисторы перед mosfet'ами), вывел больше пинов на «гребенки», исправил пин для измерения напряжения (ADC на GPIO15 не работает вместе с Wi-Fi).

Оставшиеся вопросы:

1️⃣ Как наиболее оптимально организовать питание ESP32 и других компонентов. Использовать более редкий buck-boost TPS63021 с фиксированным напряжением 3.3 В или TPS63020 с регулируемым выходом? Или поставить boost до 5 В с последующим LDO до 3.3 В, как сделано на некоторых платах?

2️⃣ Как сделать, чтобы плата корректно работала и от аккумулятора, и от USB, от обоих источников одновременно. Сейчас эти линии питания просто соединены напрямую, и это явно не будет работать. Мне нужны какие-то референсы, как это правильно организовывается.

3️⃣ В версии с камерой видимо придется управлять моторами через внешний I2C ШИМ-контроллер, потому что пинов не хватает. А лучше бы через готовый I2C-драйвер для 4 (или больше) коллекторных моторов, но такой я пока не нашел.

#pcb Буду рад вашим советам! Свежую версию схемы я приложу в комментариях. ▶️
👍156
Media is too big
VIEW IN TELEGRAM
Вчера было четвертое занятие в 548-й школе. Я сделал подробную лекцию, где построчно разобрал код полетной прошивки и рассказал, как ее можно модифицировать, после чего была свободная работа. И день получился очень результативным.

Первый результат, который я хочу показать — заработал самодельный пульт, который работает по протоколу ESP-NOW 🥳.

Протокол ESP-NOW работает на частотах Wi-Fi, и встроен во все ESP32. И он намного лучше подходит для управления дроном, чем Wi-Fi. Этот протокол очень легковесный и низкоуровневый, в нем не требуется установка соединения, меньше задержек, и он может работать на расстояниях до сотен метров.

Участник курса @kiraflux_0XC0000005 добавил отправку MAVLink-сообщения MANUAL_CONTROL в свой пульт и модифицировал Flix так, чтобы он принимал данные по ESP-NOW. Еще он планирует выводить консоль или другие данные с дрона на встроенный экран пульта. Правда, управлять не очень удобно из-за подпружиненного стика газа, но возможно.

Поддержка ESP-NOW — это действительно полезная фича, и я планирую внедрить ее в официальную версию прошивки.

Исходники пульта и модифицированного Flix (который называется Klyax!) выложены на GitHub.
🔥45👍104👏2
Еще один результат на последнем занятии — это летающий дрон на плате ESP32‑S3‑CAM с разъемом для камеры.

Пришлось немного модифицировать прошивку, снизить частоту ШИМ и поменять ledc на analogWrite (тут пока не разобрались, почему).

Следующая задача — заставить камеру работать одновременно с полетом. Для этого надо правильно склеить полетную прошивку с тестовым скетчем CameraWebServer, который стримит картинку с камеры в браузер. Сам сервер там запускается в отдельной таске, так что это должно быть не сложно, но пока оно почему-то не заработало.

Вообще, исследование возможности совмещения работы с камерой и полетного алгоритма в одной прошивке — это одна из целей этого проекта. Лично мне очень интересно это сделать.

Так что все, кто хотел поэкспериментировать с платой с камерой - запускайте на ESP32‑S3‑CAM, не на ESP32‑CAM (там не работает).
🔥35👍111👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Попробовал сгенерировать плату дрона с помощью искусственного интеллекта flux.ai. Вышло не особо удачно.

Вообще, я хотел сделать в нем только трассировку, но не нашел там способа импорта проекта из EasyEDA, поэтому «заказал» плату целиком. Он долго уточнял детали, затем выдал план работ, который я подтвердил. Затем он ушел в работу на вечность. После нескольких часов работы он вошел в какой-то дурной цикл, бесконечно подбирая и размещая на плате слот для SD-карты. Увидев это, я остановил процесс.

И все бы ничего, но для начала работы в этом сервисе, нужна была платная подписка. Так еще и после исчерпания 500 кредитов, за каждый дополнительный шаг снимаются дополнительные деньги. В итоге я потратил 15 баксов на подписку, и еще 17 за дополнительные кредиты, которые он съел в этом своем вечном цикле, и осмысленный результат так и не получил.

Я написал про ситуацию в техподдержку, но ответа пока нет.

В общем, не знаю, может мне просто не повезло, а может ИИ пока не справляются с такими сложными проектами с нуля. А у вас какой опыт с ИИ-схемотехникой? #pcb
😁155😢2🤡1
Пока я очень медленно работаю над своей платой, обнаружилась китайская версия дрона Flix на плате. С переводом описания и прошивки на китайский! Даже есть некое сообщество в QQ, с загадочным номером 203402819 (не знаю, как туда войти).

Ссылки:
🔸 https://oshwhub.com/malagis/esp32-mini-plane.
🔸 https://www.bilibili.com/video/BV14vyqBFEJn/?spm_id_from=333.337.search-card.all.click.

Но ничего, моя плата уже близка к завершению, осталось несколько моментов по схеме и трассировка. Надеюсь, уже скоро доделаю.
🔥2910👍3🗿3👏1🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
По ходу курса я починил интересный баг, который иллюстрирует один из принципов проектирования PID-регулятора: I- и D-член нужно обнулять, если управляющее воздействие не эффективно.

Баг проявляется при взлете с наклонной поверхности. После арминга моторы начинают крутиться в холостом режиме, активируются PID-регуляторы. Но они не знают, что в холостом режиме моторы не оказывают никакого эффекта на ориентацию дрона. В результате, интегральный член переполняется, и при реальном взлете дрон сразу уносит в сторону.

Вот коммит, который исправляет эту проблему — сбрасывает PID'ы, если моторы работают в холостом режиме.

Похожий эффект можно наблюдать на любой полетной прошивке, если дрон при автономном взлете упрется в потолок. В этом случае управление окажется неэффективным, PID-регулятор по вертикальной скорости начнет увеличивать интегральную ошибку, тяга будет расти все больше, и дрон начнет упираться в потолок все сильнее и сильнее. Хотя смысла в этом нет, но это просто поведение PID-регулятора при неэффективном управляющем воздействии.
👍39🔥194
Flix: разработка полетного контроллера с нуля
Вчера было четвертое занятие в 548-й школе. Я сделал подробную лекцию, где построчно разобрал код полетной прошивки и рассказал, как ее можно модифицировать, после чего была свободная работа. И день получился очень результативным. Первый результат, который…
Media is too big
VIEW IN TELEGRAM
Вчера в 548-й школе немного потестили самодельный ESPNOW-пульт на дальность.

Отлетали метров на 50, дальше дрон уже практически не видно. Управляемость остается нормальной, связь стабильная. Хотя это модули ESP со встроенной антенной, а бывают и с внешней.

Кстати, так как Flix использует для управления протокол MAVLink, то этот пульт в теории может управлять и дроном на прошивке PX4 или ArduPilot.

Репозиторий пульта: https://github.com/KiraFlux/ESP32-DJC.
👍20🔥15💯3👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Виброразвязка гироскопа

Собрал (с помощью учеников) себе новую версию дрона, он полетел, но крайне нестабильно — ориентация уплывала при включении моторов. Подумал, что дело в вибрациях, попробовал поставить IMU на двойной скотч и это действительно слегка помогло.

Правда, потом проблема оказалась в другом, но тем не менее я решил сравнить показания гироскопа в случае, когда плата IMU прикручена винтами и когда посажена на двусторонний скотч.

Как видно, со скотчем показания у стоящего на месте дрона гораздо «спокойнее», что может положительно сказаться на стабильности полета.

Как вы думаете, стоит ли виброразвязывать моторы и IMU и как это лучше делать?
👍225🔥2
Flix: разработка полетного контроллера с нуля
Пока в Курсе возникла пауза, я решил наконец возобновить работу над платой. Тем более что про нее продолжают спрашивать. В прошлый раз я застопорился из-за того, что разъем для камеры использует огромное количество пинов. В результате их не очень хватает…
flix2-draft3.pdf
202.1 KB
Плата Flix — финальный черновик схемы #pcb

Поменял MOSFET'ы и диоды для моторов на более мощные (по совету из комментариев), с большим запасом по току. Добавил ESD-защиту USBLC6 на USB.

Решил убрать SD-карту — она занимает слишком много места. Предполагается, что логи будут писаться в PSRAM и скачиваться по Wi-Fi сразу после полета автоматически.

🔋 Долго думал над схемой питания, в итоге остановился на двух отдельных линиях — buck-boost для ESP32 и линейнике для IMU. Почему именно так:

▶️ IMU-датчик очень чувствителен к шуму и пульсациям, поэтому для него рекомендуется использовать именно линейный стабилизатор, который дает наиболее чистое питание. Я использовал LP5907, который идеален для IMU: у него очень низкий шум и высокий коэффициент подавления пульсаций PSRR (82 дБ на 1 кГц). Кроме этого, он подключен напрямую к аккумулятору (не к пульсирующему buck-boost), благо IMU допускает просадку напряжения вплоть до 1.7 В.

▶️ ESP32, напротив, не чувствителен к пульсациям, но зато может перезагружаться при просадках. Поэтому он запитан от buck-boost — TPS63020. Это дешевый и популярный преобразователь, который может стабильно выдавать 3.3 В при входном напряжении от 1.8 до 5.5 В.

▶️ Для переключения между источниками питания (аккумулятор и USB) применен чип LM66200 (опять же из комментариев) — так называемый «идеальный диод». Он не пускает ток в ненужную сторону, но при этом не создает падения напряжения, как обычные диоды.

Я думаю, такая схема оптимальна, так что это финальный черновик. Жду ваших комментариев и приступаю к трассировке!
25🔥13👍6🏆2
Media is too big
VIEW IN TELEGRAM
Курс в 548 школе завершился (напишу свои выводы позже), но проектная работа продолжилась, и есть крутой результат!

Удалось завести одновременную работу с камерой и управление полетом на дроне с платой ESP32-S3-CAM.

То есть одна и та же прошивка:

🔸 Работает с камерой и передает видеострим по Wi-Fi.
🔸 Реализует полетный контроллер, собственно, управление моторами.

Работа с камерой и http-сервер запускаются в отдельных тасках FreeRTOS. Мы увеличили приоритет таски полетного алгоритма (loopTask), чтобы работа с камерой его не «перебивала», и стабильный полет был возможен.

Я делаю большую ставку на такое использование Flix, потому что это позволит реализовывать алгоритмы компьютерного зрения на маленьком и дешевом дроне, используя всего лишь один ESP32. Простейшие — прямо на борту, более сложные — с передачей видео на компьютер.
👍35🔥163🏆1
Подвожу итоги Курса в школе 548

1️⃣ Получилось более основательное мероприятие, чем смена в Роболагере. Было значительно больше времени на домашние задания и работу над проектами.

2️⃣ Вырисовывается достаточно логичный курс из 5-6 лекций и 3-4 практических занятий: вводная лекция по БПЛА, рассказ про проект Flix, дизайн рамы (домашнее задание), электроника беспилотника, сборка и настройка, доскональный разбор прошивки и дальнейшая свободная работа над проектами участников. Все участники сами собирали прошивку, многие — вносили существенные модификации.

3️⃣ Дети взялись за работу с большим энтузиазмом, большинство быстро справилось с проектированием и сборкой. Правда, потом по разными причинам перерывы между занятиями увеличились (до 2-4 недель), и энтузиазм немного поутих. Думаю, что такой курс лучше проводить «в один присест», с занятиями раз в неделю, либо интенсивом, как в Роболагере.

4️⃣ Также при наличии формальной защиты проектов/результатов (как это было в Роболагере), мотивацию участников сохранить легче, чем без нее (как было здесь).

5️⃣ Благодаря использованию самых базовых компонентов, бюджет закупок был очень небольшим.

6️⃣ Получилось несколько крутых проектов — среди них самодельный пульт на ESPNOW, и дрон на ESP32S3 с камерой. Обе эти фичи (поддержка ESPNOW и камеры) будут добавлены в прошивку.

7️⃣ Больше материалов о мероприятии, включая STL'ки, опубликованы в дневнике использования проекта в GitHub-репозитории.

Спасибо представителю школы Константину Юрьевичу Сергееву за предложение сделать такой курс. Это внесло большой вклад в развитие проекта. Если у вас есть образовательное учреждение и вы хотите организовать у себя что-то подобное — пишите, обсудим!
🔥35👍1610
Настройка ориентации IMU и калибровка горизонта

С определенным опытом применения моего полетника реальными людьми, стало понятно, что слишком многие застревают на том, чтобы корректно настроить ориентацию IMU, и дрон не летит.

Делалось это модификацией функции rotateIMU в коде. В том числе потому, что залезание в код в принципе предусматривается, как часть пользовательского опыта. Но практика показала, что вращение в ней задано слишком неочевидно и это слишком сложно для пользователей.

В порядке приведения полетника в более user-friendly вид (но сохраняя минимализм):

❇️ Добавил настройку ориентации IMU при помощи параметров: IMU_ROT_ROLL, IMU_ROT_PITCH, IMU_ROT_YAW. Параметры меняются из QGroundControl. Значения задаются в радианах, что не особо удобно, но радианы это дефолт, а стоит ли менять вообще все на градусы ради удобства — пока не уверен, что думаете?

❇️ Сделал диаграмму со значениями углов для всех обычных способов установки IMU (см. пикчу).

❇️ C появлением этих параметров появилась возможность относительно легко добавить калибровку горизонта (как в больших полетниках). Она опциональна и компенсирует неидеально горизонтальное расположение IMU на раме.

Для этой калибровки дрон устанавливается в строго горизонтальное положение, и затем вызывается команда cl. Она вычисляет разницу между вектором «строго вверх» и вектором «вверх» текущей attitude. Эта разница добавляется к параметрам ориентации IMU.

Изменения находятся в ветке imu-rot. Надеюсь, теперь пользователи не будут застревать на этапе выставления корректной ориентации IMU, и больше людей смогут довести Flix до полета. Почитать обновленную документацию.
22🔥12👍9
Итоги года

Главный итог этого года — это, конечно, то, что образовательный курс из теоретической задумки стал реальным мероприятием, точнее двумя: проектная смена в «Роболагере» и Курс в 548 школе.

За год пользователи собрали несколько десятков дронов. Среди них первый Flix на бесколлекторных моторах, дрон с управлением по ESPNOW и на ESP32S3 с камерой. Сделан первый автономный полет. А еще возникла целая отдельная китайская версия на плате, у которой есть множество реальных пользователей и отдельное китайское сообщество.

Каким-то невероятным образом в последний день года на канале оказалось ровно 1999 подписчиков, ждем 2000-го! :)

Не успелось: версия на плате и задуманные главы учебника (сейчас опубликовано только 2 главы) — на этом я сконцентрируюсь в следующем году. А еще в следующем году я ожидаю новые мероприятия, нововведения, эксперименты — все это будет освещено в канале!

🎄 Всех с новым годом! 🎉
Please open Telegram to view this post
VIEW IN TELEGRAM
50🔥14👍12🏆12🎄2
Flix становится серьезным проектом, а главное, что должно быть у серьезного проекта — это, конечно же, логотип. Я нарисовал вот такой.

Как вам? Пожалуйста, проголосуйте реакцией на пост. Если будет больше положительных реакций, логотип будет принят.
👍135👎16🔥71