Назад в библиотеку

Робот-гексапод

Автор: Kondor Fedor
Источник: РадиоКот.

Предисловие

Отдыхая летом на берегу Ладожского озера, я сильно интересовался пауками. Даже завел одного в палатке и подбрасывал ему мух и комаров. Наблюдать за его перемещениями под крышей палатки было очень увлекательно, поэтому по возвращению я решил «воссоздать» конструкцию ног паука.

Часть №1: Сервопривода

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

Подвижность ног обеспечивают сервопривода, по три на каждую ногу — два на сгибание ноги, один на поворот. Я рассчитывал взять средние по усилию привода – 3.5 кг/см. Оптимальной кандидатурой являлись привода Tower Pro SG5010, вот фото:

Первым делом я узнал цену у нас в местных магазинах. Покупать здесь тут же расхотелось, ибо цена колебалась от 500 до 750 рублей за привод. Поэтому, не долго думая, я заказал партию приводов в Поднебесной, хоть меня и предупреждали, что мне придет «Кот в мешке». Кот в мешке пришел. Начнем с того, что из 20 заказанных приводов по цене 263 руб. за штуку, 7 оказалось нерабочими. Просто не работала электроника и все! Моторы оказались рабочие. С редукторами вообще отдельная песня – они пришли без стопоров! Если у обычного привода диапазон вращения 180 градусов, то у этих — 360. На фото: редуктор китайского привода, на главной шестеренки отчетливо видно отсутствие стопора.

На этом проблемы не кончились — у шестеренок в редукторах отлетали зубья при малейшей нагрузке и горела электроника, которая тоже отличалась от оригинальной.
Поэтому продавцу была поставлена минимальная оценка и написан отзыв о подделке, а привода были убраны в ЗИП. Но вопрос с сервами решать как-то надо было, поэтому была заказана очередная партия приводов, на этот раз «местного разлива», привода EMAX ES3001. Пришли аккуратно упакованные в коробочки, на каждом был код проверки подлинности. Привода брались по 4 штуки за партию, потому что был риск получить, так же, как и в прошлый раз подделку, но на этот раз все обошлось. Сервы все пришли нормальные, нагрузку держали. Единственный минус — опять же слабые редукторы. Поломанные шестеренки быстро заменялись шестеренками от китайских подделок из ЗИПа, благо их у меня теперь было много.

Часть №2: Механика

Чертежи решено было делать в программе AutoCAD 2011, а детали изготавливать из оргстекла толщиной 4мм методом лазерной резки, спасибо ребятам из ЦЛТ, выручили (ЦЛТ — центр лазерных технологий). Если с чертежами ног и нижней пластины проблем не возникло, то над верхней пластиной пришлось попотеть. В ней предполагалось отверстие для выхода шлейфов на сервы. На первой версии данной детали отверстие получилось ну очень большим, в результате чего конструкция получилась, мягко говоря, ломкая и хрупкая. Фото чертежа первой версии:

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

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

Сервопривода крепились к деталям при помощи таких вот рам:

Соединение, отвечающее за разворот ноги состоит из двух таких деталей. На нижнюю закреплен фланцевый подшипник 3*10*4, тоже заказанный в Китае.

После первых испытаний был выявлен колоссальный люфт каждой ноги (оргстекло очень хорошо гнется, плюс сервы люфтят), из-за которого робот мог ходить только так:

От люфта которого решено было уходить путем установки дополнительных тяг на подшипники 3*10*4 (чертежи тяг те же). Это хорошо видно на фотографии робота спереди:

Часть №3: Электроника и алгоритмы

Изначально управление сервами планировалось сделать на МК Atmega16 но, к сожалению, я не смог реализовать управление сразу 18-ю приводами — не хватило таймеров. Поэтому из загашников была вытащена китайская плата-клон Arduino Mega 2560, очищена от пыли и подключена к компьютеру. Только вот запускаться она ни за что не хотела. Тщательно проанализировав возможные неисправности, была высказана гипотеза о неисправности кварца. Гипотеза оказалась рабочей, кварц перепаял, плата начала определяться и шиться. Фото платы с перепаянным кварцем:

Энергообеспечение осуществляется с помощью аккумулятора на 6 В 4500 мА*ч, купленный также в Китае. Аккумулятор Ni-Mh поэтому заряжаю его от обычного блока питания.Теперь об алгоритмах. Мне было бы лень в программе постоянно задавать углы для 18-ти серв, поэтому я решил написать алгоритм, в который я забиваю координаты точки, в которую должен переместиться конец ноги. Все углы алгоритм должен рассчитывать сам, исходя из того, что точка начала координат — точка крепления ноги к туловищу робота, то есть, решать задачу инверсной кинематики — ко координатам рассчитывать углы. Системы координат каждой ноги прикрепляю на фото:

Алгоритм был написан, не выходя за пределы школьного уровня алгебры и геометрии и оформлен в целую библиотеку. В программе создается новый объект класса Leg, функцией attach(int, int, int, bool, bool) сервы ноги прикрепляются к портам контроллера (сначала — серво, отвечающий за поворот, потом - за «бедро», последний - «за колено»), а также указывается, находится ли нога на левом борту относительно движения. Последний параметр необязателен — он указывает, является ли нога передней или задней. Это нужно для расчета координат выдвижения ноги в системе координат туловища. Сия функция еще сильно сырая, рекомендую ей не пользоваться. Далее функцией set(float x, float y, float z) задается точка отсчета координат ноги (эту функцию написал, чтобы можно было легко изменять клиренс — задал новый — и продолжай прописывать те же координаты для ходьбы, ничего менять не надо, удобно до жути). И, наконец, функцией move( float x, float y, float z, bool) мы задаем, координаты конечной точки нашей ноги. Bool, по большому счету, не нужен, его можно не указывать. Я использовал его для расчета координат выдвижения ноги в системе координат туловища. Библиотеку прикреплю к статье. Тест алгоритма на одной ноге, которая выполняет скребущие движения по столу:

Тест алгоритма на двух ногах (ползем по полу+изменение клиренса):

Алгоритм ходьбы и поворота основан на том, что робот может одновременно оторвать от земли три ноги из шести. Ходьба робота представляет из себя поочередное передвижение «троек» ног. Цифрой 1 отмечены те ноги, которые перемещаются в первую очередь, цифрой 2 — во вторую очередь.

Часть №4: Дистанционное управление

Робота решено было научить управляться с пульта через Wi-Fi. Для этих целей управление роботом было разделено на два блока — контроллер низкого уровня (Arduino), в обязанности которого входило рассчитывать кинематику и управлять сервами, и контроллер высокого уровня — Raspberry Pi с установленной на нем ОС Ubuntu Mate 16.04. На убунте была также установлена ROS — робототехническая операционная система, предлагающая огромное количество разных библиотек и драйверов. Главным плюсом было то, что уже разработана библиотека для общения ардуины и ROS. Вкратце о сути ROS: в этой системе одновременно может выполняться множество программ, или, как их называют, узлов. Каждый узел может публиковать и принимать сообщения на определенную тему (топик). Сообщения могут содержать что угодно — хоть числа, хоть строки, хоть изображения.
Итак, возвращаемся к нашим баранам. Для управления роботом был выбран джойстик от PS3,

который должен был подключаться напрямую по bluetooth к Raspberry Pi, но частота получаемых данных с джойстика была всего лишь 5 Гц, чего просто не хватало для нормального управления. Поэтому джойстик был прикошачен к ПК по USB. К слову, на ПК тоже Ubuntu 16.04 и ROS Kinetic. Далее на роутере была создана Wi-Fi сеть, через которую по ssh были подключены оба компьютера (ПК и Raspberry Pi), на ПК был запущен мастер ROS, узел джойстика и обработчик команд джойстика. На Raspberry Pi был экспортирован адрес мастера ROS и запущен узел связи через последовательный порт с ардуиной, на которой, в свою очередь, были запущены узлы приема управляющих команд (Подробную инструкцию по запуску приложу к статье вместе с узлом обработчика команд джойстика). Вот так выглядит список узлов из программы rqt-graph:

 

Немного об управлении: левым джойстиком задается направление движения гексапода (вперед-назад, боком (еще не реализовано до конца)), правым джойстиком робот разворачивается на месте влево и вправо, кнопки L2 и R2 отвечают за изменение клиренса робота. Крестиком включается однократное исполнение "позы атакующего тарантула" (об этом далее). Итоговое видео работы робота (не вошло изменение клиренса и "поза атакующего тарантула":

 

"Поза атакующего тарантула" - алгоритм, во время исполнения которого гексапод перемещает свой вес на заднюю часть корпуса и поднимает передние лапы а-ля атакующий тарантул:

 

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

Часть №5: Выводы и перспективы

Для себя хочу отметить, что процесс создания этого робота был для меня познавательным и захватывающим, но, безусловно, есть куда стремиться. Так, например, будет добавлена трансляция видео с робота на компьютер, захват передними лапами предметов, ходьба по ступенькам. Надеюсь, что моя статья будет полезна тем, кто решит создать нечто похожее.