[Перевод] Распечатанный четвероногий робот под управлением Arduino

641095c3d1fca7745c4975e45ecc96c2.jpg

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

Основной целью данного проекта было сделать систему достаточно надёжную для того, чтобы во время эксперимента с различными походками мне бы не приходилось волноваться о возможных отказах оборудования. Это позволило мне испытывать робота на пределе возможности, задавая ему сложные походки и разные движения. Дополнительная цель состояла в том, чтобы сделать относительно недорогой прототип, использующий готовые компоненты, и 3D-печать для быстрого прототипирования. Совместно две этих цели дают надёжную основу для проведения различных экспериментов и разработки более специализированных четвероногих роботов с более конкретными целями — навигация, обход препятствий, динамическая адаптация движения.

e2a456953bd084702e788fa502e53808.jpg

6feaa0f912fbbe9d986b83c48976a675.jpg

0d65f172d640acf0b21d5213d5838788.jpg

8e1d97488911bf3aef232cb07868105d.jpg

7fa79f49d34af848f43bb7c23b62ba53.jpg

Шаг 1: общая информация и процесс проектирования


cfef09db29d0a3203e76f94e430ae2df.png

35d8a6f494cc2e03f1251c8f25815d56.png

046e05fc4e736f634ba60cb6f75acc4b.png

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

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

Шаг 2: необходимые материалы


e61953d4b341415bdcc02e5eedf56e6b.jpg

4fcad73b5fc705f46cb1bc7807987583.jpg

Список необходимых материалов для создания собственного четвероного робота под управлением 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: напечатанные компоненты


ecbea6f366d601a6e9c3c10db94d7d2f.jpg

429de6ff37308f6af7e981efceab2679.jpg

84dc819cac8c1a2f06c6481950bd7e15.jpg

Компоненты робота пришлось разработать специально — для этого мы воспользовались возможностями цифрового проектирования и 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: подготовка держателей с подшипниками


c28667ad4decdc0888c49328beb4474c.jpg

562c9f8dd053d5f67ccb2d0de47b32c4.jpg

c8d41cc47653a0eeb242f20453deb297.jpg

Если начать сборку с определённых компонентов, то весь процесс пойдёт быстрее. Начать можно с держателей. Для этого сначала обработайте наждачкой отверстия внутри держателя, а потом вставьте в него подшипник заподлицо. Мне пришлось напечатать несколько шайб на 3D-принтере, поскольку шедшие в комплекте с моторами болты оказались длинноватыми, и задевали бы моторы во время работы.

Шаг 5: готовим скобы серводвигателей


9069ef5279f71d5450c04950bb801e08.jpg

69271b48cfd3f8293f808380785691b9.jpg

c6e78059a122ca4c47058df26fcd12ae.jpg

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

Шаг 6: сборка ног


3e48d94643c78f31ff76709da9b8a404.jpg

7993e336c76d0d5c1376d3810e620e9f.jpg

3c09c64f95528d6ca6ab89856df6ca8d.jpg

8b71cb8510a66f7174858413d0239ed7.jpg

deae68d925c28bdef92b48e6a4161639.jpg

c3f1604889d2cadd1a6d6788163f05d6.jpg

7ca59cc6636d5c846ba2260831669ddf.jpg

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

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

Соберите так все четыре ноги.

Шаг 7: сборка туловища


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

Серводвигатели крепите так, чтобы оси смотрели наружу — см. фотографии.

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

Закрепив все держатели, прикрепите панель с моторами к верхней панели. Начните с внешних болтов, расположенных спереди и сзади. Болты, расположенные посередине, одновременно удерживают крепление Arduino. См. фотографии в начале раздела. Прикрепите панель Arduino к верхней панели так, чтобы болты проходили через отверстия угловых держателей.

Шаг 8: собираем всё воедино


647549efcbeb1f46ca960afd6f3952ca.jpg

8f60f55f886fc198ac95e0674a6b1170.jpg

bed2959f3d585ae9eae0a4cf7756f59b.jpg

c63532bd1ec7a86505b6f6fa3e519c95.jpg

fb372cafa425930a4434ce7a9b3b43ed.jpg

62d5b461526d7c95e6a0dfd294e431ea.jpg

166a245bae7e5be411d89899fec66937.jpg

9210d064db6ff87a65b56d933c1bf414.jpg

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

Четвероногий робот готов.

Шаг 9: провода и электроника


4e31bfb120f5440885a7597a99b2b24d.jpg

7f0e8b6705447ac4f814b5e2050b288b.jpg

d6c8b361cd7185d7db26b8702b5735ce.jpg

62ffc3f5cc636fe8ad42d8dfb497631b.jpg

e707dae5bb9142c76e1a71e17b8a1402.jpg

6c48e08095628d88b9ceef9a6eed0333.jpg

acfbac1d14966cd8ce3095f036991a4a.jpg

12fc7faf13b74c6fef914c7e035b12f3.jpg

fb3fc4ca4469048cd8295dd508915269.jpg

85f87f449b607fc9e64eae08bb7d1c4a.jpg

Я решил использовать плату расширения для подключения датчиков 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: первоначальная настройка


95f9bfbda8b6767e71a82b8735f00760.jpg

a1d3b9f82919997361bcfa7159bfde76.jpg

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

Чтобы избежать случайного повреждения моторов, можно сначала снять с них угловые скобы. Затем закачайте в 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: немного о кинематике


6ef17327350f23b41c81778de87b62a8.jpg

097d18f7524103b08d1ccbac8a0682b9.jpg

edf0be99988122b3a1c8c7265e6556e6.jpg

Чтобы заставить робота выполнять полезные действия — ходьба, бег и другие — для серводвигателей нужно запрограммировать траектории движения. Это траектории, по которым движется эффектор (в нашем случае — нога). Этого можно достичь двумя способами:

  1. Задавать углы сочленений разным моторам методам перебора. Долго, сложно и подвержено ошибкам — всё оценивается на глаз.
  2. Задавать координаты конечного эффектора, а не углы всех промежуточных сочленений. Этот подход называется инверсная кинематика. Пользователь вводит нужные координаты, а сочленения принимают такую позицию, чтобы конечный эффектор оказался в нужной точке. Это метод чёрного ящика, принимающего на вход координаты, а выдающего углы сочленений. Для интересующихся уравнениями я привёл построенную мною диаграмму. Если вам это неинтересно, я запрограммировал всё это, и в коде можно просто вызывать функцию pos, принимающую координаты точки, в которой должен оказаться эффектор, и выдающую три угла, которые должны принимать оси моторов.

Шаг 12: программируем робота


f59df7bdd47ca244b33e8ad10839d48d.png

Закончив с подключением и инициализацией, можно начать программировать робота и задавать ему прикольные траектории движения для выполнения интересных задач. В коде на 4-й строке поменяйте значения на те, что вывели на шаге инициализации. После закачки кода робот должен начать ходить. Если вы заметите, что направления каких-то сочленений инвертированы, поменяйте соответствующую величину в массиве на строчке 5 (-1 на 1 и наоборот).

content.instructables.com/ORIG/FA6/3ZNJ/KFZEKX4Y/FA63ZNJKFZEKX4Y.ino

Шаг 13: итоги и время экспериментов


80ddc99c2c44205e5a51024f6ab0b9ce.jpg

6dce332d734aa439a868569ec667e0a5.jpg

cec9203e0f8aaf75acd41c636d4eaf63.jpg

b2cc4fd0585383070382f602dd2087b1.jpg

0c994a23d047ca10a7f294127cdd062e.jpg

dca8f397fe3a95e195591b3d99ee3350.jpg

Робот может делать шаги от 2 до 5 см длиной. Скорость ходьбы также варьируется. Из робота получается надёжная платформа для экспериментов с походками и другими вещами типа прыжков или выполнения сложных задач. Рекомендую менять траектории движения, испытывать разные походки, смотреть, как они влияют на работу робота. Я предусмотрел различные крепления на верхней части туловища, чтобы там можно было закрепить датчики типа дальномера или инерциального сенсора. Можно попробовать закрепить там какой-нибудь захват.

© Habrahabr.ru