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



Видео по проекту
В данном видео показан полный и максимально подробный процесс разработки и изготовления устройства, а также обзор его возможностей и функций.
Как всегда есть над чем поржать и поплакать)))
комплектация
Все механические части двуногого робота печатаются на 3D-принтере. 3D модели для печати я выложил здесь. Пользуйтесь на здоровье.
схемы, печатные платы
Схема электрическая принципиальная

программирование
Для программирования модуля Arduino Nano я использую программную оболочку Arduino IDE.
настройка
Управлять роботом можно со смартфона, используя любое приложение типа Bluetooth Terminal.
Обзор команд, которых пока немного:
- «0» — стоп
- «1» — идти вперед
- «2» — исходное положение
- «3» — установка сервы на определенный угол
- «5» — наклоны корпусом
Формат команды «3» вот такой: 3NXXX, где
- N — порядковый номер сервы (0 — ступня правой ноги, дальше не сложно разобраться)
- XXX — угол, на который надо повернуться в градусах
По умолчанию исходное положение всех серв — это 90 градусов. С помощью команды «3» выставляем более точно все нулевые углы, так чтобы все суставы были выпрямлены, ступни и таз параллельно плоскости пола. Затем заносим эти углы ZERO в настройки прошивки.
Шагающий и танцующий робот на Arduino
В этом проекте мы рассмотрим создание на основе платы Arduino небольшого робота, который умеет ходить и танцевать. Проект имеет целью научить вас создавать подобных роботов на основе Arduino, а также программировать сервомоторы для подобных применений. В конце этой статьи вы научитесь создавать шагающего и танцующего робота, который умеет принимать команды от мобильного телефона на Android чтобы выполнять некоторый заранее определенный набор действий.

Также вы можете использовать программу, приведенную в конце статьи, чтобы управлять движениями робота с помощью положения его сервомоторов и используя для этого последовательный монитор (Serial monitor). Если у вас есть 3D принтер, то вы можете сделать этот проект очень впечатляющим, но если у вас его нет, то вы можете изготовить компоненты корпуса робота из любого доступного материала: пластмасса, дерево, жесткий картон и т.д.
Необходимые компоненты
- Плата Arduino Nano (купить на AliExpress).
- Сервомотор SG90 (4 шт.) (купить на AliExpress).
- Bluetooth модуль (HC-05/HC-06) (купить на AliExpress).
- Соединительные колодки (типа папа).
- 3D принтер (опционально).
Внешний вид всех необходимых комплектующих для сборки этого робота вы можете увидеть на следующем рисунке.

Как вы видите, этот робот требует минимального количества электронных компонентов – это сделано с той целью чтобы максимально удешевить проект. Проект имеет обучающую цель и не претендует на то, чтобы его можно было использовать в каких-нибудь практических применениях.
Печать на 3D принтере необходимых компонентов
3D принтеры, появившиеся сравнительно недавно, дают большой простор для разнообразных DIY (сделай сам) проектов.
Мы в нашем проекте полностью напечатали тело робота на 3D принтере. Все необходимые STL файлы для этого вы можете скачать по следующей ссылке. Вы можете загрузить эти файлы программным обеспечением вашего 3D принтера (например, Cura) и непосредственно напечатать их. Принтер, который мы использовали, называется FABX v1, который доступен по приемлемой цене и может печатать в объеме до 10 кубических сантиметров. Мы использовали программное обеспечение Cura чтобы напечатать STL файлы. Мы сделали следующие настройки в данном программном обеспечении для печати нашего проекта:

Напечатанные нами части корпуса робота выглядят следующим образом:

После печати удостоверьтесь в том, что отверстия на ногах и туловище робота достаточны для того, чтобы через них прошел шуруп (винт). Если это не так, то расширьте их с помощью шила.
Работа схемы
Схема устройства представлена на следующем рисунке.

Мы использовали перфорированную плату чтобы облегчить создание соединений между компонентами схемы. Также следите за тем, чтобы созданная вами плата помещалась внутрь корпуса робота.
Сборка робота
После того как электрические соединения в схеме робота сделаны и корпус робота готов можно приступать к его окончательной сборке. Перед закреплением сервомоторов убедитесь в том что их оси повернуты на углы, указанные в следующей таблице:
| Motor Number (номер мотора) | Motor place (место мотора) | Motor position (позиция мотора) |
| 1 | Left Hip motor | 110 |
| 2 | Right Hip motor | 100 |
| 4 | Right Ankle Motor | 90 |
| 5 | Right Hip motor | 80 |
Эти углы можно выставить с помощью программы, приведенной в конце статьи. Просто загрузите программу в плату Arduino (когда все соединения уже сделаны) и напечатайте в окне последовательного монитора (serial monitor) (бодовая скорость: 57600):
Окно последовательного монитора у вас после установки всех сервомоторов в необходимые позиции должно выглядеть примерно так:

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

Если у вас возникли какие либо затруднения, то посмотрите видео, приведенное в конце статьи. После того как робот собран можно приступать к написанию программы чтобы заставить его танцевать.
Объяснение программы для Arduino
Если вы не уверенно чувствуете себя в программировании действий сервомоторов, то вначале рекомендуем изучить следующую статью – подключение сервомотора к плате Arduino. Также вы можете посмотреть на нашем сайте все статьи, связанные с управлением сервомоторами.
Полный текст программы приведен в конце статьи, либо вы можете скачать его по этой ссылке. Здесь же объяснены наиболее важные части программы. С помощью этой программы можно управлять движениями робота при помощи монитора последовательной связи (serial monitor) или технологии Bluetooth. Также вы на основе этой программы можете запрограммировать свой собственный набор движений для робота.
В следующих строчках кода мы укажем плате Arduino какие сервомоторы к каким ее контактам подключены. В нашем случае сервомоторы 1, 2, 4 и 5 подключены к контактам 3, 5, 9 и 10.
Как построить мощного скоростного робота-шагохода? Несколько мыслей на тему…

Перемещение по земной поверхности с использованием шагающего принципа является своего рода «Священным Граалем» робототехники. В разные времена множество изобретателей пытались решить эту задачу на том уровне науки и техники, который был доступен на тот момент. И только недавно, с появлением роботов Boston Dynamics, китайских производителей, эта задача стала решаться достаточно быстрыми темпами. В этой статье мы попробуем порассуждать на тему того, как мог бы выглядеть перспективный шагоход, если решать эту задачу на текущем уровне.
В связи со своим живым интересом к теме робототехники, которая подкрепляется постоянными практическими опытами, я всегда стараюсь держать руку на пульсе происходящего в теме шагающих роботов и некоторые свои соображения постараюсь изложить в этой статье.
Человечество достаточно давно мечтает о «механическом коне» — изобретатели «копают» эту тему, не останавливаясь ни на минуту. Если изначально конструкции разнообразных шагоходов были достаточно примитивными и представляли собой, по сути, рычажные конструкции:
то, с появлением двигателя внутреннего сгорания и компактного источника энергии в виде бензина, изобретатели стали пытаться применять такого рода двигатели для создания механических устройств. Причём эти попытки не закончились даже сегодня:
Получается это конечно достаточно смешно, однако показывает степень интереса людей из абсолютно разных сфер и разного уровня знаний — к этой теме.
Большие корпорации также не остались в стороне и периодически рождают свои достаточно интересные идеи, среди которых можно назвать, например, комбайн для лесных работ (Plusjack Walking Harvester), разработанный финской компанией.
Его движения имитируют движения муравья, и при его разработке компания руководствовалась желанием создать некое устройство, которое могло бы передвигаться по пересечённой местности в гуще леса.
Источник картинки: zen.yandex.ru
Ей это вполне удалось, и такой лесной трактор-комбайн успешно передвигался по лесным буреломам, практически не оставляя за собой следов.
Источник картинки: pikabu.ru
Однако, ввиду неизвестных причин, компания не стала производить эту машину большими партиями и мир лишился достаточно интересного устройства. Аппарат был произведён в количестве всего 3 штук, несмотря на вполне успешную работу.
Источник картинки: pikabu.ru
Среди других достаточно известных примеров больших шагоходов можно назвать два, построенных энтузиастами этого дела: Prosthesis ( «Протез») и Mantis.
Причём первый из них, который разрабатывался в течение 10 лет, представляет собой своеобразный мощный экзоскелет, управляемый движениями человека. Разработчик использует его в шоу целях:
Второй, Mantis — построен инженером, который затратил около 4 лет на разработку такого устройства.
Вес робота составляет порядка 1900 кг и он приводится в движение за счёт 2,2-литрового турбодизельного двигателя Perkins, мощностью в 50 л. с.
Двигатель приводит в действие гидравлическую систему, которая состоит из 18 приводов и позволяет роботу передвигаться со скоростью до 1 км/ч.
Как нетрудно заметить, объединяющей особенностью всех трёх перечисленных выше роботов является использование гидравлического привода, что выливается в итоге в достаточно медленное движение. Разумеется, из-за большого веса робота приходится использовать подобные решения, однако хотелось бы видеть их скорость существенно более высокой (здесь следует сделать оговорку, что это зависит от целей, для выполнения которых предназначен данный конкретный робот — он вполне может быть медленным, если достижение целей при такой скорости будет успешным). Но неужели гидравлика настолько плоха в качестве привода?
Вовсе нет: хорошим примером скоростной гидравлической системы будет известный робот BigDog, который приводился в движение двухтактным двигателем, мощностью в 15 лошадиных сил, приводящим в действие гидравлический насос, прокачивающий с большой скоростью гидравлическую жидкость через систему робота. Устройство получилось достаточно эффективным, что позволило ему перемещаться со скоростью до 3,1 м/с.
Однако, создание подобного типа роботов, оказалось дорогим даже для Пентагона, в связи с чем военные отказались от постановки на вооружение мула-носильщика (одной из следующих разработок), предназначенного для переноски мин и снарядов по горам и пересеченной местности:
Логично предположить, что для других частных компаний (если таковые найдутся и возьмутся за разработку аналогичного решения), высокая сложность и дороговизна разработки можно стать непреодолимой проблемой.
В связи со всем вышесказанным давайте подумаем, а может ли быть альтернативное решение для внедорожной шагающей системы?
В качестве альтернативного средства привода для роботов сразу приходит в голову пневматический принцип. Почему именно он: так как он позволяет использовать один центральный пневматический узел, создающий давление и распределяющий его по системе трубопроводов к исполнительным актуаторам.
Таким образом, мы имеем достаточно лёгкое, условно-недорогое решение, малый вес конструкции в целом.
В противовес ему, электрический привод, потребует гораздо больших материальных затрат на монтаж соответствующих мощных двигателей и подведение к ним электроэнергии, а также её хранение и генерацию.
Именно поэтому, достаточно широко распространены пневматические решения в пассажирском транспорте: в автобусах и вагонах метро используются пневмоприводы для открывания дверей.
Однако по-настоящему мощных пневматических решений не наблюдается, хотя некоторые усилия в этом направлении предпринимаются: ряд компаний разрабатывает как шагающих роботов:
так и андроидов, с приводом от пневматических мускулов:
которые представляют собой жёсткую оболочку, внутри которой может раздуваться и сжиматься гибкий мешок. Оболочка ограничивает возможности этого мешка для раздувания в стороны, ввиду чего ему приходится увеличивать и уменьшать свою длину:
By Rocketmagnet (hugo@shadowrobot.com) — Shadow Robot Company, CC BY-SA 3.0, commons.wikimedia.org/w/index.php?curid=2107309
Дороговизна решений такого рода и то, что инженеры не так давно обратили к ним свой взор, не позволяет нам пока порадоваться чему-то действительно впечатляющему…
Распространение пневматические системы привода роботов в шагающих системах ещё не получили, ввиду молодости компьютерных шагоходов в целом (на мой взгляд), хотя в обычной промышленности пневмоприводы используются очень широко:
Кроме того, если уж заниматься передачей некой повышенной мощности, то инженер, скорее всего, предпочтёт использовать именно гидравлические системы вперёд пневматических, так как именно они сулят гораздо больше выгоды.
Ещё раз возвращаясь к теме электрических шагающих систем, хотел отметить, что хотя безусловно, мы все в курсе работ в области шагающих роботов от Boston Dynamics или Unitree Robotics:
но мы ведь говорим о по-настоящему мощной машине, своего рода «скоростном шагающем танке» для перевозки более чем 1-го человека! А таковых электрических систем пока не наблюдается (и, видимо, ещё долго не будет наблюдаться).
Несмотря на такое положение вещей, существует один вид «условно-пневматических систем», если их можно так назвать, в которых используется энергия разогретых газов: линейные двигатели внутреннего сгорания.
В нашей стране наиболее известным подобным устройством можно назвать «сапоги-скороходы» — линейные двигатели, появившиеся около 30 лет назад и представляющие собой цилиндры, под подошвой бегуна, в которые впрыскивается топливо, загорающееся от давления.
Источник картинки: rusdarpa.ru
Конструкторам удалось разработать устройство, в котором происходит достаточно мягкий процесс горения, позволяющий надевшему их человеку, бежать со скоростью до 30 км/ч, совершая прыжки более полуметра в высоту. При этом расход топлива составляет, порядка 140 грамм/час, а экономия энергетических затрат бегуна составляет порядка 70%.
Источник картинки: dvs.ugatu.ac.ru
Источник картинки: dvs.ugatu.ac.ru
За рубежом подобного рода устройства (линейные приводы) используются в качестве трамбовок для дорожных работ. По своей сути они представляют такой же линейный двигатель, в котором происходит первичное сжатие смеси, после чего оператор нажимает на кнопку, находящуюся на рукоятке, что вызывает проскакивание электрической искры, поджигание смеси, подпрыгивание всей установки, новое сжатие, после чего процесс повторяется:
Почему я упомянул подобного рода устройства: основной проблемой многих робототехнических систем является их вес и необходимость выработки достаточно большого количества энергии в краткий промежуток времени. Мало того, эту энергию необходимо каким-то образом эффективно транспортировать, применять, восполнять. Всем этим требованиям, на мой взгляд, весьма полно удовлетворяет линейный двигатель.
Предположим гипотетическое устройство, которое представляет собой робота-многоножку, в каждой ноге которого установлен линейный двигатель внутреннего сгорания. Перемещение ног происходит посредством вспышки смеси в каждой ноге, а также изменения угла наклона этой части ноги относительно горизонта. Другими словами, робот наклоняет ноги, чтобы оттолкнуться и сдвинуться вперёд. Он может двигаться как, условно, «прыжками», так и поочерёдно переставляя (даже скорее «перебрасывая») ноги. На картинке ниже показан приблизительный принцип.

В состоянии покоя, когда машина находится в неподвижности, изначальный импульс может быть дан неким пневматическим пускателем, как в танках, где сжатый воздух запускает двигатель танка. В нашем же случае, сжатый воздух может дать предварительный импульс (если его подать в цилиндры линейных двигателей), чтобы «подкинуть» робота, после чего произойдёт его приземление, предварительное сжатие смеси в камерах сгорания, поочерёдные вспышки в них и робот начнёт движение.
Мощность такой системы может быть весьма велика, вспомним дизельный сваебойный копер, где изначально груз поднимают вверх, потом сбрасывают, и, в самой нижней точке, когда воздух под грузом сжат и разогрет — туда впрыскивается дизельное топливо, которое воспламеняется от температуры. Энергетика процесса такова, что позволяет забивать сваи в землю:
Для стабилизации процесса горения можно использовать все наработки: форкамеры в цилиндрах, свечи зажигания поверхностного разряда ( где разряд покрывает свечу снаружи и его площадь настолько велика, что он просто не оставляет шансов топливу не воспламениться), использование множественных цилиндров в одной ноге ( 2-3 цилиндра установлены рядом и срабатывают вместе или поочерёдно. Цель — создать дублирующие системы в каждой ноге, которые гарантированно позволят роботу сделать шаг, даже если один из двух-трёх цилиндров в ноге не сработал) и т.д.
Таким образом, на выходе, мы можем получить достаточно мощную систему, которая не требует транспортирования энергии для движения в каждую ногу, так как двигатель, необходимый для этого, интегрирован в неё непосредственно. Это позволит роботу быть как достаточно мощным (грузоподъёмным) – так и осуществлять скоростное движение по пересеченной местности.
В качестве завершения: достаточно давно, мне попалась на глаза интересная разработка, созданная специалистами лаборатории биомиметических систем калифорнийского университета Беркли. Созданная ими модель робота представляла собой шестиногое устройство, имитирующая тип движения таракана. Аппарат был создан с использованием лазерной резки, и приводился в действие с помощью миниатюрного электродвигателя. Устройство получилось на редкость проворным:
Видимо это видео впечатлило многих, так как некоторое время спустя после появления этой разработки, двое молодых учёных с научными степенями PhD, запустили стартап, который занялся производством подобного типа роботов на радиоуправлении — для детей. Проект получил название Kamigami Robots:
На сегодняшний день, по моим наблюдениям, это самые быстродвигающиеся роботы-многоножки.
Нетрудно представить, что если повторить такое устройство в масштабе (конечно, уже не из бумаги — а соответствующей металлической конструкции), скажем, чтобы оно было в длину метров 7, снабдить качественной подвеской (чтобы избавить ездоков по максимуму от тряски) – то такая платформа могла бы перевозить до 6 человек и передвигаться по пересечённой местности, в качестве такого своеобразного туристического автобуса-шагохода! Стартап? Why not…
Введение.

В этой статье вы сможете найти детальное описание процесса сборки робота «Ходок», являющегося типичным представителем робототехнической машины. Его механическая часть реализована из следующих компонентов фирмы Gekko:
Эти компоненты вы можете приобрести либо все вместе Двуногий робот Gekko «Ходок» (конструктор без электроники), либо по отдельности в этом разделе сайта. При покупке всего механического комплекта робота вы так же получите:
Эти же компоненты вы так же сможете купить, отдельно перейдя по ссылка указанным в их названии, я же из соображений «наличия других компонентов» брал запчасти отдельно и в моем роботе установлены сервоприводы фирмы HobbyKing (НК151138), которые, к слову сказать, существенно хуже по всем показателям, чем рекомендованные Сервопривод Feetech FS5103B, как по показателям силовым, так и по точности отработки, так и по разбросу параметров среди экземпляров одного типа. Но это не говорит о том, что при повторении проекта, необходимо покупать дешевые китайские сервы, как у меня в проекте. Напротив, если сгодились мои, то более качественные сервоприводы только упростят процесс отладки.
Электронная часть робота, реализованная из следующих компонентов:
· Аккумулятор AA емкость 2500mA/H(китайские взяты в ларьке) — 4 шт
Так же для установки датчика дальности Sharp, использованного в проекте необходимо приобрести еще один элемент механической части конструкции не входящий в состав стандартного комплекта робота «Ходок» фирмы Gekko, но произведенный этим же поставщиком, а именно:
Как видите, все кроме аккумуляторов (которые вполне можно заменить любыми батарейками типа АА), можно приобрести в разделах сайта РОБОТОТЕХНИКА на страницах, которого, вы читаете данную статью, и который, непосредственно обладает правом на её размещение. Так же вы можете использовать любые другие компоненты, которые на ваш взгляд, лучше подходят для целей реализации данного проекта, но в этом случае возможные некоторые расхождения между моим описанием и реальной картиной вашего творческого процесса;)
1) Описание функционала робота «Ходок».
Робот «Ходок» (далее по описанию просто робот) — представляет собой двуного прямоходящего андроида с моделью передвижения имитирующей человеческую походку.
В рамках этой статьи вы научитесь собирать и приводить данного робота в движение. При этом в него будет заложен следующий функционал:
1) Автоматический режим – при этом робот будет самостоятельно передвигаться, шагая прямо и при появлении перед собой препятствия (в виде любого непрозрачного для инфракрасного излучения предмета) будет разворачиваться вправо или влево с целью обойти препятствие. В случае если препятствие не удается обойти (например, робот застрял в углу) будет включаться режим передвижения задом до момента выхода за границу зоны взаимодействия с препятствием.
2) Функционально-исполнительный режим – при этом робот будет устанавливать положение сервоприводов в соответствии с положением управляющих элементов на форме приложения для Windows. В этом режиме будет осуществляться создание всех моделей поведения, которые будут доступны в роботе.
2) Принципы управления роботом.
Возможно, вам может показаться, что мой ход преподнесения информации слишком избыточный и пора бы уже преступить к сборке робота и его запуску в пешее путешествие, но позволю вас огорчить – что бы заставить этого робота ходить придется много поработать и узнать немало новой информации о принципах управления данным кибернетическим объектом. У меня для вас 2 новости (все как в бородатом анекдоте) одна плохая, другая хорошая. Начну с плохой. Для того что бы управлять этим роботом не подучится вызвать стандартную функцию типа:
роботВперед(Пока не устанешь)
так как этой функции просто нет, и вряд ли будет. Так же вам вряд ли удастся создать сколько-нибудь жизнеспособный линейный алгоритм для управления роботом, что-то вроде повернуть сервопривод 1 на косинус угла сервопривода 2 и тому подобных решений. И этому виной ряд причин:
1) Все сервоприводы даже дорогие и весьма надежные имеют разброс рабочих характеристик. Т.е. один и тот же сигнал для каждого сервопривода установит вал привода не в строго одинаковое положение.
2) Все сервоприводы имеют нелинейности по всей шкале своего возможного запаса хода. Т.е. например изменение длительности импульса с 1800 до 1900 микросекунд может привести к перемещению вала на большей или меньший угол, чем например изменение длительности с 1900 до 2000 микросекунд, причем положение этих нелинейностей может существенно отличаться для любых двух сервоприводов, даже из одной партии.
3) Даже если не брать в расчет мелкие нелинейности по различным участкам шкалы имеются и существенные общие нелинейности характерные для всех сервоприводов одного типа. Может оказаться так, что во всех экземплярах шкала чуть более растянута в начале и чуть более сжата в конце с плавным переходом от начала до конца. С одной стороны может показаться, что это искажение не столь существенно т.к. оно характерно для всех сервоприводов в равной степени. Но если посмотреть на практическую сторону вопроса, то становится ясно, что сервоприводы на разных ногах стоят в обратной положении т.е, если робот например наклоняется вперед то один из сервоприводов делает положительное приращение, а второй отрицательное и в этом случае наличие даже обще характерного для всех приводов искажения очень сильно усложняет процесс создания линейного алгоритма управления.
4) Стандартный сервопривод не имеет полностью свободного хода на 360 градусов, а он способен вращаться в определенном секторе, обычно общая его протяженность составляет от 200-270 градусов. При сборке робота вы установите все сервоприводы в совершенно случайные положения, т.к. вам будет необходимо в первую очередь обеспечить наличие возможного хода в конструктивных пределах. Т.е вы поставите сервоприводы так что бы робот имел как можно более широкие пределы поворота частей при этом, постаравшись сделать эти пределы схожими на обеих конечностях. После того как вы это сделаете ваше и без того не простая линейная модель по мимо всех сотен поправочных коэффициентов на нелинейности сервоприводов обзаведется еще и массивом исходных положений сервоприводов и позициями максимальных возможных передвижений.
Этот не малый список проблем далеко не полный, из тех, что вам придется преодолеть в попытке написания своего линейного алгоритма управления роботом и при этом даже если у вас это получится (что у меня, например, очень плохо получилось), ваше устройство станет практически неповторяемым. Если вы захотите написать статью о робототехнике подобную этой или просто поделиться своими исходниками с другом, который решил собрать себе такое же устройство вы столкнетесь с тем, что вам опять придется собирать огромное количество уникальной информации для каждого сервопривода его проекта. А если же вы захотите выйти за рамки этого проекта и собрать, например робота не на 6 сервоприводах как этот, а например на 18 (например 6-ногий паук с ногами с 3 степенями свободы) или еще большим числом, то ваш проект может запросто разбиться о невероятные трудозатраты. Так же если вы захотите в какой-то день оптимизировать вашего робота или добавить новый функционал, либо просто немного изменить имеющийся, это станет очень непростой задачей. Таким образом, линейный алгоритм слабо применим для моделей с ходовой частью, реализованной на сервоприводах под управлением платформы Arduino и технически реализованный указанными выше средствами. Для того что бы реализовать линейный алгоритм управления роботом необходимы существенно более серьезные вычислительные мощности и более серьезные технические средства, а в конце этой статьи вы сможете найти их описание, но ведь мы хотели реализовать ходящего робота теми средствами, которые у нас есть… Как же быть? Тем более, я обещал, что будет и хорошая новость))
В этой статье я опишу, как управлять роботом использую дискретный алгоритм управления. В чем заключается суть этого алгоритма. Необходимо путем подачи на робота управляющих сигналов с компьютера установить его сервоприводы в положения соответствующие устойчивым промежуточным значениям планируемой модели поведения. Например, мы хотим, что бы робот сделал один шаг правой ногой, это действие можно совершить поочередно перейдя из одного дискретного состояния в другое при чем, для того что бы робот сохранял устойчивость во всех точках этого движения перемещения должны осуществляться между заведомо устойчивыми позициями. Далее я приведу примерный список позиций которые робот должен поочередно пройти что бы сделать один шаг правой ногой:
1) Наклонить опорные сервоприводы так, что бы робот перенес центр тяжести на левую ногу и правая нога немного оторвалась от земли
2) вернуть роботу относительно прямое положение при этом, не потеряв устойчивость левой ноги стопу правой ноги позиционировать параллельно земли
3) Поднять правую ногу вперед сложив её в колене, что бы сохранить положение стопы параллельным земли, левую ногу немного сложить в колене, при этом немного отклонив корпус назад для сохранения у корпуса положения параллельного земле
4) Наклонив опорные сервоприводы перенести центр тяжести равномерно на обе ноги.
Обратите внимание что если пропустить хотя бы одно из указанных действий робот не сможет сохранить устойчивость и он либо будет одновременно двумя ногами «ёрзать» по земле(если пропустить 1 шаг), либо просто упадет назад (если пропустить 3 шаг). Т.о. для того что бы реализовать любую модель движения робота достаточно разбить все большое движение на дискретные устойчивые позиции и заставить робота плавно и одновременно всеми сервоприводами переходить из одной позиции в другую. На практике нам необходимо просто получить координаты сервоприводов в контрольных точках, т.е. узнать какой длительности импульсов соответствует та или иная позиция робота, далее необходимо создать массив, включающий в себя все контрольные точки и передать этот массив функции, которая сможет организовать плавный и синхронизированный по времени процесс перехода из одной точки в другую. Хорошая новость заключается в том, что я уже реализовал все этапы необходимые для того что бы данный метод работал просто и очевидно, вам же осталось только понять что к чему и решительно преступить реализации первого, по настоящему удобного в программировании ходящего робота. Прекрасно понимая ваше желание преступить к сборке позволю себе предостеречь вас от этого шага так как для того что бы вам не пришлось в дальнейшем еще раз разбирать робота придется все таки выполнить указания следующей главы.
3) Предварительная подготовка.
В среде разработки Arduino имеется библиотека Servo созданная специально для управления сервоприводами. С помощью нее можно достаточно просто задать положение сервопривода. Причем положение можно задавать как в градусах, так и в микросекундах. С одной стороны может показаться, что управлять градусами проще, но это не совсем так по следующим причинам:
1) Управляя градусами мы можем задать положения сервоприводов только в пределах от 0 до 180 градусов, если мы передадим значение более 180 то будет отработано 180 и соответственно если передать меньше 0 то будет отработано 0. На практике же разница между положением которое серва отрабатывает при 0 и 180 далеко не всегда равна 180 градусам, а это может быть как 160 так и 200 градусов, т.е. точность совсем не какая. Так же стоит отметить что конструктивно сервопривод может довернуться дальше как в сторону 0 так и в сторону 180. Т.о. образом может возникнуть ситуация при которой вы установите сервопривод, механически проверите его возможность двигаться в пределах конструктивной свободы. Когда начнете на него подавать сигнал окажется, что при задании позиции с помощью с управления градусами вы не сможете переместить движок серво в крайнее конструктивное положение т.к. 0 или 180 будет находиться раньше чем, то положение, куда бы вы хотели переместить вал.
2) Для того что бы точно позиционировать вал привода в некоторых случаях разрешения в 1 градус может быть не достаточно, например если двигать системой с большой длиной рычага (как например бедренный сустав робота), в этих случаях перемещения в даже в 1 градус могут выглядеть достаточно резкими и рывковыми. При управлении длительностью импульса реальное разрешение более чем в 10 раз превосходит разрешения при управлении градусами.
3) Не каких тригонометрических расчетов в процедуре при движении робота осуществляться не будет и по этой причине какой-либо практической необходимости в применении градусов просто нет.
Из вышесказанного вы, наверно поняли уже поняли что в тех скетчах, которыми мы будем оперировать в рамках этой статьи управление сервоприводами будет осуществляться методом передачи длительности импульса в микросекундах. Теперь осталось только выяснить некоторые возможности конкретно тех сервоприводов, которыми вы располагаете, что бы система работала точно. Нам необходимо получить предельные значения длительностей импульса при которых конкретно ваши сервоприводы смогут перемещаться во всем возможном секторе и для этого необходимо выполнить следующую последовательность действий:
1) Нумеруем сервоприводы в нашем случае от 0 до 5 (т.е. их всего 6). До тех пор пока робот не будет запущен, и не будут получены все необходимые сведения, нанесенные на сервоприводы номера должны четко просматриваться. Нумеровать сервоприводы стоит карандашом или тонким маркером.
2) Необходимо залить на вашу отладочную плату исходник (их обычно в данной среде называют скетчами) в начале я указал DFRduino Nano, но может сгодиться любая плата, рассчитанная на программирование в среде разработки Arduino. В этой статье я не буду описывать, что такое Arduino и как с ней бороться т.к. я рассчитываю, что вы хоть немного уже в этом и сами разобрались. Скетч, который вы будете загружать на плату делает следующее действие: к плате необходимо подключить любой переменный резистор сопротивлением от 10 до 50 килоОм и один сервопривод, которым мы будем управлять с помощью резистора, при этом текущее значение длительности импульса будет возвращаться на монитор порта. В чем заключается смысл этого действия? Нам необходимо получить для каждого из ваших сервоприводов предельные величины длительностей импульса которые переводят сервопривод из одного крайнего положения в другое. Полученные величины для каждого сервопривода необходимо зафиксировать и выбрать максимальное и минимальное значение. Ниже приведу таблицу с примером:
