- Требуемое оборудование:
- Требования к программированию:
- Настройка обработки на Raspberry Pi:
- Принципиальная электрическая схема:
- Программа отслеживания Raspberry Pi Ball:
- Работа робота слежения за шариками Raspberry Pi:
Сфера робототехники, искусственного интеллекта и машинного обучения стремительно развивается, и в ближайшем будущем она обязательно изменит образ жизни человечества. Считается, что роботы понимают реальный мир и взаимодействуют с ним с помощью датчиков и машинного обучения. Распознавание изображений - это один из популярных способов, с помощью которых, как думают, роботы понимают объекты, глядя на реальный мир через камеру, как это делаем мы. В этом проекте позвольте использовать мощность Raspberry Pi для создания робота, который может отслеживать мяч и следовать за ним, как роботы, играющие в футбол.
OpenCV - очень известный инструмент с открытым исходным кодом, который используется для обработки изображений, но в этом руководстве для простоты мы используем среду Processing IDE. Поскольку обработка для ARM также выпустила библиотеку GPIO для обработки, нам больше не придется переключаться между python и обработкой для работы с Raspberry Pi. Звучит круто, правда? Итак, приступим.
Требуемое оборудование:
- Raspberry Pi
- Модуль камеры с ленточным кабелем
- Шасси робота
- Мотор-редукторы с колесом
- Драйвер двигателя L293D
- Внешний аккумулятор или любой другой портативный источник питания
Требования к программированию:
- Монитор или другой дисплей для Raspberry pi
- Клавиатура или мышь для Pi
- Обработка программного обеспечения ARM
Примечание: во время программирования обязательно подключать дисплей к Pi через провода, потому что только тогда можно будет просматривать видео с камеры.
Настройка обработки на Raspberry Pi:
Как было сказано ранее, для программирования Raspberry Pi мы будем использовать среду обработки, а не стандартный способ использования python. Итак, выполните следующие действия:
Шаг 1: - Подключите Raspberry Pi к монитору, клавиатуре и мыши и включите его.
Шаг 2: - Убедитесь, что ваш Pi подключен к активному интернет-соединению, потому что мы собираемся загрузить несколько вещей.
Шаг 3: - Нажмите «Обработка ARM», чтобы загрузить среду разработки для Raspberry Pi. Загрузка будет в виде ZIP-файла.
Шаг 4: - После загрузки извлеките файлы из папки ZIP в желаемый каталог. Я просто извлек его на свой рабочий стол.
Шаг 5: - Теперь откройте извлеченную папку и щелкните файл с именем processing. Должно открыться окно, как показано ниже.
Шаг 6: - Это среда, в которой мы будем вводить наши коды. Для людей, которые знакомы с Arduino, не удивляйтесь. ДА, IDE действительно похожа на Arduino, как и программа.
Шаг 7: - Нам нужны две библиотеки для работы нашей следующей программы, для установки просто нажмите Sketch -> Import Library -> Add Library . Откроется следующее диалоговое окно.
Шаг 8: - Используйте верхнее левое текстовое поле для поиска Raspberry Pi и нажмите Enter. Результат поиска должен выглядеть примерно так.
Шаг 9: - Найдите библиотеки с именами «GL Video» и «Hardware I / O» и нажмите «Установить», чтобы установить их. Убедитесь, что вы установили обе библиотеки.
Шаг 10: - В зависимости от вашего Интернета установка займет несколько минут. После этого мы готовы к обработке программного обеспечения.
Принципиальная электрическая схема:
Принципиальная схема этого проекта отслеживания мяча Raspberry Pi показана ниже.
Как видите, схема включает в себя камеру PI, модуль драйвера двигателя и пару двигателей, подключенных к Raspberry pi. Вся схема питается от мобильного блока питания (представленного батареей AAA в схеме выше).
Поскольку детали контактов не упоминаются на Raspberry Pi, нам необходимо проверить контакты, используя изображение ниже.
Для управления двигателями нам понадобятся четыре штифта (A, B, A, B). Эти четыре контакта подключены к GPIO14,4,17 и 18 соответственно. Оранжевый и белый провод вместе образуют соединение для одного двигателя. Итак, у нас есть две такие пары на два мотора.
Двигатели подключены к модулю драйвера двигателя L293D, как показано на рисунке, а модуль драйвера питается от блока питания. Убедитесь, что земля блока питания подключена к земле Raspberry Pi, только тогда ваше соединение будет работать.
На этом мы закончили с нашим аппаратным подключением, давайте вернемся к нашей среде обработки и начнем программировать, чтобы научить нашего робота отслеживать мяч.
Программа отслеживания Raspberry Pi Ball:
Полная Программа обработки данного проекта приведена в конце этой страницы, которую вы непосредственно используете. Чуть ниже я объяснил работу кода, чтобы вы могли использовать его для других подобных проектов.
Концепция программы очень проста. Хотя цель проекта - отслеживать мяч, на самом деле мы не собираемся этого делать. Мы просто собираемся идентифицировать мяч по его цвету. Как мы все знаем, видео - это не что иное, как непрерывные кадры изображений. Итак, мы берем каждую картинку и разбиваем ее на пиксели. Затем мы сравниваем цвет каждого пикселя с цветом шара; если совпадение найдено, то мы можем сказать, что нашли мяч. С помощью этой информации мы также можем определить положение шара (цвет пикселя) на экране. Если положение крайнее левое, мы перемещаем робота вправо, если положение крайнее правое, мы перемещаем робота влево, так что положение пикселя всегда остается в центре экрана. Вы можете посмотреть видео Дэниела Шиффмана с помощью компьютерного зрения, чтобы получить четкое представление.
Как всегда, мы начинаем с импорта двух загружаемых библиотек. Это можно сделать с помощью следующих двух строк. Библиотека аппаратного ввода-вывода используется для доступа к контактам GPIO PI непосредственно из среды обработки, библиотека glvideo используется для доступа к модулю камеры Raspberry Pi.
import processing.io. *; import gohai.glvideo. *;
Внутри функции настройки мы инициализируем выходные контакты для управления двигателем, а также получаем видео с пи-камеры и устанавливаем его размер в окне размером 320 * 240.
пустая настройка () {размер (320, 240, P2D); видео = новый GLCapture (это); video.start (); trackColor = цвет (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Пустота ничья , как бесконечный цикл код внутри этого цикла будет выполнять до тех пор, как программа завершается. Если источник камеры доступен, мы читаем видео, выходящее из него
void draw () {фон (0); если (video.available ()) {video.read (); }}
Затем начинаем разбивать видеокадр на пиксели. Каждый пиксель имеет значение красного, зеленого и синего цветов. Эти значения хранятся в переменных r1, g1 и b1.
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * ширина видео; // Какой текущий цвет? CurrentColor = video.pixels; float r1 = красный (currentColor); float g1 = зеленый (currentColor); float b1 = синий (currentColor);
Чтобы изначально определить цвет шара, мы должны щелкнуть по цвету. После щелчка цвет шара будет сохранен в переменной trackColour .
void mousePressed () {// Сохранение цвета в месте щелчка мыши в переменной trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Когда у нас есть цвет трека и текущий цвет, мы должны их сравнить. В этом сравнении используется функция dist. Он проверяет, насколько текущий цвет близок к цвету дорожки.
float d = dist (r1, g1, b1, r2, g2, b2);
Для точного совпадения значение dist будет равно нулю. Итак, если значение dist меньше указанного значения (мировой рекорд), то мы предполагаем, что мы нашли цвет дорожки. Затем мы получаем местоположение этого пикселя и сохраняем его в переменной ближайшего X и ближайшего Y, чтобы найти местоположение мяча.
если (d <worldRecord) {worldRecord = d; closestX = x; closestY = y; }
Мы также рисуем эллипс вокруг найденного цвета, чтобы указать, что цвет был найден. Значение позиции также печатается на консоли, это очень поможет при отладке.
if (worldRecord <10) {// Рисуем круг в отслеживаемой пиксельной заливке (trackColor); strokeWeight (4.0); ход (0); эллипс (closestX, closestY, 16, 16); println (closestX, closestY);
Наконец, мы можем сравнить положение ближайшего X и самого близкого Y и настроить двигатели таким образом, чтобы цвет попадал в центр экрана. Приведенный ниже код используется для поворота робота вправо, так как положение цвета X оказалось в левой части экрана (<140).
если (closestX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); задержка (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println («Поверните направо»); }
Точно так же мы можем проверить положение X и Y, чтобы управлять двигателями в нужном направлении. Как всегда, вы можете найти полную программу внизу страницы.
Работа робота слежения за шариками Raspberry Pi:
Когда вы будете готовы с оборудованием и программированием, самое время повеселиться. Прежде чем тестировать нашего бота на земле, мы должны убедиться, что все работает нормально. Подключите Pi к монитору и запустите код обработки. Вы должны увидеть видеопоток в небольшом окне. Теперь поместите мяч в рамку и нажмите на него, чтобы научить робота отслеживать этот конкретный цвет. Теперь перемещайте мяч по экрану, и вы должны заметить, что колеса вращаются.
Если все работает как положено, отпустите бота на землю и начинайте с ним играть. Для наилучшего результата убедитесь, что комната равномерно освещена. Полная работа проекта показана на видео ниже. Надеюсь, вы поняли проект и вам понравилось создавать что-то подобное. Если у вас есть какие-либо проблемы, не стесняйтесь размещать их в разделе комментариев ниже или помогать.