Еще один успешно собранный дрон, от пользователя @Alexey_Karakash!
Видео, кстати, демонстрирует фичу, которая работает из коробки благодаря поддержке MAVLink и QGroundControl. Возможно подключить аппаратуру непосредственно к телефону или к компьютеру c запущенным QGroundControl (по проводу или по Bluetooth) и управлять дроном через Wi-Fi с аппаратуры, без необходимости установки RC-приемника.
✅ Как и обещал, сделал страницу с «реестром» успешно собранных дронов. Для каждого проекта есть краткое описание и ссылки на дополнительные материалы, включая кастомные 3D-модели для печати. Если у вас получится собрать дрон по моим инструкциям, а еще лучше, его как-либо модифицировать, пишите о результатах в чат или присылайте pull request с описанием проекта! #user
Видео, кстати, демонстрирует фичу, которая работает из коробки благодаря поддержке MAVLink и QGroundControl. Возможно подключить аппаратуру непосредственно к телефону или к компьютеру c запущенным QGroundControl (по проводу или по Bluetooth) и управлять дроном через Wi-Fi с аппаратуры, без необходимости установки RC-приемника.
✅ Как и обещал, сделал страницу с «реестром» успешно собранных дронов. Для каждого проекта есть краткое описание и ссылки на дополнительные материалы, включая кастомные 3D-модели для печати. Если у вас получится собрать дрон по моим инструкциям, а еще лучше, его как-либо модифицировать, пишите о результатах в чат или присылайте pull request с описанием проекта! #user
Хочу сделать плату
Много было вопросов про печатную плату для моего квадрокоптера, кто-то даже начинал ее делать. Решил вот ее сделать сам. Разрабатывать буду в полностью открытом режиме: буду публиковать промежуточные этапы и учитывать ваш фидбэк. Сама прошивка останется совместимой как с версией Flix на плате, так и с «обычной» версией из отдельных компонентов. Я не большой умелец в пайке, поэтому хочу, чтобы плата была изготовлена «под ключ» — сразу с напаянными компонентами.
В комментариях я хотел бы обсудить — а как ее, собственно, лучше сделать?
Вопросы:
1️⃣ Какой сейчас самый доступный способ изготовить такую плату и доставить ее в Москву?
2️⃣ Какой софт лучше использовать для разводки платы?
3️⃣ Какие компоненты можно использовать, чтобы плату можно было произвести целиком сразу с напайкой, их надо брать из какого-то определенного списка?
Немного забегая вперед — плату я хочу сделать чуть более универсальной, чем только для квадрокоптера. Но подробности и полное описание того, чего я хочу сделать — в следующем посте! #pcb
Много было вопросов про печатную плату для моего квадрокоптера, кто-то даже начинал ее делать. Решил вот ее сделать сам. Разрабатывать буду в полностью открытом режиме: буду публиковать промежуточные этапы и учитывать ваш фидбэк. Сама прошивка останется совместимой как с версией Flix на плате, так и с «обычной» версией из отдельных компонентов. Я не большой умелец в пайке, поэтому хочу, чтобы плата была изготовлена «под ключ» — сразу с напаянными компонентами.
В комментариях я хотел бы обсудить — а как ее, собственно, лучше сделать?
Вопросы:
1️⃣ Какой сейчас самый доступный способ изготовить такую плату и доставить ее в Москву?
2️⃣ Какой софт лучше использовать для разводки платы?
3️⃣ Какие компоненты можно использовать, чтобы плату можно было произвести целиком сразу с напайкой, их надо брать из какого-то определенного списка?
Немного забегая вперед — плату я хочу сделать чуть более универсальной, чем только для квадрокоптера. Но подробности и полное описание того, чего я хочу сделать — в следующем посте! #pcb
Что хочу разместить на плате
Как я уже писал, я хочу сделать плату чуть более универсальной, чем только для квадрокоптера. На ней сможет работать Flix, но она будет подходить и для других проектов, которым может потребоваться мощный микроконтроллер с Wi-Fi и инерциальный датчик: например, для учебных мобильных роботов или чего похожего.
Список компонентов, которые я собираюсь на ней разместить (вначале обязательные, в конце — под вопросом):
🔹 Микроконтроллер + обвязка. Классический ESP32 либо более новый ESP32-S3. Последний мощнее и нативно поддерживает USB — то есть не требуется преобразователь USB-UART. Правда, по некоторым параметрам он хуже, например, в нем меньше PWM выходов. Пока думаю над выбором.
🔹 Вход питания от LiPo-аккумулятора и цепь для измерения заряда аккумулятора.
🔹 Датчик IMU. Наиболее вероятные кандидаты: ICM-20948 или ICM-42688-P/ICM-20602/MPU-6500 (без магнитометра).
🔹 Выходы на коллекторные моторы — MOSFET и обвязка.
🔹 Один или несколько светодиодов для индикации состояния.
🔹 Разъем для подключения шлейфа камеры, аналогичный плате ESP32-CAM. Для реализации простейших алгоритмов компьютерного зрения.
🔹 Слот для SD-карты?
🔹 Барометр?
Также хочу развести на плате гребенку со всеми основными пинами ESP32. К ним можно будет припаять RC-приемник, ESC бесколлекторных моторов, дополнительные датчики и что угодно еще — как на обычной отладочной плате ESP32.
Жду ваших комментариев и предложений! #pcb
Как я уже писал, я хочу сделать плату чуть более универсальной, чем только для квадрокоптера. На ней сможет работать Flix, но она будет подходить и для других проектов, которым может потребоваться мощный микроконтроллер с Wi-Fi и инерциальный датчик: например, для учебных мобильных роботов или чего похожего.
Список компонентов, которые я собираюсь на ней разместить (вначале обязательные, в конце — под вопросом):
🔹 Микроконтроллер + обвязка. Классический ESP32 либо более новый ESP32-S3. Последний мощнее и нативно поддерживает USB — то есть не требуется преобразователь USB-UART. Правда, по некоторым параметрам он хуже, например, в нем меньше PWM выходов. Пока думаю над выбором.
🔹 Вход питания от LiPo-аккумулятора и цепь для измерения заряда аккумулятора.
🔹 Датчик IMU. Наиболее вероятные кандидаты: ICM-20948 или ICM-42688-P/ICM-20602/MPU-6500 (без магнитометра).
🔹 Выходы на коллекторные моторы — MOSFET и обвязка.
🔹 Один или несколько светодиодов для индикации состояния.
🔹 Разъем для подключения шлейфа камеры, аналогичный плате ESP32-CAM. Для реализации простейших алгоритмов компьютерного зрения.
🔹 Слот для SD-карты?
🔹 Барометр?
Также хочу развести на плате гребенку со всеми основными пинами ESP32. К ним можно будет припаять RC-приемник, ESC бесколлекторных моторов, дополнительные датчики и что угодно еще — как на обычной отладочной плате ESP32.
Жду ваших комментариев и предложений! #pcb
Пока мы обсуждали печатные платы, пользователи собрали четыре успешно полетевших Flix'а! Ничего себе. Значит, что-то в моем проекте есть, раз люди готовы потратить столько сил, чтобы его повторить. А это ведь сделать намного сложнее, чем собрать дрон из готовых компонентов.
🚀 @peter_ukhov собрал уже второй дрон. Очень аккуратное проектирование и сборка. Используется кастомная модель рамы и кастомный держатель ESP32: микроконтроллер не приклеен, а вставлен в специальные пазы. Транзисторы расположены снизу лучей и закреплены в специальных держателях. А еще это первый Flix на IMU ICM-20948 (используется плата GY-ICM20948V2).
🚀 Первый Flix от иностранного подписчика! Пользователь @yi_lun с Тайваня смог собрать дрон в рамках школьного проекта, и он успешно полетел! Здорово, что мой проект нашел отклик и в других странах.
🚀 Сборка от пользователя @p_kabakov. Первый Flix на МК, отличном от классического ESP32. А конкретно — на ESP32-C3. Этот микроконтроллер имеет совершенно иную архитектуру (RISC-V), но благодаря поддержке Arduino, код фактически не пришлось менять, и он просто заработал!
🚀 И еще один полетевший дрон, собранный в близком к эталонному виде, но с четырехлопастными пропеллерами. Автор: @fisheyeu.
Как обычно, я добавил все проекты в свой реестр успешно собранных дронов. Там же находятся ссылки на все материалы от авторов, включая кастомные 3D-модели. #user
🚀 @peter_ukhov собрал уже второй дрон. Очень аккуратное проектирование и сборка. Используется кастомная модель рамы и кастомный держатель ESP32: микроконтроллер не приклеен, а вставлен в специальные пазы. Транзисторы расположены снизу лучей и закреплены в специальных держателях. А еще это первый Flix на IMU ICM-20948 (используется плата GY-ICM20948V2).
🚀 Первый Flix от иностранного подписчика! Пользователь @yi_lun с Тайваня смог собрать дрон в рамках школьного проекта, и он успешно полетел! Здорово, что мой проект нашел отклик и в других странах.
🚀 Сборка от пользователя @p_kabakov. Первый Flix на МК, отличном от классического ESP32. А конкретно — на ESP32-C3. Этот микроконтроллер имеет совершенно иную архитектуру (RISC-V), но благодаря поддержке Arduino, код фактически не пришлось менять, и он просто заработал!
🚀 И еще один полетевший дрон, собранный в близком к эталонному виде, но с четырехлопастными пропеллерами. Автор: @fisheyeu.
Как обычно, я добавил все проекты в свой реестр успешно собранных дронов. Там же находятся ссылки на все материалы от авторов, включая кастомные 3D-модели. #user
✅ Реализовал MAVLink Console — доступ до интерфейса командной строки Flix через QGroundControl (коммит).
Команды пользователя и ответ на них запаковываются в специальное MAVLink-сообщение SERIAL_CONTROL, которое содержит, собственно, текстовые данные для пересылки через виртуальную консоль и некоторые служебные флаги. Для вывода строк вместо Serial.printf введена глобальная функция print, которая выводит строку и в Serial, и в MAVLink.
Теперь можно выполнять все функции командной строки прямо с телефона или компьютера по Wi-Fi, включая калибровку датчиков, отображение логов, проверку моторов и прочее.
✅ Сделал возможность запуска прошивки на голой плате ESP32, без подключенной IMU (коммит в Flix, коммит в FlixPeriph). Теперь прошивка не будет останавливаться с ошибкой. Это позволит легко протестировать прошивку без сборки дрона — при запуске появится точка доступа Wi-Fi и будут доступны все основные функции: командная строка, подключение к QGroundControl, просмотр параметров.
Если у вас есть ESP32, можете попробовать залить на нее прошивку: все базовые функции должны заработать! Это упрощает использование прошивки в качестве основы для других проектов на ESP32.
Команды пользователя и ответ на них запаковываются в специальное MAVLink-сообщение SERIAL_CONTROL, которое содержит, собственно, текстовые данные для пересылки через виртуальную консоль и некоторые служебные флаги. Для вывода строк вместо Serial.printf введена глобальная функция print, которая выводит строку и в Serial, и в MAVLink.
Теперь можно выполнять все функции командной строки прямо с телефона или компьютера по Wi-Fi, включая калибровку датчиков, отображение логов, проверку моторов и прочее.
✅ Сделал возможность запуска прошивки на голой плате ESP32, без подключенной IMU (коммит в Flix, коммит в FlixPeriph). Теперь прошивка не будет останавливаться с ошибкой. Это позволит легко протестировать прошивку без сборки дрона — при запуске появится точка доступа Wi-Fi и будут доступны все основные функции: командная строка, подключение к QGroundControl, просмотр параметров.
Если у вас есть ESP32, можете попробовать залить на нее прошивку: все базовые функции должны заработать! Это упрощает использование прошивки в качестве основы для других проектов на ESP32.
Интересные видео еще одной, я уже сбился какой по счету, сборки дрона на моей прошивке. Автор: @jeka_chex.
У этого дрона самодельная стеклотекстолитовая плата с драйверами моторов (транзисторы AON7410 + конденсаторы), а также установлена камера для FPV-полетов! В комментариях больше фоток.
На первом видео полет с комбинации телефон + аппаратура, соединение по Wi-Fi, можно видеть телеметрию и отправлять команды. На втором видео короткий FPV-полет. Я, конечно, не подразумевал свой дрон для FPV-полетов, и он, как видно, не так уж и легко управляется, но эксперимент интересный!
На официальной странице с проектами пользователей добавлены все ссылки на материалы проекта. #user
У этого дрона самодельная стеклотекстолитовая плата с драйверами моторов (транзисторы AON7410 + конденсаторы), а также установлена камера для FPV-полетов! В комментариях больше фоток.
На первом видео полет с комбинации телефон + аппаратура, соединение по Wi-Fi, можно видеть телеметрию и отправлять команды. На втором видео короткий FPV-полет. Я, конечно, не подразумевал свой дрон для FPV-полетов, и он, как видно, не так уж и легко управляется, но эксперимент интересный!
На официальной странице с проектами пользователей добавлены все ссылки на материалы проекта. #user
flix2-draft.pdf
327.6 KB
Драфт принципиальной схемы моей будущей платы. Что есть в схеме:
⚡️ Микроконтроллер — ESP32-S3, а точнее, модуль ESP32-S3-WROOM-1-N16R8 с 16 Мб флеша. Еще в этом модуле 8 Мб PSRAM-памяти — это дополнительная оперативная память, которая может быть полезна для приложений с компьютерным зрением и нейросетями.
⚡️ Питание: повышающе-понижающий стабилизатор напряжения TPS63021 на 3.3 В. Повышающий, потому что в полете Li-Po может просаживаться и ниже 3.3 В, что может привести (и приводит) к перезагрузкам ESP32.
⚡️ Инерциальный модуль: ICM-42688-P (без магнитометра). На текущий момент эта IMU является рекомендуемой InvenSense моделью для новых проектов. Также установлен барометр — более свежий BMP388 (вместо устаревшего BMP280), хотя в его необходимости я все еще не уверен.
⚡️ Для управления моторами я выбрал транзистор IRLML6344 (совет ChatGPT) с очень низким напряжением открытия. Есть вся необходимая обвязка: подтягивающий резистор и защитный диод. Я рассматривал вариант применения драйвера мотора DRV8833, но с ним как будто схема получается еще сложнее, поэтому пока остановился на транзисторе.
⚡️ Разъем для подключения камеры по интерфейсу DVP (камеры OV2640, OV3660 и другие). Этот интерфейс занимает кучу пинов МК, но я все же хочу попробовать позапускать какие-либо алгоритмы компьютерного зрения на МК параллельно с полетным кодом. Любопытно посмотреть, что из этого получится.
⚡️ Есть «гребенка», на нее выведены интерфейсы I²C, SPI, UART и несколько GPIO-пинов. Правда полноценный GPIO-пин остался только один, остальные параллельно используются для камеры. Камеру вроде бы можно подключить и по SPI, где гораздо меньше занимаемых пинов, но с этим я пока не доразобрался.
Еще в схеме есть RGB-светодиод, ридер SD-карт и цепь для измерения напряжения аккумулятора. Жду ваших комментариев! #pcb
⚡️ Микроконтроллер — ESP32-S3, а точнее, модуль ESP32-S3-WROOM-1-N16R8 с 16 Мб флеша. Еще в этом модуле 8 Мб PSRAM-памяти — это дополнительная оперативная память, которая может быть полезна для приложений с компьютерным зрением и нейросетями.
⚡️ Питание: повышающе-понижающий стабилизатор напряжения TPS63021 на 3.3 В. Повышающий, потому что в полете Li-Po может просаживаться и ниже 3.3 В, что может привести (и приводит) к перезагрузкам ESP32.
⚡️ Инерциальный модуль: ICM-42688-P (без магнитометра). На текущий момент эта IMU является рекомендуемой InvenSense моделью для новых проектов. Также установлен барометр — более свежий BMP388 (вместо устаревшего BMP280), хотя в его необходимости я все еще не уверен.
⚡️ Для управления моторами я выбрал транзистор IRLML6344 (совет ChatGPT) с очень низким напряжением открытия. Есть вся необходимая обвязка: подтягивающий резистор и защитный диод. Я рассматривал вариант применения драйвера мотора DRV8833, но с ним как будто схема получается еще сложнее, поэтому пока остановился на транзисторе.
⚡️ Разъем для подключения камеры по интерфейсу DVP (камеры OV2640, OV3660 и другие). Этот интерфейс занимает кучу пинов МК, но я все же хочу попробовать позапускать какие-либо алгоритмы компьютерного зрения на МК параллельно с полетным кодом. Любопытно посмотреть, что из этого получится.
⚡️ Есть «гребенка», на нее выведены интерфейсы I²C, SPI, UART и несколько GPIO-пинов. Правда полноценный GPIO-пин остался только один, остальные параллельно используются для камеры. Камеру вроде бы можно подключить и по SPI, где гораздо меньше занимаемых пинов, но с этим я пока не доразобрался.
Еще в схеме есть RGB-светодиод, ридер SD-карт и цепь для измерения напряжения аккумулятора. Жду ваших комментариев! #pcb
Очень простой метод калибровки гироскопа
Я уже описывал принцип калибровки гироскопа в дроне — при запуске он усредняет данные с гироскопа в течение 1 секунды, чтобы получить значения смещений (bias). Однако, у такого подхода есть минусы: требуется неподвижность дрона во время запуска (не всегда обеспечивается); со временем bias может изменяться, и это не учтено.
Поэтому я внедрил очень простой и минималистичный метод динамической калибровки гироскопа. Калибровка происходит в фоне все время, что дрон находится на земле и неподвижен (переменная landed). Фактически, вся калибровка это простой low-pass-фильтр, который обновляет значения bias, когда дрон не летит:
Коэффициент сглаживания α подобран экспериментально, чтобы bias достаточно быстро сходился, но и чтобы он не был слишком шумным. Для значения в 0.001, time constant (время, за которое фильтр сойдется на ⅔) составляет 1 секунду.
Перед активацией калибровки предусмотрена задержка в 2 секунды, чтобы не ловить шумы и пики, когда дрон только приземлился.
Полетные тесты показали, что с этим методом калибровки дрон очень хорошо держит yaw, а также ориентацию в целом. К энтузиастам, собравшим дрон: просьба накатить новую версию и сообщить о ваших результатах!
Я уже описывал принцип калибровки гироскопа в дроне — при запуске он усредняет данные с гироскопа в течение 1 секунды, чтобы получить значения смещений (bias). Однако, у такого подхода есть минусы: требуется неподвижность дрона во время запуска (не всегда обеспечивается); со временем bias может изменяться, и это не учтено.
Поэтому я внедрил очень простой и минималистичный метод динамической калибровки гироскопа. Калибровка происходит в фоне все время, что дрон находится на земле и неподвижен (переменная landed). Фактически, вся калибровка это простой low-pass-фильтр, который обновляет значения bias, когда дрон не летит:
static LowPassFilter<Vector> gyroCalibrationFilter(0.001);
gyroBias = gyroCalibrationFilter.update(gyro);
Коэффициент сглаживания α подобран экспериментально, чтобы bias достаточно быстро сходился, но и чтобы он не был слишком шумным. Для значения в 0.001, time constant (время, за которое фильтр сойдется на ⅔) составляет 1 секунду.
Перед активацией калибровки предусмотрена задержка в 2 секунды, чтобы не ловить шумы и пики, когда дрон только приземлился.
Полетные тесты показали, что с этим методом калибровки дрон очень хорошо держит yaw, а также ориентацию в целом. К энтузиастам, собравшим дрон: просьба накатить новую версию и сообщить о ваших результатах!
Наконец-то доделал новое демо-видео: https://youtu.be/hT46CZ1CgC4.
Использовал съемки полетов в Гимназии Примакова, множество пользовательских видео. Теперь это — официальное демо-видео для Flix версии 1.
Использовал съемки полетов в Гимназии Примакова, множество пользовательских видео. Теперь это — официальное демо-видео для Flix версии 1.
YouTube
Flix v1 — minimalistic ESP32-based quadcopter
Flix is a minimalistic ESP32-based quadcopter made from scratch. It has simple and clean Arduino source code and textbook on flight control.
Official repo: https://github.com/okalachev/flix.
Official Telegram-channel: https://t.me/opensourcequadcopter.
…
Official repo: https://github.com/okalachev/flix.
Official Telegram-channel: https://t.me/opensourcequadcopter.
…
Использование прерываний
Главный цикл моей прошивки работает с той же частотой, что и IMU, при помощи вызова блокирующего метода waitForData. Изначально этот метод использовал поллинг: то есть беспрерывно опрашивал IMU, пока не появлялись новые данные. Но это не оптимальный вариант — он бессмысленно «ест» процессорное время. Лучше использовать INT-пин IMU. Этот пин меняет состояние, когда в IMU появляются новые данные, а обработчик прерывания от пина должен разблокировать главный цикл.
Но как реализовать такой паттерн, но при этом сохранить простой дизайн в Arduino-стиле с главным циклом и функцией loop?
Для этого используются механизмы синхронизации, доступные в FreeRTOS, а конкретнее — нотификация или семафор. Нотификация может послать сигнал для разблокировки конкретной задаче. Семафор универсальнее (хотя чуть медленнее) — он может разблокировать любую задачу, которая ждет на данном семафоре.
Для использования семафора в функцию waitForData добавляется код для ожидания поднятия семафора:
А в функции-обработчике прерывания должен быть код, который поднимает семафор:
Именно так я и поменял способ работы функции waitForData в библиотеке FlixPeriph. Теперь она не использует процессор, а просто ждет прерывания.
Правда, все собранные на данный момент Flix (включая мой) не имеют подключенного INT-пина к какому-либо GPIO-пину МК. Поэтому для совместимости я сделал так, чтобы это прерывание могло также работать по обычному таймеру ESP32. Таймер конфигурируется на установленную частоту работы IMU.
Конечно, таймер ESP32 может немного рассинхронизироваться с таймером IMU, но как показала практика, на полет это не влияет. На видео выше дрон летает уже с этим изменением и видимых проблем не возникло.
Кроме того, я добавил в прошивку команду sys, которая выводит список задач FreeRTOS и процент использования CPU для каждой задачи. С помощью этой команды я увидел, что потребление CPU главным циклом (loopTask) сократилось со 100% до приблизительно 30%. В числе прочего, это может уменьшить энергопотребление и нагрев МК, а, возможно, и улучшить работу Wi-Fi.
Главный цикл моей прошивки работает с той же частотой, что и IMU, при помощи вызова блокирующего метода waitForData. Изначально этот метод использовал поллинг: то есть беспрерывно опрашивал IMU, пока не появлялись новые данные. Но это не оптимальный вариант — он бессмысленно «ест» процессорное время. Лучше использовать INT-пин IMU. Этот пин меняет состояние, когда в IMU появляются новые данные, а обработчик прерывания от пина должен разблокировать главный цикл.
Но как реализовать такой паттерн, но при этом сохранить простой дизайн в Arduino-стиле с главным циклом и функцией loop?
Для этого используются механизмы синхронизации, доступные в FreeRTOS, а конкретнее — нотификация или семафор. Нотификация может послать сигнал для разблокировки конкретной задаче. Семафор универсальнее (хотя чуть медленнее) — он может разблокировать любую задачу, которая ждет на данном семафоре.
Для использования семафора в функцию waitForData добавляется код для ожидания поднятия семафора:
xSemaphoreTake(semaphore, portMAX_DELAY);
А в функции-обработчике прерывания должен быть код, который поднимает семафор:
xSemaphoreGiveFromISR(semaphore, &xHigherPriorityTaskWoken);
Именно так я и поменял способ работы функции waitForData в библиотеке FlixPeriph. Теперь она не использует процессор, а просто ждет прерывания.
Правда, все собранные на данный момент Flix (включая мой) не имеют подключенного INT-пина к какому-либо GPIO-пину МК. Поэтому для совместимости я сделал так, чтобы это прерывание могло также работать по обычному таймеру ESP32. Таймер конфигурируется на установленную частоту работы IMU.
Конечно, таймер ESP32 может немного рассинхронизироваться с таймером IMU, но как показала практика, на полет это не влияет. На видео выше дрон летает уже с этим изменением и видимых проблем не возникло.
Кроме того, я добавил в прошивку команду sys, которая выводит список задач FreeRTOS и процент использования CPU для каждой задачи. С помощью этой команды я увидел, что потребление CPU главным циклом (loopTask) сократилось со 100% до приблизительно 30%. В числе прочего, это может уменьшить энергопотребление и нагрев МК, а, возможно, и улучшить работу Wi-Fi.
Написал новую главу учебника. Начал с основ: подробно расписал про геометрические объекты, используемые в прошивке, — вектора и кватернионы. Причем с акцентом именно на практическом применении:
📖 quadcopter.dev/geometry.html.
В главе есть интерактивная 3D-визуализация, которая показывает, как работают различные представления ориентации в пространстве. Визуализация сделана на three.js и рендерится в SVG. В процессе ее создания получилось что-то вроде микро-фреймворка для создания векторных 3D-визуализаций.
Кстати, в мой учебник пришел первый донат. Спасибо! Обещаю потратить его на какие-нибудь детали для новых сборок.
📖 quadcopter.dev/geometry.html.
В главе есть интерактивная 3D-визуализация, которая показывает, как работают различные представления ориентации в пространстве. Визуализация сделана на three.js и рендерится в SVG. В процессе ее создания получилось что-то вроде микро-фреймворка для создания векторных 3D-визуализаций.
Кстати, в мой учебник пришел первый донат. Спасибо! Обещаю потратить его на какие-нибудь детали для новых сборок.
Media is too big
VIEW IN TELEGRAM
За последнее время еще несколько дронов с моей прошивкой от читателей со всего мира увидели свет.
Подписчик @chkroko представил подробную статью о своей версии: https://telegra.ph/Flix-dron-06-13.
В статье не только подробно описана сборка и сделанные модификации, но и приведены ссылки на компоненты в маркетплейсах, которые многие просили (правда, не на все).
@chkroko добавил барометр BMP580 и мониторинг напряжения батареи и тока (с отображением в QGC!). Но, самое главное, он сделал управление дроном через Bluetooth ESP32 с использованием геймпада Flydigi Vader 3.
Именно для таких экспериментов я и проектировал прошивку: по его патчу можно увидеть, что добавление нового способа управления выглядит довольно прямолинейно и просто! #user
Подписчик @chkroko представил подробную статью о своей версии: https://telegra.ph/Flix-dron-06-13.
В статье не только подробно описана сборка и сделанные модификации, но и приведены ссылки на компоненты в маркетплейсах, которые многие просили (правда, не на все).
@chkroko добавил барометр BMP580 и мониторинг напряжения батареи и тока (с отображением в QGC!). Но, самое главное, он сделал управление дроном через Bluetooth ESP32 с использованием геймпада Flydigi Vader 3.
Именно для таких экспериментов я и проектировал прошивку: по его патчу можно увидеть, что добавление нового способа управления выглядит довольно прямолинейно и просто! #user
Добавил поддержку классического инерциального датчика MPU-6050.
Оказалось, что у очень многих в закромах лежит именно эта IMU, поэтому я постоянно получал вопросы про ее поддержку. Фактически, это был самый популярный вопрос в чатах и на ютубе.
Поэтому решил добавить ее поддержку в проект. За основу взял Arduino-библиотеку от ElectronicCats. Поддержка реализуется в библиотеке периферии для моего дрона — FlixPeriph (ее, кстати, можно использовать и отдельно).
Надо отметить, что MPU-6050 поддерживает только подключение по интерфейсу I2C, так что это не самый оптимальный вариант для использования (I2C медленный). Тем не менее, многие дроны используют этот интерфейс, так что летать должно. В полете я не тестировал, но алгоритм оценки ориентации Flix с ней работает нормально, частота 1000 Гц.
Кстати, это делает мою прошивку совместимой (в теории) с микро-дронами от Espressif — ESP-Drone, где стоит именно этот датчик. Про них тоже многие спрашивали.
Оказалось, что у очень многих в закромах лежит именно эта IMU, поэтому я постоянно получал вопросы про ее поддержку. Фактически, это был самый популярный вопрос в чатах и на ютубе.
Поэтому решил добавить ее поддержку в проект. За основу взял Arduino-библиотеку от ElectronicCats. Поддержка реализуется в библиотеке периферии для моего дрона — FlixPeriph (ее, кстати, можно использовать и отдельно).
Надо отметить, что MPU-6050 поддерживает только подключение по интерфейсу I2C, так что это не самый оптимальный вариант для использования (I2C медленный). Тем не менее, многие дроны используют этот интерфейс, так что летать должно. В полете я не тестировал, но алгоритм оценки ориентации Flix с ней работает нормально, частота 1000 Гц.
Кстати, это делает мою прошивку совместимой (в теории) с микро-дронами от Espressif — ESP-Drone, где стоит именно этот датчик. Про них тоже многие спрашивали.