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
Еще один результат на последнем занятии — это летающий дрон на плате 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 становится серьезным проектом, а главное, что должно быть у серьезного проекта — это, конечно же, логотип. Я нарисовал вот такой.

Как вам? Пожалуйста, проголосуйте реакцией на пост. Если будет больше положительных реакций, логотип будет принят.
👍133👎16🔥71
Решил опубликовать промежуточный результат проектирования платы. Дорожки почти не рисовал, но распределил компоненты. Разъем для камеры все-таки вернул обратно (раз уж она работает!), будет совместно использовать почти все GPIO с гребенки.

Все рекомендовали 4-слойную плату. Вот я как их использовал:

🔹Верхний слой: условно «сигнальный». ESP32, IMU (U5) очень близко центру + стабилизатор (U4), барометр (U6), индикатор питания (LED1) и RGB-светодиод (LED2), кнопка Boot, USB-C.
🔹2-й слой: полностью земля — это общая рекомендация для большинства плат.
🔹3-й слой: оставлен под питание 3.3V и сигналы.
🔹Нижний слой: силовая часть. Buck-Boost (U3) и его обвязка (включая индуктивность L1) и силовые цепи моторов. Туда я же ставлю разъем для камеры CAM1 и его обвязку — на верхнюю сторону платы он не помещается.

Что думаете? Хотелось бы узнать ваши советы и комментарии перед тем, как продолжать! #pcb
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥322🏆1