[Перевод] Распечатанный четвероногий робот под управлением Arduino
Я активно интересуюсь роботами, и недавно сделал двуногого робота под управлением Arduino. После этого я захотел сделать четвероногого робота, имитирующего таких животных, как собаки или кошки. В данной статье я расскажу про проектирование и сборку четвероногого робота.
Основной целью данного проекта было сделать систему достаточно надёжную для того, чтобы во время эксперимента с различными походками мне бы не приходилось волноваться о возможных отказах оборудования. Это позволило мне испытывать робота на пределе возможности, задавая ему сложные походки и разные движения. Дополнительная цель состояла в том, чтобы сделать относительно недорогой прототип, использующий готовые компоненты, и 3D-печать для быстрого прототипирования. Совместно две этих цели дают надёжную основу для проведения различных экспериментов и разработки более специализированных четвероногих роботов с более конкретными целями — навигация, обход препятствий, динамическая адаптация движения.
Шаг 1: общая информация и процесс проектирования
Робота я разработал в свободном ПО для трёхмерного моделирования от Autodesk — Fusion 360. Я начал с импортирования серводвигателей, вокруг которых нарисовал ноги и туловище. Потом я разработал удерживающие моторы скобы, дающие им вторую точку крепления, диаметрально противоположную валу. Валы с каждой стороны мотора придают структуре прочность и устраняют вероятность перекоса при нагрузке ног. Подшипники вставляются в специальные держатели, а в кронштейнах в качестве вала используются болты. После того, как держатели прикрепляются к валам с помощью гайки, подшипник обеспечивает надежную точку поворота на противоположной от вала стороне серводвигателя.
Ещё одной целью во время разработки было сделать модель как можно более компактной, чтобы по максимуму использовать крутящий момент серводвигателей. Размеры рычагов были сделаны такими, чтобы обеспечивать максимальную подвижность с минимальной длиной. Если бы я сделал их слишком короткими, кронштейны бы сталкивались друг с другом, что уменьшило бы подвижность. Если сделать их слишком длинными, моторам пришлось бы прилагать ненужный крутящий момент. В последнюю очередь я спроектировал корпус робота с креплениями для Arduino и других электронных компонентов. Я предусмотрел дополнительные крепления на верхней части панели для расширения проекта в будущем. Когда-нибудь туда можно будет добавить датчики расстояния, камеры или другие механизмы для робота, например, захваты.
Шаг 2: необходимые материалы
Список необходимых материалов для создания собственного четвероного робота под управлением Arduino. Все компоненты распространённые и доступные.
Электроника:
- Arduino Uno x 1.
- Towerpro MG995 серводвигатель x 12.
- Arduino Sensor Shield (у меня версия 4, но рекомендую купить версию 5).
- Соединительные провода, 10 шт.
- MPU6050 IMU (не обязательно).
- Ультразвуковой датчик расстояния (не обязательно).
Компоненты:
- Подшипники (8×19x7 мм, 12 шт.).
- Болты и гайки М4.
- Пластик для 3D-принтера.
- Плексиглас 4 мм.
Инструменты
- 3D-принтер.
- Лазерный резак.
Большая часть трат приходится на 12 серводвигателей. Рекомендую всё же не использовать дешёвые пластиковые моторы, поскольку они слишком легко ломаются. За исключением инструментов, всё вместе обошлось мне в $60.
Шаг 3: напечатанные компоненты
Компоненты робота пришлось разработать специально — для этого мы воспользовались возможностями цифрового проектирования и CAD. Большая часть компонентов напечатана на 3D-принтере, а некоторые мы вырезали из 4 мм плексигласового листа. Печатали с 40% наполнением, 2 периметрами, соплом 0,4 мм, высотой слоя в 0,1 мм с PLA. Некоторым компонентам нужны подпорки из-за их сложной формы с нависающими частями, однако доступ к ним есть, и их легко удалить кусачками. Цвет можете выбрать по вкусу. Ниже идёт список компонентов и ссылки на STL для печати, а также двумерные чертежи для резака.
Компоненты для 3D-печати:
- Кронштейн бедренного серводвигателя х 2.
- Зеркальный кронштейн бедренного серводвигателя х 2.
- Кронштейн коленного серводвигателя х 2.
- Зеркальный кронштейн коленного серводвигателя х 2.
- Держатель подшипника х 2.
- Зеркальный держатель подшипника х 2.
- Ноги х 4.
- Держатели серводвигателя х 4.
- Держатели подшипников х 4.
- Крепёж Arduino х 1.
- Крепёж датчика расстояния х 1.
- Угловой крепёж х 4.
- Втулка подшипника х 4.
- Шайба серводвигателя х 24.
Компоненты для лазерной резки:
- Панель крепления серводвигателей х 2.
- Верхняя панель х 1.
В целом нужно распечатать 30 деталей, за исключением разных шайб, а всего количество деталей, изготовленных цифровым способом, равно 33. Я всё распечатал за 30 часов.
content.instructables.com/ORIG/FBK/9YPN/KFZEKVED/FBK9YPNKFZEKVED.rar
content.instructables.com/ORIG/FZS/65E0/KFZEKVEE/FZS65E0KFZEKVEE.pdf
Шаг 4: подготовка держателей с подшипниками
Если начать сборку с определённых компонентов, то весь процесс пойдёт быстрее. Начать можно с держателей. Для этого сначала обработайте наждачкой отверстия внутри держателя, а потом вставьте в него подшипник заподлицо. Мне пришлось напечатать несколько шайб на 3D-принтере, поскольку шедшие в комплекте с моторами болты оказались длинноватыми, и задевали бы моторы во время работы.
Шаг 5: готовим скобы серводвигателей
Для сборки скобы колена просто вставьте болт в отверстие и затяните его гайкой. Это сочленение будет работать как вторая ось мотора. Проденьте два болта через отверстия скобы бедра и затяните их гайками. Потом возьмите изогнутую скобу серводвигателя и подсоедините её к приподнятой части скобы двумя гайками. Наконец, возьмите втулку подшипника и вставьте в неё подшипник. Возможно, придётся немного обработать внутреннюю поверхность втулки наждачкой. На прикреплённых фотографиях показаны разные этапы сборки.
Шаг 6: сборка ног
Собрав все скобы и держатели, можно начинать собирать ноги. Сначала прикрутите винтами и гайками серводвигатели на скобы. Выровняйте ось мотора с торчащим с другой стороны болтом.
Затем соедините держателем серводвигатель бедра с серводвигателем колена. Пока не прикручивайте гайку — позднее, возможно, вам понадобится что-то подровнять. С другой стороны закрепите держатели с двумя подшипниками на торчащие болты при помощи гаек.
Соберите так все четыре ноги.
Шаг 7: сборка туловища
Теперь можно заняться сборкой туловища. В нём содержится четыре серводвигателя, дающие третью степень свободы ногам. Начните с 4-х болтов М4, которыми закрепите моторы на вырезанной лазерным резаком панели.
Серводвигатели крепите так, чтобы оси смотрели наружу — см. фотографии.
Затем закрепите болтами угловые держатели с обеих сторон панели. Они помогают надёжно прикрепить панель крепления моторов к верхней панели.
Закрепив все держатели, прикрепите панель с моторами к верхней панели. Начните с внешних болтов, расположенных спереди и сзади. Болты, расположенные посередине, одновременно удерживают крепление Arduino. См. фотографии в начале раздела. Прикрепите панель Arduino к верхней панели так, чтобы болты проходили через отверстия угловых держателей.
Шаг 8: собираем всё воедино
Когда ноги и туловище собраны, можно завершать сборку робота. Закрепите ноги на четырёх серводвигателей при помощи угловых креплений, подсоединённых к скобе бедренного серводвигателя. Наконец, используйте держатели подшипников для поддержки противоположной оси на кронштейне бедра. Проденьте ось через подшипник и закрепите гайкой. Соедините держатели подшипников с верхней панелью винтами и гайками.
Четвероногий робот готов.
Шаг 9: провода и электроника
Я решил использовать плату расширения для подключения датчиков sensor shield, где есть контакты для серводвигателей. Я бы рекомендовал её 5-ю версию — там есть отдельный разъём для подключения внешнего питания. Но у моей платы такой опции не было. Я изучил её и понял, что она берёт питание 5 В с платы Arduino (когда речь идёт о таких мощных потребителях, как серводвигатели — это ужасная идея, которая может повредить Arduino). Я решил эту проблему, отогнув контакт на 5 В, чтобы он не соединялся с шиной питания Arduino. Таким способом можно дать внешнее питание на контакт 5 В, не повредив Arduino.
Далее перечислены подсоединения серводвигателей и контактов платы. Примечание: Hip1Servo — это серводвигатели бедра, подсоединённый к туловищу. Hip2Servo — серводвигатели бедра, подсоединённый к ноге. KneeServo — серводвигатели колена.
Нога 1 (передняя левая):
Hip1Servo — 2
Hip2Servo — 3
KneeServo — 4
Нога 2 (передняя правая):
Hip1Servo — 5
Hip2Servo — 6
KneeServo — 7
Нога 3 (задняя левая):
Hip1Servo — 8
Hip2Servo — 9
KneeServo — 10
Нога 4 (задняя правая):
Hip1Servo — 11
Hip2Servo — 12
KneeServo — 13
Шаг 10: первоначальная настройка
Перед тем, как начать программировать сложные движения, нужно задать изначальные положения для каждого серводвигателя. Они дадут роботу точки отсчёта, от которых нужно будет строить разные движения.
Чтобы избежать случайного повреждения моторов, можно сначала снять с них угловые скобы. Затем закачайте в Arduino код (ссылка ниже). Код поворачивает все серводвигатели в положение 90°. После этого прикрутите скобы обратно так, чтобы все ноги стояли абсолютно ровно, а серводвигатели, прикреплённые к туловищу, были перпендикулярны верхней панели.
Возможно, некоторые сочленения не удастся выровнять идеально. Тогда нужно будет подправить значения массива zeroPositions, расположенного на 4-й строке кода. Каждое число обозначает нулевую позицию соответствующего серводвигателя (их порядок такой же, какой перечислен в списке подключения к Arduino). Поиграйте со значениями до тих пор, пока ноги не встанут идеально прямо.
У меня, например, получились такие значения:
int zeroPositions[12] = {93, 102, 85, 83, 90, 85, 92, 82, 85, 90, 85, 90};
content.instructables.com/ORIG/F9K/WO73/KFZEKX13/F9KWO73KFZEKX13.ino
Шаг 11: немного о кинематике
Чтобы заставить робота выполнять полезные действия — ходьба, бег и другие — для серводвигателей нужно запрограммировать траектории движения. Это траектории, по которым движется эффектор (в нашем случае — нога). Этого можно достичь двумя способами:
- Задавать углы сочленений разным моторам методам перебора. Долго, сложно и подвержено ошибкам — всё оценивается на глаз.
- Задавать координаты конечного эффектора, а не углы всех промежуточных сочленений. Этот подход называется инверсная кинематика. Пользователь вводит нужные координаты, а сочленения принимают такую позицию, чтобы конечный эффектор оказался в нужной точке. Это метод чёрного ящика, принимающего на вход координаты, а выдающего углы сочленений. Для интересующихся уравнениями я привёл построенную мною диаграмму. Если вам это неинтересно, я запрограммировал всё это, и в коде можно просто вызывать функцию pos, принимающую координаты точки, в которой должен оказаться эффектор, и выдающую три угла, которые должны принимать оси моторов.
Шаг 12: программируем робота
Закончив с подключением и инициализацией, можно начать программировать робота и задавать ему прикольные траектории движения для выполнения интересных задач. В коде на 4-й строке поменяйте значения на те, что вывели на шаге инициализации. После закачки кода робот должен начать ходить. Если вы заметите, что направления каких-то сочленений инвертированы, поменяйте соответствующую величину в массиве на строчке 5 (-1 на 1 и наоборот).
content.instructables.com/ORIG/FA6/3ZNJ/KFZEKX4Y/FA63ZNJKFZEKX4Y.ino
Шаг 13: итоги и время экспериментов
Робот может делать шаги от 2 до 5 см длиной. Скорость ходьбы также варьируется. Из робота получается надёжная платформа для экспериментов с походками и другими вещами типа прыжков или выполнения сложных задач. Рекомендую менять траектории движения, испытывать разные походки, смотреть, как они влияют на работу робота. Я предусмотрел различные крепления на верхней части туловища, чтобы там можно было закрепить датчики типа дальномера или инерциального сенсора. Можно попробовать закрепить там какой-нибудь захват.