Робот на ардуино своими руками на радиоуправлении

Обновлено: 07.07.2024


Эти компоненты вы можете приобрести либо все вместе Двуногий робот Gekko "Ходок" (конструктор без электроники), либо по отдельности в этом разделе сайта. При покупке всего механического комплекта робота вы так же получите:

Электронная часть робота, реализованная из следующих компонентов:

· Аккумулятор AA емкость 2500mA/H(китайские взяты в ларьке) - 4 шт

Как видите, все кроме аккумуляторов (которые вполне можно заменить любыми батарейками типа АА), можно приобрести в разделах сайта РОБОТОТЕХНИКА на страницах, которого, вы читаете данную статью, и который, непосредственно обладает правом на её размещение. Так же вы можете использовать любые другие компоненты, которые на ваш взгляд, лучше подходят для целей реализации данного проекта, но в этом случае возможные некоторые расхождения между моим описанием и реальной картиной вашего творческого процесса;)

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

1) Автоматический режим – при этом робот будет самостоятельно передвигаться, шагая прямо и при появлении перед собой препятствия (в виде любого непрозрачного для инфракрасного излучения предмета) будет разворачиваться вправо или влево с целью обойти препятствие. В случае если препятствие не удается обойти (например, робот застрял в углу) будет включаться режим передвижения задом до момента выхода за границу зоны взаимодействия с препятствием.

2) Функционально-исполнительный режим – при этом робот будет устанавливать положение сервоприводов в соответствии с положением управляющих элементов на форме приложения для Windows. В этом режиме будет осуществляться создание всех моделей поведения, которые будут доступны в роботе.

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

1) Все сервоприводы даже дорогие и весьма надежные имеют разброс рабочих характеристик. Т.е. один и тот же сигнал для каждого сервопривода установит вал привода не в строго одинаковое положение.

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

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

4) Стандартный сервопривод не имеет полностью свободного хода на 360 градусов, а он способен вращаться в определенном секторе, обычно общая его протяженность составляет от 200-270 градусов. При сборке робота вы установите все сервоприводы в совершенно случайные положения, т.к. вам будет необходимо в первую очередь обеспечить наличие возможного хода в конструктивных пределах. Т.е вы поставите сервоприводы так что бы робот имел как можно более широкие пределы поворота частей при этом, постаравшись сделать эти пределы схожими на обеих конечностях. После того как вы это сделаете ваше и без того не простая линейная модель по мимо всех сотен поправочных коэффициентов на нелинейности сервоприводов обзаведется еще и массивом исходных положений сервоприводов и позициями максимальных возможных передвижений.

Этот не малый список проблем далеко не полный, из тех, что вам придется преодолеть в попытке написания своего линейного алгоритма управления роботом и при этом даже если у вас это получится (что у меня, например, очень плохо получилось), ваше устройство станет практически неповторяемым. Если вы захотите написать статью о робототехнике подобную этой или просто поделиться своими исходниками с другом, который решил собрать себе такое же устройство вы столкнетесь с тем, что вам опять придется собирать огромное количество уникальной информации для каждого сервопривода его проекта. А если же вы захотите выйти за рамки этого проекта и собрать, например робота не на 6 сервоприводах как этот, а например на 18 (например 6-ногий паук с ногами с 3 степенями свободы) или еще большим числом, то ваш проект может запросто разбиться о невероятные трудозатраты. Так же если вы захотите в какой-то день оптимизировать вашего робота или добавить новый функционал, либо просто немного изменить имеющийся, это станет очень непростой задачей. Таким образом, линейный алгоритм слабо применим для моделей с ходовой частью, реализованной на сервоприводах под управлением платформы Arduino и технически реализованный указанными выше средствами. Для того что бы реализовать линейный алгоритм управления роботом необходимы существенно более серьезные вычислительные мощности и более серьезные технические средства, а в конце этой статьи вы сможете найти их описание, но ведь мы хотели реализовать ходящего робота теми средствами, которые у нас есть… Как же быть? Тем более, я обещал, что будет и хорошая новость))

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

1) Наклонить опорные сервоприводы так, что бы робот перенес центр тяжести на левую ногу и правая нога немного оторвалась от земли

2) вернуть роботу относительно прямое положение при этом, не потеряв устойчивость левой ноги стопу правой ноги позиционировать параллельно земли

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

4) Наклонив опорные сервоприводы перенести центр тяжести равномерно на обе ноги.

В среде разработки 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 килоОм и один сервопривод, которым мы будем управлять с помощью резистора, при этом текущее значение длительности импульса будет возвращаться на монитор порта. В чем заключается смысл этого действия? Нам необходимо получить для каждого из ваших сервоприводов предельные величины длительностей импульса которые переводят сервопривод из одного крайнего положения в другое. Полученные величины для каждого сервопривода необходимо зафиксировать и выбрать максимальное и минимальное значение. Ниже приведу таблицу с примером:



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



Для начала нужно научить робота двигаться вперед, назад, влево и вправо, затем добавить ультразвуковой датчик, что поможет обнаруживать препятствия/преграды, а после этого Bluetooth модуль, благодаря которому управление роботом выйдет на новый уровень.


Скелет изготавливается из оргстекла толщиной 2 мм.

Электронная часть самоделки будет состоять из:


  • 12 сервоприводов;
  • arduino nano (можно заменить любой другой платой arduino);


  • Шилда для управления сервоприводами;
  • блока питания (в проекте использовался БП 5В 4А);


  • ультразвукового датчика;
  • hc 05 bluetooth модуля;

Для того, чтобы изготовить шилд понадобится:


  • монтажная плата (предпочтительно с общими линиями (шинами) питания и земли);
  • межплатные штыревые соединители — 30 шт;
  • гнезда на плату – 36 шт;


Инструменты:

  • Лазерный резак (или умелые руки);
  • Суперклей;
  • Термоклей.


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

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

hexy_legs_all


После резки снимаем защитное бумажное покрытие с оргстекла.


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


Затем нужно доработать сервоприводы (приклеить по винту напротив валов сервоприводов).


Этой доработкой мы сделаем робота более устойчивым. Доработку нужно выполнить только для 8 сервоприводов, остальные 4 будут крепиться непосредственно на тело.


Прикрепляем ноги к связующему элементу (изогнутая деталь), а его в свою очередь к сервоприводу на теле.


Изготовление платы довольно простое, если следовать представленным в шаге фотографиям.




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




Пришло время оживить Франкенштейна. Сначала загрузим программу legs_init и убедимся в том, что робот находится в таком положении, как на картинке. Далее загрузим quattro_test, чтобы проверить реагирует ли робот на базовые движения, такие как движение вперед, назад, влево и вправо.


ВАЖНО: Вам необходимо добавить дополнительную библиотеку в программную среду arduino IDE. Ссылка на библиотеку представлена ниже:

flexitimer2-master

Робот должен сделать 5 шагов вперед, 5 шагов назад, повернутся влево на 90 градусов, повернутся вправо на 90 градусов. Если Франкенштейн делает всё правильно, мы двигаемся в верном направлении.


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

init_and_test


Инверсная (обратная) кинематика – именно она в действительности и управляет роботом (если вам не интересна математическая сторона этого проекта и вы торопитесь закончить проект можете пропустить данный шаг, но знание того, что движет роботом всегда будут полезны).



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



quattro_ik_alg


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

Для выполнения движений, вам нужно вызывать следующие функции.


  • для движения вперед — step_forward();
  • для движения назад — step_back();
  • для поворота налево — turn_left();
  • для поворота направо — turn_right();
  • стоять — stand();
  • сидеть — sit();

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

spider_robot_turn_random


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

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

Автомобиль-робот с автопилотом на Arduino Mega 2560

Если следовать указаниям по подключению проводов к пинам, то напутать что-то сложно. На плате всегда есть подписи.
Особое внимание стоило бы обратить на подключение проводов к двигателям что бы не напутать полярность - направления вращения.

Автомобиль-робот с автопилотом на Arduino Mega 2560

При подключении телефона к Bluetooth нашего робота вылезет запрос пин-кода. Обычно он "1234". В программе Bluetooth Arduino Bluetooth RC Car доступны два способа управления: клавишами влево-вправо и с помощью гироскопа наклоном телефона.

Механизм работы автопилота таков, что машина едет вперед до тех пор пока до препятствия спереди не будет 30 см, то запускаем алгоритм сканирования препятствия. Двигатели останавливаются, серво-привод начинает вращать ультразвуковой дальномер на 180 градусов с шагом 15 градусов. Если в массиве измерений находятся точки расстояние до которых больше 30 см, то мы определяем с какой стороны эти точки и разворачиваем машину в этом направлении, запускаем двигатели.

Автомобиль-робот с автопилотом на Arduino Mega 2560
Автомобиль-робот с автопилотом на Arduino Mega 2560
Автомобиль-робот с автопилотом на Arduino Mega 2560
Автомобиль-робот с автопилотом на Arduino Mega 2560
Автомобиль-робот с автопилотом на Arduino Mega 2560
Автомобиль-робот с автопилотом на Arduino Mega 2560
Автомобиль-робот с автопилотом на Arduino Mega 2560

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

Управление по Bluetuth:



Диаметр робота 30 сантиметров, высота 9 сантиметров. Корпус сделал из вспененного ПВХ толщиной 6 мм. ПВХ легко режется ножом, гнется над паром, или феном, клеится обычным суперклеем намертво.



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



Контейнер для пыли и мусора сделан из 4 мм. ПВХ. Фильтр из двух слоев тряпичной салфетки (продается в любом магазине, где торгуют чистящими средствами для дома) и вклеил их в рамку из плотного картона. Крышка контейнера держится на магнитах.
Турбина склеена из тонкого пластика, компакт-дисков и ПВХ.



Контейнер со снятым фильтром. Видны лопасти турбины. Турбину сделал не разборной поэтому не смогу показать ее внутренности.



Верхняя крышка склеена супер-клеем.



Сердце, кишки и прочие внутренности робота-пылесоса.



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



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



Мотор для передней щетки выдрал из старого принтера и подключил к Ардуино через Мосфет. Когда пылесос движется щетка крутится медленно, чтобы не разбрасывала мусор, а направляла его прямо к жерлу. Когда пылесос подъезжает к стене, или мебели щетка вращается быстро, чтобы хорошо смести мусор, который обычно скапливается вдоль стен и в углах.
Инфракрасные датчики заклеил сзади черным картоном и покрасил черным маркером, а то они иногда срабатывали от мигания светодиодов на драйвере мотора.



Турбину вращает высокооборотный моторчик. Маркировки на нем нет и откуда вытащил не помню.



Питается все это хозяйство от четырех литий-ионных аккумуляторов формата 18650, через понижающий DC-DC преобразователь. Подключены две пары последовательно.



В белой трубке находится контроллер заряда — разряда аккумуляторов. Когда АКБ подходит к минимально допустимому разряду, контроллер отключает пылесос, когда заряжается и достигает полной зарядки, то отключает зарядное устройство.



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



Основание робота сделал из водостойкой фанеры, а точнее из разделочной доски.



Третье колесико пришлось углублять на 2,5 сантиметра. Надо было сразу заказывать шариковое колесико. Но как говорится, если бы бабушке бороду, то она будет дедушкой.



Щетку сделал из лески.

Список деталей:
Arduino Pro Mini — мозги.
L298N — драйвер моторов.
Понижающий DC -DC преобразователь.
Модуль с Мосфетом для управления передней щеткой.
4 инфракрасных датчика препятствия с контроллером.
Два переключателя для бампера.
Два колеса с мотор-редукторами.
Третье колесо, лучше шариковое не высокое.
Мотор для щетки.
Высокооборотный мотор для турбины.
4 аккумулятора 18650 и контроллер для них.
Фанера, ПВХ, куча проводов, выключатель, гнездо для зарядки, магнитики, шурупы.

Видео уборки.

Видео робота без корпуса.

Хотелось бы сделать, но пока не решил нужно, или нет:
1. Щетку снизу.
2. Базовую станцию, для возвращения на подзарядку.
3. Ик-барьер.

Читайте также: