myCobot 280 Pi — это универсальный роботизированный манипулятор с 6 степенями свободы. Он был разработан Elephant Robotics с использованием платы Raspberry Pi 4 в качестве основного контроллера. Робот компактен и обеспечивает стабильную работу, что делает его идеальным для ограниченного пространства. Его также можно запрограммировать на разных языках, он прост в использовании и предлагает множество функций. Он подходит для тех, кто интересуется программированием контроллера робота-манипулятора и для инженерных проектов.
Распаковка myCobot 280 Pi
myCobot 280 Pi имеет рабочий диапазон 280 мм, весит 850 грамм и может выдерживать полезную нагрузку до 250 грамм. Он приводится в действие 6 серводвигателями, по одному на каждую степень свободы, оснащен матричным светодиодным дисплеем 5 × 5 и поддерживает детали LEGO.
MyCobot 280, управляемый одноплатным компьютером Raspberry Pi 4, может быть подключен к камере для приложений обработки изображений, поддерживает подключение Ethernet и WiFi, имеет четыре порта USB и может быть подключен к дисплею через порт micro HDMI Raspberry Pi 4. Наконец, 40-контактный разъем GPIO также доступен для расширения с четкой маркировкой для каждого контакта, а на задней панели есть выключатель питания и цилиндрический разъем питания постоянного тока.
Слот для карты MicroSD расположен под роботом MyCobot 280 Pi.
Блок питания 100–240 В переменного тока с выходным напряжением 8,4 В постоянного тока и мощностью до 5 А (42 Вт) также входит в комплект поставки.
Другие аксессуары в комплекте myCobot включают:
- myCobot-плоская база
- 4x силиконовые присоски для надежного крепления основания к столу
- Веб-камера myCobot
- Комплект аспирационной помпы myCobot
- Различные соединительные провода
- Соединители LEGO
Как прикрепить плоскую опорную плиту к манипулятору myCobot 280 Pi
Сборка проста. Просто вставьте присоски в монтажные отверстия в четырех углах и закрепите их с помощью пластиковой головки винта.
Вот так это выглядит в готовом виде.
Предусмотренные разъемы LEGO позволяют легко подключать аксессуары к роботу myCobot 280 Pi.
При необходимости вставьте несколько разъемов LEGO в пазы монтажной пластины.
Наконец, поместите роботизированную руку myCobot 280 Pi поверх основания, убедившись, что она совмещена с резьбой и разъемами LEGO. Теперь вы можете поставить робота на пол или стол и плотно прикрутить присоски, чтобы основание робота не двигалось во время работы. Лучше разместить его на гладкой поверхности, такой как стекло или мрамор.
Операционная система Ubuntu
myCobot 280 Pi поставляется с операционной системой Ubuntu Linux и может быть запрограммирован с помощью IDE визуального программирования myBlockly и/или Python в VSCode.
Python
myCobot 280 Pi программируется на Python, что добавляет возможность использовать камеру для обнаружения объектов и поддерживает библиотеку OpenCV для искусственного интеллекта, обработки изображений и машинного обучения.
ROS
Операционная система роботов (ROS) использует Rviz для имитации движения манипулятора робота и удаленного управления манипулятором через ROS.
Программирование робота MyCobot 280 Pi с помощью MyBlockly
MyBlockly — это инструмент визуальной разработки, использующий символы вместо команд. В этом блоке есть группа символов, включающая логику, циклы, математику, текст, списки, цвет, переменные, функции, а также функции для управления манипулятором и многое другое, так что есть все, что нам нужно, чтобы легко написать программу. Вы можете нажать «Выполнить» в правом углу, чтобы запустить программу. Давайте посмотрим на некоторые интересные команды.
Время в MyBlockly
Блок Sleep позволяет добавить задержку в секундах.
Raspi-GPIO
Этот набор блоков управляет GPIO (входами/выходами общего назначения). Он используется для установки любого из контактов GPIO Raspberry Pi в состояние HIGH или LOW в режиме вывода или для настройки их как входов.
ATOM IO
Этот набор блоков управляет светодиодной матрицей 5×5 манипулятора. Вы можете изменить значение данных RGB каждого светодиода (красный, синий, зеленый), а также использовать ШИМ-управление.
Цвет светодиодов будет меняться в зависимости от введенных нами данных.
Статус
Набор блоков, специфичных для робота MyCobot 280 Pi, в частности, для его включения или выключения, проверки рабочего состояния и отключения всех сервоприводов.
Модель MDI и работа
Эти блоки контролируют степень перемещения механического рычага по каждой оси. Данные могут быть введены одновременно, включая контроль скорости, или вы можете использовать режим координации, если хотите. Это делает программирование манипулятора очень простым.
Модель JOG и работа
Эти блоки также контролируют степень перемещения механического рычага по каждой оси в отдельных блоках для каждой оси.
Состояние работы и настройки
Эти блоки могут устанавливать скорость механической руки и запрашивать текущую скорость, а также минимальный и максимальный углы конкретного сустава.
Определение угла наклона робота по каждой оси
Мы можем найти угол каждой оси, прочитав значения из программы. Эта полезная функция помогает сократить время нахождения углов нажатием на правый угол.
Появится окно. Мы можем вручную отрегулировать угол манипулятора робота и нажать кнопку «Прочитать углы» в разделе «Быстрое перемещение». Значения будут автоматически введены в блок Set Angle.
Тест MyCobot 280 Pi на точность
Мы проверили точность движения робота myCobot 280 Pi и измерили точность +/– 5%. В тесте манипулятор робота переходит в цвет на бумаге, а светодиодный матричный дисплей меняет цвет, чтобы он соответствовал этому цвету, как вы можете видеть из видео ниже.
Всасывающий насос myCobot
Всасывающий насос, который может расширить возможности манипулятора myCobot 280 Pi, позволяя поднимать и перемещать объекты за счет всасывания. Максимальный вес предмета, поднимаемого с помощью аспиратора myCobot, составляет 250 грамм.
Особенности всасывающего насоса
- Функция – всасывать предметы, чтобы поднимать и перемещать их
- Максимальный вес поднимаемого объекта – 250 грамм.
- Материалы – Фотополимер/нейлон 7100
- Белый цвет
- Размеры — 94 х 74 х 51 мм
- Вес – 220 грамм
Установка аспирационного насоса myCobot на myCobot 280 Pi
Опять же, мы будем использовать соединители LEGO, чтобы присоединить всасывающий насос myCobot.
Вот и все. Аспирационный насос myCobot можно легко установить на myCobot 280 Pi с помощью разъемов LEGO.
Подключение аспирационного насоса к роботизированной руке
Нам все еще нужно подключить всасывающий насос к манипулятору. Это можно сделать, подключив четыре провода к разъему GPIO Raspberry Pi 4: 5V, GND, G2 (GPIO21), G5 и (GPIO22).
Мы будем использовать штыревые кабели Dupont, подключенные к разъему GPIO, а именно 5V, GND, G2, подключенные к GPIO21, и G5 к GPIO22.
Использование всасывающего насоса myCobot с myBlockly
Перейдем в меню Raspi-GPIO и выберем блок «Set Mode BCM» для работы с контактами 20 и 21 в качестве выходов (OUT) с помощью командных блоков Set pin.
Два набора блоков используются для управления аспирационным насосом myCobot.
- Чтобы всасывающий насос работал, мы установим контакты 20 и 21 в положение HIGH.
- Чтобы остановить это, мы установим оба контакта в LOW.
Это все, что нам нужно для включения и отключения аспирационного насоса myCobot.
Пробная работа по подъему и перемещению с помощью всасывающего насоса
Мы проверили роботизированную руку, работающую вместе с всасывающим насосом, перемещая заготовку определенного цвета в точку того же цвета. Мы заметили, что если объект тяжелый, потребуется некоторое время, чтобы засосать его, а если объект легкий, потребуется некоторое время, чтобы освободить его. Но робот-манипулятор и всасывающий насос могут работать очень точно, как вы можете видеть из тестового видео ниже.
Камера MyCobot 280
Камера легкая и может быть легко установлена на манипуляторе за пару минут. Это в основном plug-and-play, а компактный дизайн означает, что вам не нужно беспокоиться о том, что он займет слишком много места. Цветная камера USB 2.0 работает с разрешением HD до 720p, предлагает широкий угол обзора и подходит для ряда приложений, таких как распознавание лиц, интеллектуальный экран, интеллектуальная экспресс-доставка, торговые автоматы, сканирование штрих-кода/QR-кода, контроль доступа, медицинское оборудование и так далее.
Установка myCobot SuctionPump и камеры myCobot 280 на myCobot 280 Pi
Теперь мы будем подключать камеру MyCobot 280 к аспирационному насосу myCobot, сначала вставив разъемы LEGO в аспирационный насос…
… прежде чем вставить его в камеру, к которой мы добавим дополнительные разъемы LEGO…
… чтобы установить его на роботизированную руку MyCobot 280 Pi.
Идеальный! Это не может быть проще.
Установка OpenCV и Numpy с помощью pip
Нам нужно будет установить библиотеки, а именно OpenCV и Numpy, чтобы запускать рабочие нагрузки обработки изображений на роботе. Мы можем установить их через Терминал в операционной системе робота.
OpenCV — это популярная библиотека для базовой обработки изображений, такой как размытие, смешивание, улучшение качества изображения, повышение качества видео, распознавание объектов, обнаружение лиц или объектов на изображениях и видео, а также цветоделение, которое мы будем использовать в этом проекте/обзоре.
1 |
pip install opencv-python |
Numpy — это модуль расширения Python с математическими функциями, которые обычно используются для манипулирования наборами данных (массивами) и матрицами.
1 |
pip install numpy |
Пороговое значение изображения
Пороговое значение — это один из методов отделения объекта от фонового изображения. Это работает путем получения серого изображения и преобразования его в двоичное изображение со значениями пикселей 0 (черный) или 255 (пока) с постоянным порогом, используемым для сортировки каждого пикселя изображения на черный или белый. Мы написали программу Python в VSCode, которая может обнаруживать объекты трех разных цветов. На следующем шаге программа попытается сначала найти красный объект, используя вход камеры. Для красного цвета были определены следующие нижний и верхний диапазоны: нижний R = np.array([142, 114, 181]) и верхний R = np.array([194, 255, 255])
В случае синих объектов мы будем использовать следующие значения: lowerB = np.array([83, 228, 206]) и upperB = np.array([106, 255, 255])
И, наконец, вот значения для зеленых объектов:
Пороговый пример кода в Python
Импортируются два модуля: cv2 для работы с изображениями и numpy для работы с массивами и матрицами.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import cv2 import numpy as np def nothing(x): pass cv2.namedWindow("Tracking") cv2.createTrackbar("LH", "Tracking", 0, 255, nothing) cv2.createTrackbar("LS", "Tracking", 0, 255, nothing) cv2.createTrackbar("LV", "Tracking", 0, 255, nothing) cv2.createTrackbar("UH", "Tracking", 255, 255, nothing) cv2.createTrackbar("US", "Tracking", 255, 255, nothing) cv2.createTrackbar("UV", "Tracking", 255, 255, nothing) vs = cv2.VideoCapture(0) while True: _, frame = vs.read() hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) l_h = cv2.getTrackbarPos("LH", "Tracking") l_s = cv2.getTrackbarPos("LS", "Tracking") l_v = cv2.getTrackbarPos("LV", "Tracking") u_h = cv2.getTrackbarPos("UH", "Tracking") u_s = cv2.getTrackbarPos("US", "Tracking") u_v = cv2.getTrackbarPos("UV", "Tracking") l_b = np.array([l_h, l_s, l_v]) u_b = np.array([u_h, u_s, u_v]) mask = cv2.inRange(hsv, l_b, u_b) res = cv2.bitwise_and(frame, frame, mask=mask) cv2.imshow("frame", frame) cv2.imshow("mask", mask) cv2.imshow("res", res) key = cv2.waitKey(1) if key == 27: break cv2.destroyAllWindows() |
Использование myCobot 280 Pi с конвейерной лентой для сортировки объектов (сортировка по цвету)
Мы заставим робота-манипулятора myCobot 280 Pi работать с конвейерной лентой для сортировки объектов разных цветов. Проект состоит из двух частей:
- Конвейерная лента использует плату Arduino для управления двигателем, а программа/схема проверяет состояние датчика для измерения тормозного пути объекта в соответствии с положением ленты.
- MyCobot 280 Pi определяет цвета с помощью порогового значения изображения, выбирает и перемещает красный, синий или зеленый объект в ведро того же цвета с помощью всасывающего насоса. Были установлены четыре позиции:
- Позиция красного ящика
- Позиция синего ящика
- Позиция зеленого ящика
- Исходное положение для обнаружения цветных объектов в месте, удобном для myCobot 280 Pi. Мы можем переместить манипулятор робота в это положение и прочитать значения из последовательного монитора и поместить полученные значения в программу, что является очень хорошей точкой для поиска различных положений.
Пример кода сортировки цветов myCobot 280 Pi
Библиотека MyCobot вызывается для управления манипулятором, библиотека RPi.GPIO используется для включения/отключения всасывающего насоса, библиотека cv2 используется для управления изображениями, а numpy — для управления массивами и матрицами.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
from pymycobot.mycobot import MyCobot from pymycobot import PI_BAUD, PI_PORT import RPi.GPIO as GPIO import numpy as np import time import cv2 GPIO.setmode(GPIO.BCM) GPIO.setup(20, GPIO.OUT) GPIO.setup(21, GPIO.OUT) vs = cv2.VideoCapture(0) print("Camera On: {}".format(vs.isOpened())) lR = np.array([142, 114, 181]) uR = np.array([194, 255, 255]) lG = np.array([54, 82, 228]) uG = np.array([81, 255, 255]) lB = np.array([83, 228, 206]) uB = np.array([106, 255, 255]) def pump(state): if state == 1: #On print('Pump on') GPIO.output(20, 0) GPIO.output(21, 0) elif state == 0: #Off print('Pump off') GPIO.output(20, 1) GPIO.output(21, 1) def findContour(mask): minArea = 10000 found = False x, y, w, h = 0, 0, 0, 0 contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for pic, contour in enumerate(contours): area = cv2.contourArea(contour) if area >= minArea: x, y, w, h = cv2.boundingRect(contour) found = True break return x, y, w, h, found camera = [7.82, -15.82, -110.12, 37.7, -19.59, -123.04] preTrash = [29.0, -4.21, -78.75, -1.75, -23.2, -150.46] trashAngle, comebackAngle = [], [] pickup = [ [33.92, -5.53, -117.94, 39.63, -21.79, -133.5], [32.69, -17.57, -121.46, 52.73, -20.83, -123.31] ] trashR = [-79.27, -16.25, -85.95, 16.78, -15.11, -139.83] trashG = [-37.0, -35.41, -55.01, 13.44, -15.73, -136.66] trashB = [-55.72, -17.4, -78.83, 15.55, -12.04, -134.56] comebackR = [-75.93, -17.49, -57.04, -9.58, -21.0, -136.93] comebackB = [-51.85, -17.22, -60.29, -0.26, -20.3, -136.93] comebackG = [-35.77, -31.02, -41.3, -3.69, -19.95, -164.44] mc = MyCobot("/dev/ttyAMA0", 1000000) pump(0) time.sleep(1) while True: try: mc.set_color(255, 255, 255) mc.send_angles(camera, 40) time.sleep(2) dR, dG, dB = False, False, False while True: # Clearing buffer for i in range(30): _, frame = vs.read() _, frame = vs.read() #cv2.imwrite("a.jpg", frame) hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) maskR = cv2.inRange(hsv, lR, uR) maskG = cv2.inRange(hsv, lG, uG) maskB = cv2.inRange(hsv, lB, uB) xr, yr, wr, hr, dR = findContour(maskR) xg, yg, wg, hg, dG = findContour(maskG) xb, yb, wb, hb, dB = findContour(maskB) if dR: trashAngle = trashR comebackAngle = comebackR mc.set_color(255, 0, 0) print("Detected Red Block") cv2.rectangle(frame, (xr, yr), (xr+wr, yr+hr), (0, 0, 0), 2) elif dG: trashAngle = trashG comebackAngle = comebackG mc.set_color(0, 255, 0) print("Detected Green Block") cv2.rectangle(frame, (xg, yg), (xg+wg, yg+hg), (0, 0, 0), 2) elif dB: trashAngle = trashB comebackAngle = comebackB mc.set_color(0, 0, 255) print("Detected Blue Block") cv2.rectangle(frame, (xb, yb), (xb+wb, yb+hb), (0, 0, 0), 2) cv2.imshow("frame", frame) cv2.waitKey(1) if dR or dG or dB: break for angle in pickup: mc.send_angles(angle, 40) time.sleep(1.5) pump(1) time.sleep(1) mc.send_angles(preTrash, 40) time.sleep(1) mc.send_angles(trashAngle, 40) time.sleep(3) pump(0) time.sleep(3.5) mc.send_angles(comebackAngle, 40) time.sleep(1.5) except KeyboardInterrupt: break pump(0) time.sleep(1) mc.send_angles(pickup[1], 40) time.sleep(3) mc.release_all_servos() GPIO.cleanup() vs.release() cv2.destroyAllWindows() time.sleep(1) |
Посмотрите видеоролики ниже, чтобы увидеть сортировку цветов myCobot 280 Pi в действии.
Нам хотелось бы поблагодарить компанию Elephant Robotics за присланный нам набор роботов myCobot 280 Pi с аксессуарами для ознакомления и игры.
MyCobot 280 Pi имеет гораздо больше функций. Он подходит для новичков в обучении робототехнике, а при стартовой цене 799 долларов его можно использовать для обучения от средней школы до университетского уровня. Роботизированная рука myCobot 280 Pi также может стать отличным способом научиться использовать роботов в промышленных целях. Как вы увидите из наших примеров выше, очень легко написать программы для чтения углов руки, и их также можно использовать для изучения прямой и обратной кинематики для управления роботом.
Если кому-то интересно, вы можете узнать больше и/или приобрести набор в магазине Elephant Robotics.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.