Рисующий робот

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

Шаг 1: Используемые компоненты, инструменты и программное обеспечение

1. Механические компоненты

  • Набор Mechanix kit
  • Гайка и винты
  • Держатель ручки (прищепка)
  • 2X колесика

2. Электронные компоненты

  • Модуль Arduino uno
  • Печатная плата или макетная плата
  • Источник питания (адаптер напряжением 5В и током 2А)
  • USB кабель

3. Сервомоторы

  • Сервомоторы

4. Инструменты

  • Паяльник
  • Проволочный припой
  • Отвертка
  • Дрель

5. Программное обеспечение

  • Среда разработки Arduino IDE
  • Matlab (совместно с Arduino IO)

Все вышеуказанные компоненты легко найти в местном магазине радиокомпонентов.

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

Шаг 2: Механическая конструкция

На рисунке выше показана приблизительная конструкция данного робота и этапы ее сборки. Это похоже на игру с конструктором, когда вам было 5-6 лет. Теперь более подробно рассмотрим пошаговую инструкцию сборки робота.

  • Просверлите два отверстия в каждой плоской шайбе так, чтобы расстояние между этими отверстиями было одинаковым для всех шайб, как показано на рисунке выше.
  • Теперь мы должны изготовить жесткую опору для одного конца. Просверлите четыре отверстия на соответствующем расстоянии для винтов сервомотора и прикрепите сервомотор к квадратной стойке. Мы используем данную конструкцию для создания жесткой опоры, необходимой в процессе настройки.
  • Подсоедините две алюминиевые пластины из конструктора к двум любым шайбам, как показано на рисунке так, чтобы расстояние между двумя шайбами составляло около 20 см.
  • Теперь прикрепите одну шайбу к сервомотору с жесткой опорой, и вторую к другому сервомотору. Далее перед окончательным закреплением шайб откалибруйте сервомоторы на угол поворота 90 градусов так, чтобы сервомотор с жесткой опорой располагался параллельно к пластинам и свободный конец сервомотора находился перпендикулярно к нему.
  • Теперь возьмите самые длинные пластины (длиной 15 см) из конструктора и прикрепите их к нижнему концу свободного конца сервомотора параллельно ему.
  • Затем прикрепите колесики к нижней части механической руки с ручкой, которую мы создали на 5 шаге, для создания надежного равновесия и опоры.
  • Последний сервомотор необходимо прикрепить к концевой точке шага 5 с помощью клея feviquick или пистолета для склеивания, чтобы создать жесткую конструкцию.
  • Вместе с пластиной соответствующей длины и прищепкой прикрепите ручку к сервомотору так, чтобы расстояние от свободного конца плоской шайбы и кончика ручки составляло около 20 см.
  • При конструировании робота необходимо учитывать вышеуказанное расстояние величиной 20 см и правильность проведения калибровки. Оставшаяся часть конструкции зависит от доступности других компонентов и вашего желания. К примеру, вместо алюминиевых пластин из конструктора можно использовать линейки для создания механической руки и т.д.

    Шаг 3: Электронные компоненты

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

    Шаг 4: Программный код

    Это наиболее интересная и важная часть данного проекта.

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

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

    Этап 2: На втором этапе используется инверсная кинематика для достижения требуемого конкретного пикселя. Нам нужно знать координаты пикселя и вычислить соответствующие углы для осей вращения; формулы расчета показаны на рисунке выше.

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

    Теперь потребуется настройка Matlab и arduino для выполнения программного кода.

    Сначала установите пакет arduino IO package для matlab (все инструкции указаны вместе с пакетом программ).

    Далее замените файл arduino.m на загруженный файл с этим же именем.

    Загрузите и сохраните finaldraw.m и draw.m в директории matlab.

    Загрузите файл adioes.ino, который был загружен ранее, в модуль arduino.

    Посмотрите, какой из портов вашего arduino подключен, далее перейдите к файлу finaldraw.m и измените COM3 на ваш порт.

    Измените расширение изображения, которое вы хотите нарисовать, на *.png. Это можно сделать в любом редакторе изображений. Далее сохраните изображение в директории matlab. Откройте файл finaldraw.m и замените файл emma.png на ваше изображение с расширением .png. Сохраните файл finaldraw.m.

    В качестве примера было загружено изображение Эммы Уотсон, поэтому вы можете его использовать в процессе тестирования. Также вы можете изменить параметры функции обнаружения контуров изображения в соответствии со своими требованиями.

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

    Если у вас возникли какие-либо проблемы, тогда ознакомитесь с шагом 5.

    Шаг 5: Описание программного кода

    Ниже описывается алгоритм рисования изображения.

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

    Принцип работы алгоритма следующий: сначала начинается проверка пикселей отконвертированного изображения и когда находится единица (1), которая обозначается как белый пиксель на изображении выше, то кончик ручки достигает этой точки (процесс достижения этой точки писан ранее) и опускается вниз, далее проверяются соседние 8 пикселей, и если обнаруживается единица, то ручка достигает этой точки без поднятия кончика вверх и удаляет предыдущий пиксель, чтобы избежать повторений. Этот процесс продолжается, пока в окружении уже не обнаруживается логическая единица (это рекурсивная функция), поэтому ручка рисует плавную линию и удаляет ее «логическую составляющую» одновременно. Далее происходит отрисовка других ответвлений линий, которые появляются из нарисованной линии, поскольку идет проверка каждого соседнего пикселя. Данный алгоритм создает полное изображение.

    Оригинал статьи

    Прикрепленные файлы:

    Добавить комментарий

    Ваш адрес email не будет опубликован.