Flix: разработка полетного контроллера с нуля
2.12K subscribers
69 photos
34 videos
3 files
70 links
По всем вопросам @okalachev
Чат обсуждения: @opensourcequadcopterchat
GitHub: https://github.com/okalachev/flix
Учебник: https://quadcopter.dev
Download Telegram
Продолжаю улучшать UX: настройка Wi-Fi.

Пора добавлять в прошивку возможность настройки Wi-Fi через QGroundControl (сейчас конфигурируется только правкой кода). Конфигурация Wi-Fi включает в себя режим, а также имя сети (SSID) с паролем.

QGC позволяет менять числовые параметры, но SSID и пароль — это строки. И хотя в MAVLink есть Extended Parameter Protocol со строками, QGC его не поддерживает (что печально). Поэтому настройку я реализовал частично через параметры, частично через консоль.

Режим Wi-Fi выбирается параметром WIFI_MODE со следующими значениями:

🔹0 — Wi-Fi отключен.
🔹1 — режим точки доступа (AP), дефолт. Реквизиты настраиваются из консоли командой ap <ssid> <password>. Тут все как раньше, но с удобной настройкой.
🔹2 — режим клиента (STA). Реквизиты роутера настраиваются командой sta <ssid> <password>.
🔹3 — зарезервировано для будущей поддержки ESP-NOW.

Я протестировал полет в режиме клиента, и работает он не очень хорошо. Чувствуется какая-то стремная задержка в управлении — видимо, из-за ретрансляции пакетов через роутер. Кроме того, этот режим не особо применим для занятий в группе, так как в нем нет никакой защиты от управления чужим дроном. Можно реализовать аутентификацию по IP-адресу, но это ненадежно — IP-адрес легко подменить. В общем, режим не сверх-полезный.

Кстати, проблема с безопасностью существует и с ESP-NOW, и как именно ее лучше всего решить — я пока не придумал.

Также для удобства я добавил параметры линка:

🔹MAV_SYS_ID — MAVLink ID дрона. В одной сети может быть несколько дронов с разными ID, и QGC это поддерживает. Может быть полезно для каких-то роевых полетов и тому подобного.
🔹MAV_RATE_SLOW, MAV_RATE_FAST — частота «медленной» (heartbeat'ы) и «быстрой» телеметрии. Можно сделать отображение ориентации в QGC более плавным при необходимости. По умолчанию стоит 2 и 10 Гц соответственно.
🔹WIFI_LOC_PORT, WIFI_REM_PORT — выбор UDP-портов для MAVLink (14550 по умолчанию).

Изменения находятся в ветке wifi-config. Протестируйте, кто хочет, и напишите, что думаете!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥91🦄1
Media is too big
VIEW IN TELEGRAM
Насыпал еще параметров — теперь для конфигурации ШИМ моторов.

Коллекторные моторы управляются ШИМом, и у него есть два основных параметра: частота (Гц) и разрешение (в битах). Я добавил соответствующие параметры для настройки «на лету» через QGroundControl: MOT_PWM_FREQ и MOT_PWM_RES.

По идее, чем больше эта частота и разрешение, тем лучше (причем частота влияет не только на стабильность полета, но и на громкость работы моторов). Хотя на практике все может быть сложнее.

Я протестировал полет на разных конфигурациях ШИМ, начиная с заведомо нерабочих. Результат — на видео. После 2 000 Гц в стабильности полета разницы не очень заметно, но вот громкость действительно уменьшается с каждым увеличением частоты.

Также я добавил параметры для более легкого подключения бесколлекторных моторов. Теперь достаточно поменять MOT_PWM_STOP, MOT_PWM_MIN и MOT_PWM_MAX. По умолчанию MOT_PWM_MAX равен -1, что означает управление через duty cycle (для коллекторных моторов).

Ну а чтобы было совсем красиво, номера пинов тоже стали параметрами: MOTOR_PIN_FL, MOTOR_PIN_FR, MOTOR_PIN_RL, MOTOR_PIN_RR. Можно менять прямо на ходу, без правки кода и перезагрузки.
👍296🔥5😁2🏆2🦄1
Наконец-то развел плату!

Удалось ужать ее до 36x36 мм (было 40x40). Поменял транзисторы на более компактные AON7524 в DFN-корпусе. IMU заменена на ICM-40609-D (типа версия специально для дронов).

Перепробовал много разных компоновок выходных пинов, остановился на такой. В итоге выведено I2C, SPI, 9 GPIO (правда, только 4 не задействованы камерой).

Постарался зонировать, по-крайней мере не пересекать DC-DC блок и чувствительные компоненты.

Осталось окончательно доделать и буду заказывать. А где и как вы заказываете печатные платы?
🔥46👍11🎉53🍾1
Новые сборки

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

▶️ Первый дрон авторства @goldarte из Красногорска. Он был собран довольно давно, но видео прикольное, поэтому решил выложить. Артур — мой бывший коллега по COEX. Обещал прикрутить к Flix MoCap-систему собственной разработки, но пока что-то так и не прикрутил. Так что просто хороший дрон.

▶️ Второй — еще один рабочий дрон с моей прошивкой на кастомной печатной плате! Плату разработал и собрал подписчик из Крыма.

▶️ Еще один дрон от пользователя из Жарни, Франция. Полностью кастомная рама, выложена здесь: https://cults3d.com/en/3d-model/gadget/armature-pour-flix-drone.

▶️ И еще один был сделан в Университете Квинсленда, Австралия, в качестве магистерского дипломного проекта студента под кураторством @arkymatsekh. Студенту понравилось.

Все дроны летают (хотя бы как-то). Это обязательно условие для размещения в официальном реестре сборок Flix. #user
👍26🔥74👏3
Плата Flix заказана. На JLCPCB.

Доделал некоторые изменения по мотивам ваших комментариев: добавил teardrops, поменял настройки thermal relief, местами увеличил полигоны и добавил больше via на землю. Теперь что-то еще поменять можно будет только в следующей итерации!

Доставка платы будет сложная, через форвардера, но надеюсь, что все пройдет гладко.
🔥43👍13🎉4🍾2
Про вайб-кодинг

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

И я подумал, что может быть полезным ввести какой-то стандартный знак, иконку, плашку или что-то подобное для проектов, которые используют такой же принцип. Например, плашка с надписью «No vibe code» или «No vibe code is used» со ссылкой на разъяснения причин такого решения.

Как вы думаете, нужно ли такое? А может такое уже есть?
👍5011🔥6🤔2💯1
Платы Flix благополучно доехали. Получил буквально только что.

Пока еще ничего не проверял, даже не включал. Работает ли что-нибудь — полная интрига.

По времени от заказа до получения вышел ровно месяц (не быстро).

Теперь надо проверить работоспобность всех подсистем, написать драйвер для IMU, и тестировать!
👍38🔥2413🙏1
Результаты первых тестов платы

 Подсистема питания работает, плата запускается от USB, от батареи, и от обоих источников одновременно. Менял вход аккумулятора от 4.2 до 2.5В, buck-boost отрабатывает корректно. ⚠️ Обнаружил такую проблему: если плату сначала запитать от батареи, а потом подключить по USB, то она не будет видна в системе. Думаю, это скорее всего связано с прошивкой, вряд ли с разводкой.

 Заливка прошивки работает. В arduino-cli для этого нужно использовать такой FBQN: esp32:esp32:esp32s3:FlashSize=16M,PSRAM=opi. Также в Arduino и arduino-cli необходимо включать опцию USB CDC On Boot, чтобы все выводы в Serial можно было видеть по USB (аналогично тому, как это работает в платах с обычной ESP32).

 Но тут обнаружилась проблема: прошивка иногда стартует не с первого раза. То есть надо переткнуть питание 2 или 3 раза, и только тогда она запускается. Как будто есть какая-то проблема с пинами IO0 или EN. Подскажите, что это может быть?

 Прошивка Flix базово работает, Wi-Fi раздается, консоль отвечает. Я добавил в прошивку параметр RC_RX_PIN, который позволяет выбрать пин для SBUS‑интерфейса, и по умолчанию он равен -1, то есть SBUS теперь по умолчанию не запускается.

 RGB-светодиод — работает. ⚠️ Но когда управляющий пин не задействован прошивкой, то тыкая пальцем в плату, иногда можно включать его в рандомный цвет. Возможно, тут стоит что-то поменять в разводке, чтобы такого не было.

 Проверил выводы на моторы, они работают. ⚠️ В левом верхнем выводе перепутана полярность на шелкографии, но это не критично.

Работу IMU пока не проверил: ICM‑40609‑D довольно новая, и пока никто не написал для нее библиотеку для Arduino. Так что теперь займусь ее написанием.

В целом: супер-критичных косяков пока не нашел. В комментариях — несколько видео разных тестов.
👍227🔥6🙏1