Максим Данилин, 15.07.2024

Как сделать шагающего робота на Arduino

Привет, дорогие друзья!

В нашем прошлом проекте робота на ROS мы рассматривали различные типы приводов для мобильных роботов, сравнивая их плюсы и минусы.

Мобильные роботизированные платформы традиционно создают с колёсными приводами. Это обусловлено тем, что колёсное шасси относительно легко построить и запрограммировать его кинематику.

Однако существуют и скелетные роботы, которые перемещаются на конечностях или ногах, имитируя естественное движение живых организмов. Скелет конечности должен обладать множеством степеней свободы. Каждому сочленению (Joint) в кинематической цепи конечности требуется свой привод (двигатель), ну а всему скелету — сложная система управления. Множество деталей и сложность программирования делает скелетных роботов дорогими в конструировании и не очень популярными в хобби-робототехникe.

Но как быть, если всё-таки хочется собрать своего робота с ногами, а ресурсы ограничены?

На помощь приходят так называемые «шагающие механизмы». В этой статье мы рассмотрим один из таких механизмов и в качестве эксперимента соберём на его основе простое и доступное шагающее шасси.

Механизмы шагающих роботов

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

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

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

  1. Механизм Чебышёва

Chebyshev_Linkage

Механизм изобретён математиком XIX века Пафнутием Чебышёвым, который изучал теоретические проблемы кинематических механизмов, преобразующих вращательное движение в приближённо прямолинейное.

Механизм Чебышёва используется в постройке шагоходов, а конкретно его эволюционировавший потомок — лямбда-механизм Чебышёва.

Chebyshev_Lambda_Linkage

Лямбда-механизм Чебышёва назван так потому, что выглядит как греческая буква лямбда в нижнем регистре (λ). Лямбда-механизм — четырёхзвенный и управляется одним двигателем. При правильной пропорции длин звеньев механизм обеспечивает прямолинейность и отсутствие ускорения на линейной части траектории движения.

Если соединить между собой классический механизм Чебышёва и лямбда-механизм Чебышёва, можно получить и вовсе интересную кинематику — целое звено («полочку»), совершающее прямолинейное движение:

Chebyshev_Table_Linkage

Впервые лямбда-механизм Чебышёва и построенный на его основе стопоход показали на выставке в Париже в 1878 году.

The_Plantigrade_Machine

Считается, что именно с этого момента мир увлёкся постройкой шагоходов. Сейчас этот оригинальный стопоход можно увидеть в Политехническом музее в Москве.

Частным видом лямбда-механизма Чебышёва является механизм Хойкена, опубликованный Карлом Хойкеном в 1926 году.

Hoecken's_Linkage

Главным отличием механизма Хойкена является использование стержня Витгенштейна.

  1. Механизм Кланна

Данный механизм был разработан Джо Кланном в 1994 году при изучении им теории Бёрместера.

Klann_Linkange

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

Klann_Linkage_Robot

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

  1. Механизм Янсена

Этот механизм разработан нашим современником, кинетическим скульптором Тео Янсеном для создания плавных движений при ходьбе. Прежде всего Тео использует свой механизм в различных кинетических скульптурах, известных как Strandbeests (Пляжные звери).

Strandbeast

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

Jansen_Leg

Походка механизма Янсена показалась нам наиболее интересной, поэтому в данном проекте мы решили использовать именно этот механизм.

Конструирование шагохода

Спроектируем механизм нашего шагохода, но перед этим рассмотрим конечность механизма Янсена подробнее.

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

Пропорции длин звеньев подобраны таким образом, чтобы обеспечить максимально длинный прямой участок траектории движения стопы. Для определения нужных пропорций Тео Янсен использовал генетический алгоритм. Можно сказать, что «идеальные» пропорции были получены им методом подбора в долгом итеративном процессе постройки всё новых и новых версий шагоходов Strandbeest.

В результате генетического моделирования геометрия конечности механизма Янсена может быть полностью описана с помощью 13 чисел:

Jansen_dimensions

На схеме отрезки e, b, d представляют собой жёсткое треугольное звено, как и отрезки g, h, i, а отрезки a, l принадлежат корпусу. Звено кривошипа m одним концом прикреплено к корпусу.

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

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

design_dimensions

С чего начать конструирование? Исходной точкой дизайна нашего шагохода будут двигатели.

Пусть кривошипы приводятся в движение электрическими моторами. Самые миниатюрные двигатели, которые есть у нас под рукой, это коллекторные микромоторы с редуктором типоразмера N20.

Лучше выбрать мотор-редуктор с максимально высокой скоростью вращения выходного вала. Если в итоге скорость вращения кривошипа окажется для нас слишком высокой, мы сможем понизить её, не меняя конструкции, простой заменой микромотор-редуктора на версию с меньшим передаточным числом. Мы взяли пару микромоторов на 12 В, 600 об/мин:

dc_motors

Идём далее. Из чего делать звенья конечностей?

Механизм Янсена — «плоский», все его звенья лежат в близких друг к другу параллельных плоскостях. Очевидно, лучшим решением будет изготовление звеньев из листового материала. Для этого мы воспользуемся лазерной резкой сервиса Figuro.me. Из жёстких материалов нам доступны фанера и оргстекло. Выбираем оргстекло, так как оно обладает меньшим коэффициентом трения, чем фанера. Есть оргстекло толщиной 1, 2, 3, 5 и 6 мм. При моделировании будем опираться на эти толщины и попробуем сконструировать наш шагоход, используя только лишь листовой материал.

В механизме Янсена все ноги управляются одним мотором, но цикл их движения сдвинут по фазе. Это сделано для того, чтобы в каждый момент времени на земле оставалось большее число ног. Например, на схеме ниже показаны три пары ног. Все пары управляются одним двигателем, но на вращающемся звене кривошипы установлены на 0°, 120° и 240° соответственно. Благодаря этому на земле постоянно находятся как минимум четыре ноги:

Jansen_Linkage

У оригинальных шагоходов Strandbeest много пар ног. Чтобы привести их все в движение и изменить их фазы, используется коленчатый вал.

В нашем случае сделать качественный маленький коленвал из подручных материалов сложно, тем более, используя только листовой материал. Ещё сложнее будет соединить коленвал с валом мотора. Придётся ограничиться стандартным выходным валом микромотора-редуктора и его вылетом в 9 мм:

dc_motor_shaft

Попробуем уместить хотя бы две пары ног на этот вал, используя оргстекло толщиной в 2 мм.

Следующий шаг. Из чего сделать оси?

При двухмиллиметровой толщине звеньев оси должны быть тонкие и короткие, миниатюрные. Осей в механизме конечности много. Можно было бы нарезать короткие оси из металлического стержня толщиной примерно 1–3 мм, но как сделать так, чтобы они не выпадали из звеньев? Идеи использовать оси в виде заклёпок или ставить на оси стопорные кольца кажутся сомнительными.

В проектах Амперки мы привыкли делать оси из обычных винтов, а их движение ограничивать самоконтрящимися гайками с нейлоновой вставкой. Это гайки стандарта DIN 985. Накрутив такую гайку на винт со шляпкой до нужной длины, мы можем создать подобие оси с буртами с обоих сторон. Обычно мы используем винты и гайки М3, но для этого проекта подобный крепёж велик — слишком большая высота гайки и шляпки винта. По стандарту DIN 985 размер гаек М3 является минимальным, тем не менее, на крепёжных рынках или маркетплейсах можно легко найти меньшие самоконтрящиеся гайки с резьбой М2,5. Попробуем использовать их.

Соответственно, нам будут нужны винты М2,5 разной длины. Необходимы винты с максимально низкой шляпкой, чтобы уменьшить расстояние между соседними звеньями механизма. Из распространённых винтов на вид самая маленькая шляпка у винтов стандарта DIN 84 с цилиндрической головкой и прямым шлицем. Заложим винты этого типа в дизайн:

design_1

Все звенья из пластика толщной 2 мм. У звеньев C и F разница в длине в 0,05 мм. Этим можно пренебречь, сделав их длины одинаковыми — CF. Чтобы выровнять плоскости звеньев между собой, используем кольца-проставки высотой 2 и 5 мм. Проставки мы тоже можем вырезать лазерной резкой из материалов соответствующей толщины. На крайнем звене K сделан паз, чтобы оно не соприкасалось с головкой винта.

Разместим вторую ногу, отзеркалив первую относительно корпуса. На данном этапе важно проследить, чтобы все оси и звенья не конфликтовали друг с другом во время движения.

design_2

Придумаем, как передать вращение с мотора на кривошипы m. Это можно сделать зубчатой передачей. По размеру подходят зубчатые колеса модуля 1 с 24 зубьями. Ведущую шестерню можно закрепить на D-образном валу мотора, вырезав в ней D-образное отверстие. Кроме этого зубчатые передачи позволят нам объединить ноги в пары. Ведущие шестерни разместим по обе стороны корпуса. Для внутренней пары ног ведущую шестерню вырежем из оргстекла толщиной 2 мм. Для внешней пары ног ведущую шестерню сделаем толще, например 5 мм, чтобы она удержалась на выступающем коротком отрезке вала и при этом вошла в зацепление с шестернями-кривошипами.

design_3

Теперь разберёмся с корпусом и электроникой.

Для коллекторных моторов нужен драйвер, чтобы изменять скорость и направление вращения. Наше шасси сможет ускоряться, замедляться и поворачивать. Мы используем двухканальный Н-мост в форм-факторе Troyka-модуля.

h_bridge

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

ir

Микроконтроллер для этого проекта подойдёт любой, никаких особых функций и большой вычислительной мощности нам не требуется. Для Troyka-модулей удобно использовать контроллер соответствующего форм-фактора. Например, взяв небольшой Uno Slot, мы избавим себя от проводов, идущих к драйверу моторов и ИК-приёмнику.

uno_slot

В качестве источника питания возьмём Power Bank на 5 В, 2000 мА·ч. Хоть наши моторы и имеют номинальное напряжение в 12 В, но и при 5 В будут отлично работать.

power_bank

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

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

design_4

Нижняя пластина толщиной 3 мм — основная и служит базой под крепление других пластин. На нижней пластине подготовлены отверстия и пазы под крепление всей нашей электроники.

Центральная пластина толщиной 2 мм — место для крепления моторов. На плоскости микромоторы с редуктором шириной 12 мм можно удобно закрепить парой пластиковых П-образных скоб.

motor_brackets

Каждая из боковых пластин толщиной 2 мм несёт на себе по две пары ног и зубчатые передачи.

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

design_5

Верхняя и нижняя пластины зажимают между собой две боковые пластины, центральную и две пластины-заглушки. Для позиционирования пластин мы использовали простое соединение типа шип-паз. Чтобы крепко стянуть между собой пластины и не дать всей конструкции развалиться, можно использовать длинные винты или резьбовые стойки. Мы выбрали резьбовые стойки М3 высотой 30 мм.

В этой конструкции ИК-приёмник оказался внутри корпуса шагохода. Чтобы не закрывать его, в верхней пластине мы сделали большое окно.

Схема подключения

ИК-приёмник и двухканальный Н-мост устанавливаются на Uno Slot.

electronics_1

electronics_1

Для Enable-пинов драйвера моторов нужен ШИМ-сигнал. На Uno Slot для двухканального Н-моста есть только одно подходящее положение. ИК-приёмник устанавливается в подходящий слот с пином, поддерживающим аппаратное прерывание.

  • Пин E1 драйвера → ШИМ-пин 9 Uno Slot.
  • Пин E2 драйвера → ШИМ-пин 10 Uno Slot.
  • Пин D1 драйвера → пин А1 Uno Slot.
  • Пин D2 драйвера → пин А0 Uno Slot.
  • Пин S ИК-приёмника → пин 3 Uno Slot.

Левый мотор подключаем в клеммник драйвера М1, а правый мотор в клеммник М2.

electronics_2

electronics_2

Запитаем силовую часть драйвера. Подведём питание 5 В с Power Bank на клеммник драйвера P. Это можно сделать парой соединительных проводов «папа-папа». Наш двухканальный Н-мост позволяет объединить питание логической части и силовой, для этого на плате предусмотрена перемычка. Установив джампер на перемычку, мы сможем подать 5 В с Power Bank на Uno Slot и запитать таким образом логический контур питания Н-моста.

Сборка

Все исходные 3D и 2D-файлы, а также программный код этого проекта мы выложили в репозитории mini-jansen-chassis.

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

Изготовим детали шасси.

Для лазерной резки воспользуемся сервисом Figuro.me. Конструкция нашего шагающего шасси состоит из листовых деталей трёх толщин.

2 миллиметра:

2mm_plex

3 миллиметра:

3mm_plex

5 миллиметров:

5mm_plex

Детали мы разместили с запасом. На лист поместили побольше проставок, так как их легко уронить и потерять, и больше тонких звеньев, так как их легко сломать.

Вырежем все детали из белого молочного оргстекла:

laser_cut

Список необходимого крепежа:

  • Винт М2,5×8 DIN 84 — 24 штуки.
  • Винт М2,5×12 DIN 84 — 8 штук.
  • Винт М2,5×16 DIN 84 — 12 штук.
  • Винт М2,5×25 DIN 84 — 4 штуки.
  • Гайка М2,5 DIN 985 — 48 штук.
  • Стойки резьбовые М3×30 — минимум 3 штуки.
  • Любой винт М3×10 — минимум 11 штук.
  • Любая гайка М3 — минимум 11 штук.

Обязательным является лишь крепёж М2,5. Крепёж М3 вы можете выбрать любой, на своё усмотрение.

Мы используем резьбовые стойки М3 «папа-мама», но можно взять любые другие. Количество стоек может варьироваться в зависимости от того, насколько жёсткой вы хотите сделать конструкцию корпуса. При желании вы можете доработать дизайн под себя. Мы решили ограничиться тремя центральными стойками.

Из инструментов обязательно понадобятся маленькая отвёртка с прямым шлицем под винты М2,5, гаечный ключ или торцевая головка на 5 под гайки М2,5, тонкогубцы, прочий инструмент для вашего крепежа М3.

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

remove_film

Всего у нас восемь ног. Сперва соберём две ноги по одну сторону одной из боковых пластин.

Собираем кривошипы М со звеньями K и J:

assemble_1

assemble_1

Это важно!

  • Сейчас и далее все гайки М2,5 нельзя затягивать на винтах до конца! Винты в нашей конструкции являются осями, а не крепежом. Движение всех звеньев должно быть свободным. Но в то же время они не должны болтаться вдоль оси винта.
  • Посадка винта в отверстии проставки — свободная, с зазором. Посадка винта в отверстиях звеньев — плотная. Для вставки винта используйте отвертку.
  • Некоторые детали конструкции хрупкие. Не применяйте при сборке грубую силу!

Устанавливаем собранные кривошипы М в боковую пластину.

assemble_2

assemble_2

Устанавливаем в боковую пластину звенья DEB через первые звенья CF и 5-миллиметровые проставки. Обратите внимание на положение звена DEB при установке. Чтобы не перепутать стороны треугольника, мы сделали в звене метку.

assemble_3

assemble_3

Соединяем звенья DEB со звеньями J.

assemble_4

assemble_4

Устанавливаем вторые звенья CF в звенья DEB.

assemble_5

assemble_5

Устанавливаем звенья GHI между первыми звеньями CF, звеньями K и 2-миллиметровыми проставками.

assemble_6

assemble_6

Соединяем звенья GHI со вторыми звеньями CF.

assemble_7

assemble_7

Две ноги собраны.

Аналогичным образом собираем ещё две ноги на противоположной стороне боковой пластины.

assemble_8

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

assemble_9

Закрепляем моторы на центральной пластине кронштейнами.

assemble_8

assemble_10

Устанавливаем на валы моторов внутренние ведущие шестерни и большие проставки 2 мм.

assemble_9

assemble_11

Закрепим всю электронику на нижней пластине. Здесь подойдёт любой крепёж М3. Мы используем винты М3 с внутренним шестигранником и гайки М3 с нейлоновой вставкой.

Вкрутим в нижнюю пластину резьбовые стойки.

assemble_10

assemble_12

Объединяем собранные боковые пластины с центральной и нижней.

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

Собранную конструкцию аккуратно вставляем в нижнюю пластину.

assemble_11

assemble_13 assemble_14

Закрываем внешние шестерни пластинами-заглушками, а наверх шасси устанавливаем последнюю верхнюю пластину и стягиваем весь корпус гайками.

assemble_12

assemble_15 assemble_16

Сборка завершена!

Программа шагающего робота

Вставляем USB-кабель в Uno Slot и запускаем Arduino IDE.

usb_connect

Из библиотек нам понадобится только одна — Arduino-IRremote для работы с ИК-приёмником. Скачиваем библиотеку и добавляем её в рабочее пространство среды Arduino IDE.

Напишем самую простую программу для управления моторами с ИК-пульта. Для примера реализуем пять команд движения: вперёд, назад, разворот влево, разворот вправо, стоп.

Пусть каждой из команд соответствует кнопка на пульте. Чтобы узнать, какую именно байт-команду получает ИК-приёмник при нажатии той или иной кнопки, в библиотеке Arduino-IRremote есть удобный пример SimpleReceiver.

Код максимально прост:

#include <IRremote.hpp>

#define IR_RECEIVE_PIN 3

constexpr uint8_t M2_LEFT_EN = 10;
constexpr uint8_t M2_LEFT_DIR = A0;
constexpr uint8_t M1_RIGHT_EN = 9;
constexpr uint8_t M1_RIGHT_DIR = A1;

void setup() {
  pinMode(M1_RIGHT_EN, OUTPUT);
  pinMode(M1_RIGHT_DIR, OUTPUT);
  pinMode(M2_LEFT_EN, OUTPUT);
  pinMode(M2_LEFT_DIR, OUTPUT);
  IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK);
}

void loop() {
  if (IrReceiver.decode()) {
    IrReceiver.resume();
    switch (IrReceiver.decodedIRData.command) {
      case 0x6:  // UP
        analogWrite(M2_LEFT_EN, 255);
        analogWrite(M1_RIGHT_EN, 255);
        digitalWrite(M2_LEFT_DIR, 0);
        digitalWrite(M1_RIGHT_DIR, 0);
        break;
      case 0x1D:  // DOWN
        analogWrite(M2_LEFT_EN, 255);
        analogWrite(M1_RIGHT_EN, 255);
        digitalWrite(M2_LEFT_DIR, 0);
        digitalWrite(M1_RIGHT_DIR, 0);
        break;
      case 0x08:  // LEFT
        analogWrite(M2_LEFT_EN, 255);
        analogWrite(M1_RIGHT_EN, 255);
        digitalWrite(M2_LEFT_DIR, 0);
        digitalWrite(M1_RIGHT_DIR, 1);
        break;
      case 0x19:  // RIGHT
        analogWrite(M2_LEFT_EN, 255);
        analogWrite(M1_RIGHT_EN, 255);
        digitalWrite(M2_LEFT_DIR, 1);
        digitalWrite(M1_RIGHT_DIR, 0);
        break;
      default:
        analogWrite(M2_LEFT_EN, 0);
        analogWrite(M1_RIGHT_EN, 0);
        return;
    }
  }
}

В бесконечном цикле loop, если декодирована новая команда с ИК-пульта, обрабатываем её. Исходя из полученной команды, отправляем соответствующие значения направления и скорости вращения моторов на пины ENABLE и DIR драйвера.

Заряжаем Power Bank, и можно кататься!

power_up

Заключение

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

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

Полезные ссылки