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

Дешевый и полнофункциональный робот-манипулятор своими руками

Сразу оговоримся, что совсем дешево делать не будем, т.к. не хочется убивать нервные клетки, делая доморощенные энкодеры для моторчиков + хочется упростить создание 3D модели, которая нужна для управления через ROS (ссылка на готовую модель – ниже в статье).

На момент написания статьи ориентировочная конечная стоимость изделия составляет

70 000 руб. Если у вас есть 3D принтер, то можно смело вычесть из нее 20 000 руб. Если принтера нет, то его появление станет приятным бонусом. Все расходы я буду описывать исходя из того, что у нас нет ничего, кроме денег.

Как выглядит результат:

Также нужно отметить, что для программирования руки нам понадобится компьютер с установленными ОС Linux (я использую Ubuntu 18.04) и фреймворком ROS (я использую Melodic).

Может возникнуть вопрос «почему 70К рублей – это дешево?»

Отвечаю. Изначально я не хотел заморачиваться с созданием роборуки и думал просто купить что-нибудь простенькое, но достаточно функциональное в сборе.

Что являлось для меня критериями функциональности и минимальной допустимой простотой (т.е. почему НЕ подойдут манипуляторы с алиэкспресса) – можно обсудить в комментариях, чтобы не грузить тех, кому это очевидно и/или не интересно.

Конкурентные решения на рынке

Опишу, однако, кратко примеры того, что я рассматривал на рынке:

1) top3dshop.ru/robots/manipulators/dobot-magician-basic.html
176 000 руб. DOBOT можно купить не только в этом магазине, но обычно он стоит еще больше. Наверняка есть шанс найти его где-нибудь дешевле, но все равно это будет сильно дороже, чем 70 000 руб.

2) robotbaza.ru/product/robot-manipulyator-widowx-robotic-arm-mark-ii
280 000 руб. Еще дороже. Вообще, манипуляторы от TossenRobotics прямо у производителя стоят супервменяемых денег. Вот только доставку в Россию (а я-то именно тут) из их магазина не заказать.

Забегая немного вперед скажу, что делать мы будем копию робо-руки PhantomX Pincher Robot Arm Kit Mark II, которая производится именно компанией TossenRobotics.

Итого, видим, что 70 000 руб – это совсем не так дорого.

Что же нам нужно купить?

Все цены привожу на момент написания статьи (июль 2020 года):

1) 6 моторчиков DYNAMIXEL AX-12A

Я покупал по цене 7200 руб за 1 штуку, но, кажется, можно найти и за 6000 при большом желании. Будем считать, что вам не повезет и вы тоже купите за 7200.
Суммарная стоимость: 43 200 руб

Подойдет любой простенький, можно уложиться в 20 000 руб.

3) Arduino Uno + Power Shield

4) Опционально (но я очень рекомендую): Лабораторный источник питания

Сборка

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

1) Напечатаем детали для манипулятора на 3D принтере.

Качаем STL файлы отсюда

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

Делаем 3D модель

Класс! Рука у нас есть, но ведь ей же нужно как-то управлять. Хочется максимально использовать достижения человечества, поэтому установим себе ROS.

Для того, чтобы полноценно работать с манипулятором в ROS – нужно сделать его URDF модель. Она будет нам необходима для того, чтобы управлять робо-рукой с помощью пакета MoveIT!
На момент написания статьи последняя стабильная сборка доступна для Melodic/Ubuntu 18.04, чем и объясняется мой выбор версии системы и фреймворка в начале статьи.

Построение URDF модели – довольно трудоемкая (и, на мой взгляд, самая скучная) часть данного проекта. Нужно немного допилить напильником stl модели компонентов и соединить их воедино в XML-образном файле, вручную подбирая правильные коэффициенты смещения деталей друг относительно друга.

Кто хочет – может проделать работу самостоятельно, всем остальным поберегу нервы и просто дам ссылку на свой готовый файл:

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

Выглядит модель вот так:

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

Для создания конфига есть отличный туториал (ссылка)

Тут я могу опять сэкономить время и предоставить свой конфиг. Лежит он вот тут:

Можно скачать конфиг с гитхаба и запустить следующей командой:

Примерно так можно будет управлять нашей реальной робо-рукой через rviz, когда мы подключим ее к ROS:

А что с реальной рукой?

Переместимся из мира 3D моделей в суровую реальность. У нас есть собранный ранее манипулятор. Хотелось бы его как-то подвигать. Сделаем это с помощью Arduino UNO и Power Shield.

Подключим первый моторчик манипулятора (который снизу) к Power Shield’у и блоку питания следующим образом:

Да, data pin моторчика мы соединим сразу с 3 и 4 выводом Arduino. Пытливый читатель мануала Dynamixel (вот он) сразу заметит, что связь с внешним миром у моторчика организована по Half Duplex Asynchronous Serial Communication, а это означает, что data pin используется сразу и для получения команд и для ответа.

По умолчанию, на аппаратном уровне Arduino умеет работать только с Full Duplex UART. Эту проблему можно обойти, используя Soft Serial библиотеку, что мы и сделаем. Именно использование Half Duplex режима объясняет подключение data pin мотора к 3 и 4 выводам шилда одновременно.

Помимо полудуплексного обмена работа с Dynamixel через Arduino имеет еще пару занимательных моментов, которые могут быть не совсем очевидны с самого начала. Сведем их все воедино.

Как подвигать наш манипулятор?

1) Сначала скачаем нужную библиотеку. Она называется ardyno и ее можно получить через Arduino Library Manager, либо тут (ссылка)

2) По умолчанию Dynamixel AX-12A хотят работать с baud rate = 1000000. Однако Software Serial Interface не потянет такую скорость, поэтому baud rate стоит снизить до 57600. Таким образом, начало файла с вашей программой будет выглядеть примерно вот так:

3) Все наши моторчики соединены друг с другом последовательно. Значит, чтобы обращаться к каждому из них — нужно знать его ID? Это действительно так, объект DynamixelMotor при инициализации получает два параметра: interface (одинаков для всех, его мы задали в предыдущем пункте) и id (должен быть у всех разный, иначе поведение будет у манипулятора весьма странное)

Id каждому моторчику придется задать вручную. Кажется, что будучи соединенными последовательно, они могли бы и сами рассчитаться по номерам от 1 до 6, но этого не предусмотрено. Поэтому нужно каждый моторчик отдельно подключить к Arduino (отключив от остальных) и выполнить следующую программу:

Изначально все моторчики имеют именно поэтому мы и указываем вверху

NEW_ID для каждого моторчика нужно заменить на число от 1 до 6 (да, ок, первый моторчик можно не трогать). Нумеруем их в порядке от нижнего к верхнему.

Ура! у нас есть полноценный манипулятор, который мы можем двигать, а также имеется 3D модель к нему. Можно брать ROS и программировать любые крутые штуки. Но это уже рассказ для отдельной статьи (и не одной). Данное же повествование подошло к концу, спасибо за внимание!

Источник

Как сделать робота на Ардуино своими руками: самодельный robot Arduino в домашних условиях

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

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

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

Шаг 1: Необходимые материалы

  • Arduino UNO
  • Мини макетная плата
  • Драйвер двигателя L298N
  • Два электромотора с колесами
  • Ультразвуковой датчик измерения расстояния HC — SR04
  • Микросервопривод
  • Кнопка
  • Красный диод
  • Резистор 220 Ом
  • Отсек для элемента питания 9В (с/без коннектора)
  • 8 стоек для макетных плат с наружной и внутренней резьбой, 8 винтов и 8 гаек

Также вам понадобится одна большая металлическая скрепка и бусина (для заднего опорного колеса).

Для изготовления каркаса робота использован кусок плексигласа (оргстекла) 12х9,5 см. Можно сделать каркас из дерева или металла, или даже из компакт-дисков.

  • Дрель
  • Суперклей
  • Отвертка
  • Клеевой пистолет (опционально)

Для питания робота используется батарейка 9В (крона), она достаточно компактная и дешевая, но разрядится уже примерно через час. Возможно, вы захотите сделать питание от аккумулятора на 6 В (минимум) или 7 В (максимум). Аккумулятор мощнее батарейки, но и дороже и больше по габаритам.

Шаг 2: Делаем каркас робота

Положите всю электронику на плексиглас и маркером отметьте места, где нужно будет просверлить монтажные отверстия (фото 1).

На нижней стороне пластины плексигласа приклейте на суперклей электромоторы. Они должны быть параллельны друг другу, с помощью линейки-угольника проверьте их положение прежде чем клеить (фото 2). Затем приклейте на суперклей отсек для батарейки.

Можно также просверлить отверстия под провода электромоторов и питания.

Шаг 3: Монтируем электронику

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

Теперь делаем заднее опорное колесо из скрепки и бусины (фото 2). Концы проволоки закрепите на нижней стороне каркаса суперклеем или термоклеем.

Шаг 4: Устанавливаем «глаза» робота

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

Шаг 5: Схема подключений

Теперь приступаем к подключению электронных компонентов. Подключение компонентов происходит согласно схеме на рисунке 1.

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

Шаг 6: Код

Код, который приведен ниже, сделан с помощью Codebender.

Codebender – это браузерный IDE, это самый простой способ программировать вашего робота из браузера. Нужно кликнуть на кнопку «Run on Arduino» и все, проще некуда.

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

Нажав кнопку «Edit», вы можете редактировать скетч для своих нужд.

Например, изменив значение «10» измеряемого расстояния до препятствия в см, вы уменьшите или увеличите дистанцию, которую будет сканировать robot Arduino в поисках препятствия.

Если робот не двигается, может изменить контакты электромоторов (motorA1 и motorA2 или motorB1 и motorB2).

Шаг 7: Завершенный робот

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

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

Источник

3D роботизированная рука на Arduino с записью и воспроизведением действий

Роботизированные руки с каждым годом находят все большее применение в жизни современного общества, особенно в тех приложениях, в которых требуется скорость, точность и безопасность действий. Их можно не только увидеть в современных кинофильмах, например, в серии фильмов «Железный человек», но их еще в большом количестве и ассортименте производят такие компании как Fanuc, Kuka, Denso, ABB, Yaskawa и т.д. Эти роботизированные руки используются на производственных линиях по сборке автомобилей, горнодобывающей промышленности, химических заводах и т.п.

В этой статье мы рассмотрим создание роботизированной руки (Robotic Arm) с помощью платы Arduino и сервомоторов MG995. Эта роботизированная рука будет иметь 4 степени свободы (без учета захвата) и управляться с помощью потенциометров. Кроме этого, мы также сможем записывать и в дальнейшем воспроизводить все движения руки – именно так во многих случаях и программируются роботизированные руки для работы на реальных производствах.

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. Сервомотор MG-995 (5 шт.) (купить на AliExpress).
  3. Потенциометр (5 шт.) (купить на AliExpress).
  4. Перфорированная плата.
  5. Скелет роботизированной руки и крепления.

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

3D печать и сборка роботизированной руки

Вначале мы пытались разработать дизайн этой руки самостоятельно, но потом обнаружили что на сервисе Thingiverse есть достаточно много потрясающих дизайнов подобных роботизированных рук и решили «не изобретать заново велосипед». Мы обнаружили, что роботизированная рука Robotic Arm V2.0 by Ashing будет прекрасно работать с сервомоторами MG995, поэтому она отлично подходит для нашего проекта.

Поэтому перейдите по приведенной ссылке на Thingiverse и скачайте там файлы модели этой руки. Всего рука содержит 14 компонентов для 3D печати, STL файлы для всех из них можно скачать по приведенной ссылке. Мы использовали программное обеспечение Cura 3.2.1 от Ultimaker для обработки STL файлов и 3D принтер TEVO tarantula для печати компонентов руки.

Дизайн всех компонентов этой руки достаточно прост, поэтому его можно напечатать практически на любом 3D принтере. У нас на печать всех компонентов руки ушло примерно 4,5 часа. Инструкция по сборке руки приведена на этой странице, поэтому в нашей статье не будем останавливаться на ней подробно.

Единственный момент, на который нам бы хотелось обратить внимание – возможно вам придется вручную подровнять (подшлифовать) края некоторых компонентов чтобы «втиснуть» туда сервомотор — обычно крепления для сервомоторов проектируются с таким расчетом, чтобы запихивать в них сервомоторы приходилось с некоторым усилием, так они будут лучше держаться. Вам понадобится 20 болтов диаметром 3 мм для сборки компонентов этой роботизированной руки.

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

Работа схемы

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

Поскольку сервомоторы MG995 работают от питающего напряжения 5V, то их можно запитать от соответствующего разъема платы Arduino. Управляющие контакты сервомоторов подключены к цифровым контактам платы Arduino, на которых возможно формирование сигналов ШИМ (широтно-импульсной модуляции). Потенциометры подключены к аналоговым контактам платы Arduino для управления сервомоторами.

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

После пайки и сборки компонентов на перфорированной плате у нас получилась конструкция, показанная на следующем рисунке. Дополнительно в конструкцию проекта мы добавили разъем для подключения батарейки если в дальнейшем потребуется питание от нее.

Если вы раньше не сталкивались с сервомоторами рекомендуем прочитать статью про подключение сервомотора к плате Arduino.

Объяснение программы для Arduino

В программе мы должны предусмотреть возможность записи движений пользователя по вращению ручек потенциометров и их воспроизведения когда это потребуется. Поэтому в программе нам необходимо два режима – режим записи (Record mode) и режим воспроизведения (Play mode). Пользователь сможет переключаться между этими двумя режимами с помощью монитора последовательной связи (serial monitor). Полный текст программы приведен в конце данной статьи, здесь же мы рассмотрим его наиболее важные фрагменты.

Как обычно, программу начнем с подключения необходимых заголовочных файлов. Мы будем использовать библиотеку Servo.h для управления сервомоторами. У нас 5 сервомоторов в проекте, поэтому каждому из них необходимо дать уникальное имя. Также мы инициализируем переменные, которые затем будем использовать в программе. Мы сделали все переменные глобальными – но вы самостоятельно можете оптимизировать эту часть программы если захотите. Также мы инициализировали массив saved_data, в который мы будем записывать движения руки.

Источник

Adblock
detector