Pull to refresh
2853.2
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

Собираем балансирующий куб

Level of difficultyEasy
Reading time8 min
Views22K
Original author: Willem Pennings

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

Первоначальная идея этого устройства взята у исследователей Швейцарской высшей технической школы Цюриха, продемонстрировавших в этом видео свой Cubli. За последующие годы дизайн в определённых аспектах был усовершенствован. В частности, Bobrow et al (Университет Сан-Паулу) предложили улучшенную концепцию управления, уменьшающую количество IMU (блоков инерциальных датчиков) с шести до всего одного.

Я решил собрать такое устройство. Хотя идея и не нова, все предыдущие работы по этой теме в основном имели закрытые исходники. Я планирую изменить ситуацию. Это значит, что мне придётся выполнить реверс-инжиниринг и начертить всё с нуля. Результат моей работы, полностью опенсорсный (GitHub), показан в видео.

Возможно, вы подумаете: ЕЩЁ ОДНО БЕССМЫСЛЕННОЕ УСТРОЙСТВО?!. Когда я рассказал о своей машине для сортировки M&Ms, я получил множество подобных комментариев. Оно действительно не имело практической ценности, но в других сферах, например, в сортировке фруктов, овощей и орехов по цвету, подобное ценность имеет. С этим кубом ситуация похожая: хотя по большей мере это учебный и исследовательский проект, реактивные маховики часто используются в спутниках (например, в телескопе «Джеймс Уэбб») для управления угловым положением.


Реактивный маховик, предназначенный для космоса. Источник: Википедия.

▍ Механическая конструкция


Механическая конструкция этого куба по большей мере такая же, как у Cubli, но имеет небольшие отличия. Основная конструкция состоит из восьми «вершин» и шести пластин-граней. На трёх из этих шести пластин есть дополнительные элементы для крепления двигателя и реактивного маховика в сборе. Все детали я начертил в (con)Fusion 360. Мои студенческие дни уже закончились, так что пришлось распрощаться с Siemens NX. Впрочем, его не особо часто используют в сообществе DIY (а может, и никогда?), так что теперь я смогу проще делиться своими конструкциями с другими.


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

Все металлические детали моего проекта произведены PCBWay. Раньше я пользовался их услугами прототипирования печатных плат, и меня заинтересовали возможности ЧПУ-обработки. Частично затраты на эти детали были проспонсированы PCBWay. Процесс размещения заказа был очень простым, и мне понравилось, что цена вычислялась автоматически сразу после загрузки детали и указания типа материала. Я доволен деталями и их качеством: небольшая производственная проблема была быстро решена, а все детали собираются замечательно. Посмотрите на фотографии и посудите сами.

Мне было интересно проектировать блок двигателя и маховика. Я стремился создать надёжную конструкцию, ведь маховики могут достигать скорости до 6000 оборотов в минуту; в то же время она должна оставаться лёгкой. Хотя по образованию я и инженер-машиностроитель, принципы конструирования — не моя сильная сторона. Но ведь для того и нужны подобные проекты: чтобы учиться! В конечном итоге я пришёл к следующему:


Двигатель соединён с мостиком из нержавеющей стали тремя винтами с потайной головкой. Сам мостик соединяется с одной из алюминиевых пластин.


На валу двигателя установлена втулка, закреплённая тремя зажимными винтами. Эта втулка очень важна: если центральное отверстие не перпендикулярно к плоской треугольной грани, то маховик не будет соосен с валом двигателя, что приведёт к вибрациям и износу.


Реактивный маховик закреплён на втулке при помощи трёх винтов с потайной головкой. Этот этап требует множества проб и ошибок для компенсации погрешностей во втулке и маховике, которые способны привести к упомянутой выше несоосности. Я решил эту проблему, засунув между горизонтальной контактной поверхностью втулки и маховика маленькие клочки бумаги, результат оказался удовлетворительным. В конце концов, эти детали не так часто будут разбирать.


В одну из пластин граней посажен на цианакрилатный клей («суперклей») маленький радиальный шарикоподшипник. Этот подшипник будет поддерживать один конец вала двигателя. Другой конец вала тоже опирается на подшипник внутри самого двигателя.


Далее вал двигателя вставляется в подшипник, а мостик крепится к пластине четырьмя болтами. Процесс повторяется ещё два раза.


В результате получился полукуб. Оставшиеся пластины не требуют какой-то особой сборки и могут быть смонтированы напрямую. Заметили, что один из двигателей ориентирован иначе относительно соединённого с ним мостика? Это сделано намеренно, потому что в дальнейшем упрощает прокладку проводов.


Получилась прочная, но относительно лёгкая конструкция. Сами по себе алюминиевые пластины граней довольно хлипки, но после сборки будут надёжно держать форму.

▍ Электромеханическая конструкция


В качестве двигателей и контроллеров двигателей в других балансирующих кубах применены двигатели Maxon из серии EC flat. Хотя можно найти и более дешёвые альтернативы, двигатели и их контроллеры — это критические узлы, поэтому я не захотел на них экономить. Куб будет балансировать себя при помощи вращательных моментов двигателей. У многих двигателей постоянного тока даже нет даташитов, где указана коэффициент момента (определяющий соотношение между моментом и током), а многие бесщёточные двигатели наподобие ESC позволяют управлять только скоростью, но не током. Для реализации этого проекта необходимо и то, и другое, так что было очевидно, что нужно выбирать высококачественные компоненты.


Я выбрал двигатель на 60 Вт и совместимый с ним четырёхквадрантный контроллер двигателя, способный обеспечивать токи до 6 А. При 24 В это соответствует почти 150 Вт. Хотя это намного выше номинальной мощности двигателя, на короткое время можно без проблем перегружать его. Более того, в контроллер встроен алгоритм I2t, ограничивающий подаваемый на двигатель ток, если оцениваемая температура обмоток окажется слишком высокой. Но маловероятно, что при обычной работе куб выйдет за эти пределы, потому что при балансировке токи обычно очень низки.


Контроллеры двигателей Escon обладают отличным программным обеспечением. Там есть инструменты для пуска и настройки двигателя, а также удобный дэшборд, отображающий состояние двигателя и его потребляемая/отдаваемая мощность при работе (см. скриншот выше).

В качестве источника питания я выбрал литий-полимерный аккумулятор 6S1P. Двигатели рассчитаны на 24 В, так что LiPo-аккумулятор из шести ячеек (номинальное напряжение 22,2 В) хорошо к ним подходит. Аккумулятор имеет заряд 1300 мА·ч (29 Вт·ч), чего при обычных условиях достаточно для работы куба в течении часа и более.


Материнская плата спроектирована специально под проект. На неё интегрируются три контроллера двигателей, IMU (на изображении не показан), макетная плата ESP32-S3 и вспомогательные компоненты наподобие защитных схем и регуляторов напряжения. Также плата рассчитана на добавление к кубу механических тормозов, обеспечивая подачу питания на сервомоторы. Механические тормоза позволят кубу самостоятельно подпрыгивать в положение балансировки. Пока я ещё не закончил разработку конструкции тормозов.


Сборка печатной платы оказалась увлекательным процессом. Я начал с нанесения паяльной пасты и установки деталей с поверхностным монтажом. После оплавления в небольшой тостерной печи (подробнее об этом можно почитать здесь) я вручную припаял все остальные детали.


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

Также я спроектировал плату для монтажа аккумулятора. Она была намного проще, с двумя проводами XT60 и двумя переключателями (соединёнными параллельно, потому что токи достигают 18 А) для включения-отключения куба.

▍ Проектирование и настройка контроллера


На самом деле, я не проектировал контроллер куба самостоятельно, а портировал работу Fabio Bobrow с Arm Mbed на Arduino. Ещё я использовал ESP32 вместо STM32 Nucleo. Тем не менее, на переписывание кода потребовалось много труда. Кроме того, поскольку я использую другой IMU (ICM20948 компании TDK Invensense), мне пришлось переписать соответствующий «драйвер». Я всё равно потратил довольно много времени на изучение конструкции этого контроллера, поэтому скажу несколько добрых слов о нём.

Самое интересное в нём — это конструкция основного контроллера углового положения. Наверно, лучше всего её объяснить как компромисс между двумя противоречащими друг другу задачами. Первая задача — поддерживать куб в нужной ориентации, в его положении нестабильного равновесия. А вторая цель — снизить до минимума скорости обращения маховиков. Если не учитывать эту вторую задачу, то скорости маховиков могут выйти из-под контроля, перевести двигатели в режим насыщения, из-за чего они не смогут создавать вращающие моменты для куба.

Две эти задачи конфликтуют между собой: если стремление к околонулевым скоростям маховиков будет слишком сильным, то куб просто упадёт. А если оно будет слишком слабым, то мы можем потерять управление над вращением маховиков. То есть сложность здесь заключается в том, чтобы найти условия, обеспечивающие хорошую балансировку и устранение колебаний, сохраняя при этом достаточно низкие скорости маховиков.


В контроллере есть ещё один изящный механизм для компенсации постоянных погрешностей. Что такое постоянные погрешности? Например, может присутствовать небольшое различие между настроенным и истинным положениями равновесия из-за неточностей в распределении веса куба. В контроллере PID (proportional-integral-derivative) этими погрешностями занимается интегральная часть. Этот контроллер использует положение маховика (в градусах) в качестве интеграла! На мой взгляд, это очень интуитивно понятный способ визуализации интегрального контроллера. Когда я меняю распределение веса куба (в видео я кладу на него помидор), можно увидеть, как реактивные маховики увеличивают, а затем снижают скорость: они перемещаются в новое положение, чтобы компенсировать увеличившуюся погрешность!

Ввод в эксплуатацию и настройка контроллера были самой большой частью работы, связанной с кодом. Как любой опытный разработчик управления, я потратил несколько дней на смену знаков разных сигналов, прежде чем мне удалось их правильно настроить. Затем мне нужно было найти нужные коэффициенты усиления для контроллера. Методология настройки, описанная в диссертации Bobrow, мне не подошла, так что я продолжил настраивать коэффициенты усиления вручную. Стоит отметить, что в моём кубе установлены не такие же маховики, как в кубе Bobrow, так что использовать его значения коэффициентов было невозможно. Итеративным образом я, наконец, подобрал коэффициенты, обеспечившие показанную в видео стабилизацию (которая, по моему скромному мнению, очень хороша).


Вот и всё! Балансирующий куб. Насколько я знаю, это единственный опенсорсный куб в мире, обеспечивающий качество балансировки на уровне Cubli. Надеюсь, кого-то это вдохновит на создание такого же замечательного устройства.

Вот ещё несколько ссылок на похожие кубы, по которым есть хоть какая-то документация (а не только видео или фото):


▍ Дальнейшая работа: подпрыгивание


Я планирую добавить к реактивным маховикам механические тормоза. Они позволят маховикам резко тормозить, что обеспечит гораздо большие вращающие моменты, чем могут обеспечить двигатели. Благодаря этому куб сможет подпрыгивать, то есть самостоятельно принимать позицию равновесия. Насколько я знаю, эта функция пока есть только у Cubli. Мне по разным причинам не особо нравится механизм торможения Cubli, поэтому я использую другой подход. Результатами поделюсь в новом посте!

▍ Файлы исходников и документы


Все файлы, связанные с проектированием, конфигурацией и кодом проекта, можно найти в репозитории GitHub проекта. Можете писать мне, если у вас возникнут вопросы о проекте или желание создать свой куб. В моём случае пришлось потратить почти €2500, так что будьте к этому готовы.

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻
Tags:
Hubs:
+141
Comments42

Articles

Information

Website
ruvds.com
Registered
Founded
Employees
11–30 employees
Location
Россия
Representative
ruvds