![](https://habrastorage.org/webt/pl/pz/zb/plpzzbg1zxhcgfisx9j2c2bb1p0.png)
Всем привет! Разработка гексапода активно продолжается и пришло время показать кардинальные изменения в конструкции и планы по прошивке. Появилась большая пауза в выходе новых статей в результате длительного проектирования новой электроники и корпуса. В принципе об этом и будет статья, как всегда много картинок.
Этапы разработки:
Часть 1 — проектирование
Часть 2 — сборка
Часть 3 — кинематика
Часть 4 — математика траекторий и последовательности
Часть 5 — электроника
Часть 6 — переход на 3D печать
Часть 7 — новый корпус, прикладное ПО и протоколы общения
Часть 8 — улучшенная математика передвижения
Часть 9 — завершение версии 1.00
Немного общих моментов
Я дал проекту новое название, так как текущее нечего дельного о нем не говорит. По сути SKYNET это небесная сеть, ну или что-то вроде того (sky — небо, net — сеть). В данном случае никакой сети нет, а неба тем более.
Новое название AIWM (artificial intelligence walking machine) — шагающая машина с искусственным интеллектом. На счет интеллекта тут пока рано, но вдруг я смогу дожить до этого момента :)
Я сделал небольшой демо ролик с описанием текущих возможностей (превью нового дизайна начинается со 2й минуты).
Изменения в функционале
Во время перепроектирования возникало множество идей и сложностей. Было убрано несколько не нужных деталей и добавлен новый функционал. Вот список изменений, которые планируется реализовать:
- Мультипроцессорная архитектура. На данный момент запланировано 3 MCU: контроллер машинного зрения (Broadcom BCM2835), контроллер питания (STM32F030), головной контроллер (STM32F373);
- Контроллер машинного зрения представляет из себя готовый модуль Raspberry Pi Zero и будет заниматься сбором, обработкой и распознаванием объектов с камеры. Все необходимое для этого железо подключается к нему же. Коммуникация ведется по протоколу ModBus в режиме слейва;
- Контроллер питания представляет из себя мощный (до 250Вт) DC-DC с возможностью регулировки выходного напряжения на лету через коммуникацию. Он запитывает всю электронику гексапода и является его сердцем. Возможно в будущем появится возможность перейти на прямое питание приводов от 7.4В, но такие приводы довольно дорогие даже на али. Коммуникация ведется по протоколу ModBus в режиме слейва;
- Головной контроллер является связующим звеном этой архитектуры. Он занимается обработкой движения и предоставляет интерфейс для коммуникации с внешним миром. Коммуникация ведется по протоколу ModBus в режиме слейва (внешний мир) и мастера (межпроцессорная коммуникация);
- Поддержка видеотрансляции, либо передача изображений по WIFI для возможности управления вне зоны прямой видимости, если хватит свободных ресурсов Raspberry Pi Zero;
- Управление решено перевести на Bluetooth (будет использоваться готовый мост BLE-UART HM-10), так как WIFI теоретически уже занят для трансляции видео на пульт управления. К тому же хочется иметь возможность обновления прошивки или конфигурации на лету с удаленного сервера и если использовать WIFI для коммуникации, то в интернет уже не выйдешь;
- Управление RGB светодиодами спереди дабы освещать в темноте и попутно показывать состояние FW;
- В структуру ног интегрированы датчики касания, что позволит реализовать более умный алгоритм передвижения;
Головной контроллер или плата управления
Мне порядком надоела текущая плата-бутерброд и было решено спроектировать новую плату управления с учетом нововведений в конструкцию. В процессе проектирования были выкинуты дисплей (не ну реально нафиг он там нужен) и ультразвуковой дальнометр (то еще гуано). Попутно я решил переехать на STM32F373, чтобы окончательно избавиться от Arduino, да и наличие FPU у этого проца ну очень уж манит его поставить.
Спустя неделю составления схемы и трассировки на свет появился электронный прототип платы. Суммарно на проектирование ушло часов 20. Чтобы уменьшить количество возможных источников ошибок планируется постепенный переход на новую электронику. В данном случае первой по плану будет запускаться плата управления в связке со старой платой питания.
Для совместимости текущего Android ПО предусмотрено посадочное место под WIFI-UART мост, который сейчас используется в прототипе. Скрины платы показаны ниже (на 3D виде убран WIFI-UART, так как Altium почему-то отображает его модель полностью одним цветом). На самом деле тут вообще без разницы, что использовать для коммуникации — главное чтобы на выходе интерфейса был UART.
![](https://habrastorage.org/webt/jq/zm/va/jqzmvahrjuse69kdkxkkcjolaay.png)
![](https://habrastorage.org/webt/xs/kr/wj/xskrwjznuktifi27u5k3m0rtzqk.png)
![](https://habrastorage.org/webt/g_/ow/my/g_owmy9obfc9l7vaos-dwns_z7m.png)
На плате предусмотрены следующие разъемы:
— Основное питание 12В + контакты с балансировочного разъема для возможности мониторинга напряжения каждой ячейки, так же на основе этого можно определять тип подключенного АКБ (количество ячеек);
— Разъем для передачи сигналов на плату питания для сервоприводов;
— Разъемы для подключения контроллера машинного зрения и контроллера питания;
— Разъем для управления передними RGB светодиодами;
— Разъемы для датчиков касания на конечностях;
— Разъем для подключения пьезоизлучателя. Предполагается, что у пищалки уже встроена схема управления, а мы коммутируем только питание.
Все достаточно просто и переезд на STM должен пройти безболезненно. Я довольно удачно спроектировал код и достаточно заменить драйвера, работающие с регистрами периферии.
Контроллер питания
По мере увеличения опыта в электронике через кучу проб и ошибок я наконец-то смог постигнуть DC-DC. На самом деле нечего сложного там нет, главное знать как работает катушка и для чего она там собственно нужна.
Для управления мощной нагрузкой, в качестве которой в данном случае выступают 18 приводов со средним потреблением 12-15А, требуется что-то более эффективное простых DC-DC. Как правило узким местом в них является диод, который при больших токах начинает отапливать помещение. Напряжение питания приводов составляет 6В при входном напряжении до 12В, в данном случае диод будет работать ~50% цикла (грубая прикидка без учета просадки напряжения и прочих радостей). Соответственно даже при использовании диода Шоттки выделяемая на нем мощность будет достаточно большой для того, чтобы начать думать об отводе тепла.
Тут на помощь приходят синхронные DC-DC, у который вместо диода используется полевой транзистор. У хороших транзисторов сопротивление канала достаточно малое для того, чтобы гонять большие токи без существенного выделения тепла. Ниже показаны главные отличия асинхронного DC-DC от синхронного:
![](https://habrastorage.org/webt/8v/hb/0m/8vhb0mhjztzkgi_cpya8h4ofhni.png)
В общем перечитав кучу инфы я наконец-то определился с требованиями:
- Способность гонять токи до 20А в номинальном режиме работы;
- Переход в аварийный режим при нарушении нормального режима работы: перегрев или насыщение катушки, перегрев силовых ключей, низкое входное напряжение, КЗ, установлено неадекватное выходное напряжение и прочие радости;
- Возможность коммуникации с DC-DC для получения значений измеряемых величин: входного и выходного напряжений, потребляемого тока, температурах катушки и силовых ключей;
- Адекватное КПД;
Проектировать DC-DC я решил с использованием микроконтроллера STM32F030, стоит копейки и имеет всю необходимую для решения моих задач периферию. Единственный минус применения данного МК — довольно грубая регулировка напряжения с шагом 25мV при частоте 100кГц. Для получения более высокой точности нужно применять МК с high resolution timers на борту, либо уменьшать частоту переключения транзисторов. Для моих требований такого шага регулировки напряжения вполне достаточно.
На данный момент спроектирован и собран первый прототип, который показал работоспособность схемы. КПД при грубых измерениях составляет 87% при токе 11А в отладочной конфигурации платы с использованием защитных резисторов от сквозных токов (необходимо для настройки dead-time между переключениями транзисторов).
![](https://habrastorage.org/webt/md/dw/b7/mddwb7pqsxqj3gug7o9twgktpem.png)
Более подробно о DC-DC будет чуть позже, когда доведу его до ума. Довольно много интересных моментов, запаха поджаренных драйверов затвора и МК :) Кстати транзисторы оказались на столько мощными, что в результате сбоя проходящий ток прожег печатную плату и при этом транзисторы остались целыми.
Немного о новом корпусе
Электроника это очень интересно, но и о механике забывать тоже не нужно. Наконец-то гексапод приобрел адекватный закрытый корпус, откуда не будут торчать провода и куски печатных плат. Вот собственно он
![](https://habrastorage.org/webt/qk/bm/_a/qkbm_a4nw9tsyqnvkffqnaef3g4.png)
Во время проектирования я старался избегать изменений размеров элементов конечностей и самого корпуса, так как предыдущий вариант хорошо себя показал в плане скорости и нагрузки на приводы. В целом от предыдущего корпуса остались только идея расположения ног и размеры, остальное все перепроектировано.
Наиболее тяжелой частью проектирования стало выведение дизайна корпуса. По началу несколько раз хотелось забросить это дело из-за несоответствия фантазии и реальности, но день за днем начали появляться декоративные элементы и это чувство ушло. Скульптор ведь тоже не сразу вытачивает свое творение и это момент просто нужно пережить.
Корпус представляет из себя набор деталей для последующей сборки болтами «имбус» M3 (в некоторых местах можно применять пластиковый крепеж, к примеру для верхней и нижней крышек) для уменьшения веса. При этом болты вкручиваются непосредственно в пластик в специальные для этого отверстия с предварительно нарезанной резьбой.
Основа собирается из трех разных частей при помощи пазов с последующей фиксацией болтами. В разделении на части нет никакой конструкторской задумки, это просто физические возможности принтера (220х220) и расширять его не очень хочется, поэтому приходятся придумывать как выходить из такой ситуации. В этом есть и свой плюс — в случае каких-либо повреждений достаточно перепечатать только поврежденную часть, что позволит сэкономить на пластике и времени при ремонте (во время тестов всякое может быть).
![](https://habrastorage.org/webt/wp/wp/fb/wpwpfb7hc8obeq6voecpq2sidxm.png)
После соединения всех частей вместе, установки приводов и электроники все это дело закрывается 6мм крышками, которые крепятся так же при помощи болтов. На центральную крышку устанавливается плата управления, которая далее закрывается декоративной панелью.
![](https://habrastorage.org/webt/wq/5w/fb/wq5wfb4u3z3wshzpaabp7lx7y50.png)
Прочность корпуса закладывается на падение с 0.5м высоты на твердую поверхность без нарушения целостности. Кстати, фанерная версия корпуса не пережила жесткие условия погрузки в самолет, при этом корпус был упакован в большую пупырку и в результате была сломана нога.
Приводы для управления конечностей перенесены в FEMUR, что должно немного снизить нагрузку за счет уменьшения веса TIBIA в результате переноса крепежа и смещение двигателя сервопривода ближе к началу рычага. Да и по дизайну будет лучше, если на FEMUR часть будут устанавливаться TIBIA и COXA, а не наоборот как раньше.
COXA, FEMUR and TIBIA? - What is it?
![](https://habrastorage.org/r/w1560/webt/vn/er/iv/vneriv60k1dpousumyrgiodpggi.png)
![](https://habrastorage.org/webt/vn/er/iv/vneriv60k1dpousumyrgiodpggi.png)
![](https://habrastorage.org/webt/tx/ao/jj/txaojjxoip3y68bzfxh6thdgkd0.png)
По предварительным расчетам на печать корпуса уйдет 670г пластика и 51 час непрерывной печати при слое 0.2мм и толщине сопла 0.4мм. В целом по деньгам получается чуть дешевле фанеры, но дизайн даже сравнивать бессмысленно и это того стоит.
P.S.
Буду рад каким-нибудь предложениям по корпусу. На момент написания статьи корпус уже печатался, но еще есть время внести изменения в оставшиеся детали. Я единственный разработчик всего этого проекта и иногда бывают периоды, когда новые мысли в голову тупо не приходят — сейчас начинается этот период :)
Пару фоток процесса печати
![](https://habrastorage.org/r/w780q1/webt/3e/sb/id/3esbidpw5dgjclju5rxolbsrhgo.jpeg)
![](https://habrastorage.org/r/w780q1/webt/ix/2u/py/ix2upydfyhpidtitprfcllbgfdw.jpeg)
![](https://habrastorage.org/webt/3e/sb/id/3esbidpw5dgjclju5rxolbsrhgo.jpeg)
![](https://habrastorage.org/webt/ix/2u/py/ix2upydfyhpidtitprfcllbgfdw.jpeg)