Еще один результат на последнем занятии — это летающий дрон на плате ESP32‑S3‑CAM с разъемом для камеры.
Пришлось немного модифицировать прошивку, снизить частоту ШИМ и поменять ledc на analogWrite (тут пока не разобрались, почему).
Следующая задача — заставить камеру работать одновременно с полетом. Для этого надо правильно склеить полетную прошивку с тестовым скетчем CameraWebServer, который стримит картинку с камеры в браузер. Сам сервер там запускается в отдельной таске, так что это должно быть не сложно, но пока оно почему-то не заработало.
Вообще, исследование возможности совмещения работы с камерой и полетного алгоритма в одной прошивке — это одна из целей этого проекта. Лично мне очень интересно это сделать.
Так что все, кто хотел поэкспериментировать с платой с камерой - запускайте на ESP32‑S3‑CAM, не на ESP32‑CAM (там не работает).
Пришлось немного модифицировать прошивку, снизить частоту ШИМ и поменять ledc на analogWrite (тут пока не разобрались, почему).
Следующая задача — заставить камеру работать одновременно с полетом. Для этого надо правильно склеить полетную прошивку с тестовым скетчем CameraWebServer, который стримит картинку с камеры в браузер. Сам сервер там запускается в отдельной таске, так что это должно быть не сложно, но пока оно почему-то не заработало.
Вообще, исследование возможности совмещения работы с камерой и полетного алгоритма в одной прошивке — это одна из целей этого проекта. Лично мне очень интересно это сделать.
Так что все, кто хотел поэкспериментировать с платой с камерой - запускайте на ESP32‑S3‑CAM, не на ESP32‑CAM (там не работает).
🔥35👍11❤1👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Попробовал сгенерировать плату дрона с помощью искусственного интеллекта flux.ai. Вышло не особо удачно.
Вообще, я хотел сделать в нем только трассировку, но не нашел там способа импорта проекта из EasyEDA, поэтому «заказал» плату целиком. Он долго уточнял детали, затем выдал план работ, который я подтвердил. Затем он ушел в работу на вечность. После нескольких часов работы он вошел в какой-то дурной цикл, бесконечно подбирая и размещая на плате слот для SD-карты. Увидев это, я остановил процесс.
И все бы ничего, но для начала работы в этом сервисе, нужна была платная подписка. Так еще и после исчерпания 500 кредитов, за каждый дополнительный шаг снимаются дополнительные деньги. В итоге я потратил 15 баксов на подписку, и еще 17 за дополнительные кредиты, которые он съел в этом своем вечном цикле, и осмысленный результат так и не получил.
Я написал про ситуацию в техподдержку, но ответа пока нет.
В общем, не знаю, может мне просто не повезло, а может ИИ пока не справляются с такими сложными проектами с нуля. А у вас какой опыт с ИИ-схемотехникой? #pcb
Вообще, я хотел сделать в нем только трассировку, но не нашел там способа импорта проекта из EasyEDA, поэтому «заказал» плату целиком. Он долго уточнял детали, затем выдал план работ, который я подтвердил. Затем он ушел в работу на вечность. После нескольких часов работы он вошел в какой-то дурной цикл, бесконечно подбирая и размещая на плате слот для SD-карты. Увидев это, я остановил процесс.
И все бы ничего, но для начала работы в этом сервисе, нужна была платная подписка. Так еще и после исчерпания 500 кредитов, за каждый дополнительный шаг снимаются дополнительные деньги. В итоге я потратил 15 баксов на подписку, и еще 17 за дополнительные кредиты, которые он съел в этом своем вечном цикле, и осмысленный результат так и не получил.
Я написал про ситуацию в техподдержку, но ответа пока нет.
В общем, не знаю, может мне просто не повезло, а может ИИ пока не справляются с такими сложными проектами с нуля. А у вас какой опыт с ИИ-схемотехникой? #pcb
😁15❤5😢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.
Но ничего, моя плата уже близка к завершению, осталось несколько моментов по схеме и трассировка. Надеюсь, уже скоро доделаю.
Ссылки:
🔸 https://oshwhub.com/malagis/esp32-mini-plane.
🔸 https://www.bilibili.com/video/BV14vyqBFEJn/?spm_id_from=333.337.search-card.all.click.
Но ничего, моя плата уже близка к завершению, осталось несколько моментов по схеме и трассировка. Надеюсь, уже скоро доделаю.
🔥29❤10👍3🗿3👏1🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
По ходу курса я починил интересный баг, который иллюстрирует один из принципов проектирования PID-регулятора: I- и D-член нужно обнулять, если управляющее воздействие не эффективно.
Баг проявляется при взлете с наклонной поверхности. После арминга моторы начинают крутиться в холостом режиме, активируются PID-регуляторы. Но они не знают, что в холостом режиме моторы не оказывают никакого эффекта на ориентацию дрона. В результате, интегральный член переполняется, и при реальном взлете дрон сразу уносит в сторону.
Вот коммит, который исправляет эту проблему — сбрасывает PID'ы, если моторы работают в холостом режиме.
Похожий эффект можно наблюдать на любой полетной прошивке, если дрон при автономном взлете упрется в потолок. В этом случае управление окажется неэффективным, PID-регулятор по вертикальной скорости начнет увеличивать интегральную ошибку, тяга будет расти все больше, и дрон начнет упираться в потолок все сильнее и сильнее. Хотя смысла в этом нет, но это просто поведение PID-регулятора при неэффективном управляющем воздействии.
Баг проявляется при взлете с наклонной поверхности. После арминга моторы начинают крутиться в холостом режиме, активируются PID-регуляторы. Но они не знают, что в холостом режиме моторы не оказывают никакого эффекта на ориентацию дрона. В результате, интегральный член переполняется, и при реальном взлете дрон сразу уносит в сторону.
Вот коммит, который исправляет эту проблему — сбрасывает PID'ы, если моторы работают в холостом режиме.
Похожий эффект можно наблюдать на любой полетной прошивке, если дрон при автономном взлете упрется в потолок. В этом случае управление окажется неэффективным, PID-регулятор по вертикальной скорости начнет увеличивать интегральную ошибку, тяга будет расти все больше, и дрон начнет упираться в потолок все сильнее и сильнее. Хотя смысла в этом нет, но это просто поведение PID-регулятора при неэффективном управляющем воздействии.
👍39🔥19❤4
Flix: разработка полетного контроллера с нуля
Вчера было четвертое занятие в 548-й школе. Я сделал подробную лекцию, где построчно разобрал код полетной прошивки и рассказал, как ее можно модифицировать, после чего была свободная работа. И день получился очень результативным. Первый результат, который…
Media is too big
VIEW IN TELEGRAM
Вчера в 548-й школе немного потестили самодельный ESPNOW-пульт на дальность.
Отлетали метров на 50, дальше дрон уже практически не видно. Управляемость остается нормальной, связь стабильная. Хотя это модули ESP со встроенной антенной, а бывают и с внешней.
Кстати, так как Flix использует для управления протокол MAVLink, то этот пульт в теории может управлять и дроном на прошивке PX4 или ArduPilot.
Репозиторий пульта: https://github.com/KiraFlux/ESP32-DJC.
Отлетали метров на 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 и как это лучше делать?
Собрал (с помощью учеников) себе новую версию дрона, он полетел, но крайне нестабильно — ориентация уплывала при включении моторов. Подумал, что дело в вибрациях, попробовал поставить IMU на двойной скотч и это действительно слегка помогло.
Правда, потом проблема оказалась в другом, но тем не менее я решил сравнить показания гироскопа в случае, когда плата IMU прикручена винтами и когда посажена на двусторонний скотч.
Как видно, со скотчем показания у стоящего на месте дрона гораздо «спокойнее», что может положительно сказаться на стабильности полета.
Как вы думаете, стоит ли виброразвязывать моторы и IMU и как это лучше делать?
👍22❤5🔥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 (опять же из комментариев) — так называемый «идеальный диод». Он не пускает ток в ненужную сторону, но при этом не создает падения напряжения, как обычные диоды.
Я думаю, такая схема оптимальна, так что это финальный черновик. Жду ваших комментариев и приступаю к трассировке!
Поменял 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. Простейшие — прямо на борту, более сложные — с передачей видео на компьютер.
Удалось завести одновременную работу с камерой и управление полетом на дроне с платой ESP32-S3-CAM.
То есть одна и та же прошивка:
🔸 Работает с камерой и передает видеострим по Wi-Fi.
🔸 Реализует полетный контроллер, собственно, управление моторами.
Работа с камерой и http-сервер запускаются в отдельных тасках FreeRTOS. Мы увеличили приоритет таски полетного алгоритма (loopTask), чтобы работа с камерой его не «перебивала», и стабильный полет был возможен.
Я делаю большую ставку на такое использование Flix, потому что это позволит реализовывать алгоритмы компьютерного зрения на маленьком и дешевом дроне, используя всего лишь один ESP32. Простейшие — прямо на борту, более сложные — с передачей видео на компьютер.
👍35🔥16❤3🏆1
Подвожу итоги Курса в школе 548
1️⃣ Получилось более основательное мероприятие, чем смена в Роболагере. Было значительно больше времени на домашние задания и работу над проектами.
2️⃣ Вырисовывается достаточно логичный курс из 5-6 лекций и 3-4 практических занятий: вводная лекция по БПЛА, рассказ про проект Flix, дизайн рамы (домашнее задание), электроника беспилотника, сборка и настройка, доскональный разбор прошивки и дальнейшая свободная работа над проектами участников. Все участники сами собирали прошивку, многие — вносили существенные модификации.
3️⃣ Дети взялись за работу с большим энтузиазмом, большинство быстро справилось с проектированием и сборкой. Правда, потом по разными причинам перерывы между занятиями увеличились (до 2-4 недель), и энтузиазм немного поутих. Думаю, что такой курс лучше проводить «в один присест», с занятиями раз в неделю, либо интенсивом, как в Роболагере.
4️⃣ Также при наличии формальной защиты проектов/результатов (как это было в Роболагере), мотивацию участников сохранить легче, чем без нее (как было здесь).
5️⃣ Благодаря использованию самых базовых компонентов, бюджет закупок был очень небольшим.
6️⃣ Получилось несколько крутых проектов — среди них самодельный пульт на ESPNOW, и дрон на ESP32S3 с камерой. Обе эти фичи (поддержка ESPNOW и камеры) будут добавлены в прошивку.
7️⃣ Больше материалов о мероприятии, включая STL'ки, опубликованы в дневнике использования проекта в GitHub-репозитории.
Спасибо представителю школы Константину Юрьевичу Сергееву за предложение сделать такой курс. Это внесло большой вклад в развитие проекта. Если у вас есть образовательное учреждение и вы хотите организовать у себя что-то подобное — пишите, обсудим!
1️⃣ Получилось более основательное мероприятие, чем смена в Роболагере. Было значительно больше времени на домашние задания и работу над проектами.
2️⃣ Вырисовывается достаточно логичный курс из 5-6 лекций и 3-4 практических занятий: вводная лекция по БПЛА, рассказ про проект Flix, дизайн рамы (домашнее задание), электроника беспилотника, сборка и настройка, доскональный разбор прошивки и дальнейшая свободная работа над проектами участников. Все участники сами собирали прошивку, многие — вносили существенные модификации.
3️⃣ Дети взялись за работу с большим энтузиазмом, большинство быстро справилось с проектированием и сборкой. Правда, потом по разными причинам перерывы между занятиями увеличились (до 2-4 недель), и энтузиазм немного поутих. Думаю, что такой курс лучше проводить «в один присест», с занятиями раз в неделю, либо интенсивом, как в Роболагере.
4️⃣ Также при наличии формальной защиты проектов/результатов (как это было в Роболагере), мотивацию участников сохранить легче, чем без нее (как было здесь).
5️⃣ Благодаря использованию самых базовых компонентов, бюджет закупок был очень небольшим.
6️⃣ Получилось несколько крутых проектов — среди них самодельный пульт на ESPNOW, и дрон на ESP32S3 с камерой. Обе эти фичи (поддержка ESPNOW и камеры) будут добавлены в прошивку.
7️⃣ Больше материалов о мероприятии, включая STL'ки, опубликованы в дневнике использования проекта в GitHub-репозитории.
Спасибо представителю школы Константину Юрьевичу Сергееву за предложение сделать такой курс. Это внесло большой вклад в развитие проекта. Если у вас есть образовательное учреждение и вы хотите организовать у себя что-то подобное — пишите, обсудим!
🔥35👍16❤10
Настройка ориентации IMU и калибровка горизонта
С определенным опытом применения моего полетника реальными людьми, стало понятно, что слишком многие застревают на том, чтобы корректно настроить ориентацию IMU, и дрон не летит.
Делалось это модификацией функции rotateIMU в коде. В том числе потому, что залезание в код в принципе предусматривается, как часть пользовательского опыта. Но практика показала, что вращение в ней задано слишком неочевидно и это слишком сложно для пользователей.
В порядке приведения полетника в более user-friendly вид (но сохраняя минимализм):
❇️ Добавил настройку ориентации IMU при помощи параметров:
❇️ Сделал диаграмму со значениями углов для всех обычных способов установки IMU (см. пикчу).
❇️ C появлением этих параметров появилась возможность относительно легко добавить калибровку горизонта (как в больших полетниках). Она опциональна и компенсирует неидеально горизонтальное расположение IMU на раме.
Для этой калибровки дрон устанавливается в строго горизонтальное положение, и затем вызывается команда
Изменения находятся в ветке imu-rot. Надеюсь, теперь пользователи не будут застревать на этапе выставления корректной ориентации IMU, и больше людей смогут довести Flix до полета. Почитать обновленную документацию.
С определенным опытом применения моего полетника реальными людьми, стало понятно, что слишком многие застревают на том, чтобы корректно настроить ориентацию 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 главы) — на этом я сконцентрируюсь в следующем году. А еще в следующем году я ожидаю новые мероприятия, нововведения, эксперименты — все это будет освещено в канале!
🎄 Всех с новым годом! 🎉
Главный итог этого года — это, конечно, то, что образовательный курс из теоретической задумки стал реальным мероприятием, точнее двумя: проектная смена в «Роболагере» и Курс в 548 школе.
За год пользователи собрали несколько десятков дронов. Среди них первый Flix на бесколлекторных моторах, дрон с управлением по ESPNOW и на ESP32S3 с камерой. Сделан первый автономный полет. А еще возникла целая отдельная китайская версия на плате, у которой есть множество реальных пользователей и отдельное китайское сообщество.
Каким-то невероятным образом в последний день года на канале оказалось ровно 1999 подписчиков, ждем 2000-го! :)
Не успелось: версия на плате и задуманные главы учебника (сейчас опубликовано только 2 главы) — на этом я сконцентрируюсь в следующем году. А еще в следующем году я ожидаю новые мероприятия, нововведения, эксперименты — все это будет освещено в канале!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤50🔥14👍12🏆12🎄2
Решил опубликовать промежуточный результат проектирования платы. Дорожки почти не рисовал, но распределил компоненты. Разъем для камеры все-таки вернул обратно (раз уж она работает!), будет совместно использовать почти все GPIO с гребенки.
Все рекомендовали 4-слойную плату. Вот я как их использовал:
🔹 Верхний слой: условно «сигнальный». ESP32, IMU (U5) очень близко центру + стабилизатор (U4), барометр (U6), индикатор питания (LED1) и RGB-светодиод (LED2), кнопка Boot, USB-C.
🔹 2-й слой: полностью земля — это общая рекомендация для большинства плат.
🔹 3-й слой: оставлен под питание 3.3V и сигналы.
🔹 Нижний слой: силовая часть. Buck-Boost (U3) и его обвязка (включая индуктивность L1) и силовые цепи моторов. Туда я же ставлю разъем для камеры CAM1 и его обвязку — на верхнюю сторону платы он не помещается.
Что думаете? Хотелось бы узнать ваши советы и комментарии перед тем, как продолжать! #pcb
Все рекомендовали 4-слойную плату. Вот я как их использовал:
Что думаете? Хотелось бы узнать ваши советы и комментарии перед тем, как продолжать! #pcb
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥3❤2⚡2🏆1