Оглавление:

Робот для отслеживания мяча: 8 шагов
Робот для отслеживания мяча: 8 шагов

Видео: Робот для отслеживания мяча: 8 шагов

Видео: Робот для отслеживания мяча: 8 шагов
Видео: Робот Boston Dynamics Spot: распаковка и полный обзор самого крутого робота в мире 2024, Июль
Anonim
Робот слежения за мячом
Робот слежения за мячом
Робот слежения за мячом
Робот слежения за мячом
Робот слежения за мячом
Робот слежения за мячом

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

ПРИМЕЧАНИЕ. Это задание на деталь, представленное в Школу информационных технологий Университета Дикин, SIT-210 Embedded Systems Development

Запасы

www.hackster.io/junejarohan/ball-tracking-robot-7a9865

Шаг 1. Введение

Вступление
Вступление

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

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

Шаг 2: Материалы и программное обеспечение, использованные в этом проекте

Материалы и программное обеспечение, использованные в этом проекте
Материалы и программное обеспечение, использованные в этом проекте
Материалы и программное обеспечение, использованные в этом проекте
Материалы и программное обеспечение, использованные в этом проекте
Материалы и программное обеспечение, использованные в этом проекте
Материалы и программное обеспечение, использованные в этом проекте

Используемые аппаратные компоненты:

  • Малина Пи (x1)
  • Модуль камеры Raspberry Pi (1 шт.)
  • Ультразвуковой датчик (x3)
  • Драйверы двигателя SparkFun Dual H-Bridge L298 (x1)
  • Двигатель постоянного тока (x1)
  • Макетная плата (x1)
  • Подключение проводов

Используемое программное обеспечение:

OpenCV

Ручные инструменты:

Python

Шаг 3: что делать?

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

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

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

Наконец, бот пытается вывести координаты мяча в центр его координатной оси. Так работает робот. Это может быть дополнительно улучшено с помощью устройства IoT, такого как фотонная частица, которое может позволить вам быть в курсе, когда объект обнаружен и что робот следует за ним, или когда робот потерял его след и теперь возвращается на базу..

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

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

Шаг 4: Схема

Image
Image
Схемы
Схемы
Схемы
Схемы

Выше я предоставил схему для своего проекта, а также печатную плату (PCB).

И вот некоторые из основных подключений, которые вам нужно сделать:

• Прежде всего, модуль камеры Raspberry Pi напрямую подключен к Raspberry Pi.

• Ультразвуковые датчики VCC подключены к общему выводу, так же как и к GND (земле), а оставшиеся два порта ультразвукового датчика подключены к контактам GPIO на Raspberry Pi.

• Двигатели подключаются с помощью H-образного моста.

• Питание осуществляется от аккумулятора.

Я также добавил видео, которое может помочь понять принцип работы ультразвукового датчика.

а также вы можете перейти по этой ссылке, если не можете найти видео выше.

Шаг 5: Как это сделать?

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

Робот находит жестко запрограммированный цвет, а затем ищет шарик этого цвета и следует за ним. Я выбрал Raspberry Pi в качестве микроконтроллера в этом проекте, потому что он позволяет нам использовать его модуль камеры и дает большую гибкость в коде, поскольку он использует язык Python, который очень удобен для пользователя, а также позволяет нам использовать библиотеку OpenCV для анализа изображений.

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

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

Наконец, бот пытается вывести координаты мяча в центр его координатной оси. Так работает робот. Это может быть дополнительно улучшено с помощью устройства IoT, такого как фотонная частица, которое может позволить вам быть в курсе, когда объект обнаружен и что робот следует за ним, или когда робот потерял его след и теперь возвращается на базу.. И для этого мы будем использовать онлайн-платформу программного обеспечения, которая соединяет устройства и позволяет им выполнять определенные действия с определенными триггерами, то есть триггерами IFTTT.

Шаг 6: Псевдокод

Псевдокод
Псевдокод

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

Шаг 7: Код

Код
Код
Код
Код
Код
Код
Код
Код

Выше приведены фрагменты кода, а ниже - подробное описание кода.

# импортируем необходимые пакеты

ИМПОРТИРУЕМ ВСЕ НЕОБХОДИМЫЕ ПАКЕТЫ

from picamera.array import PiRGBArray # Поскольку в Raspberry Pi есть проблема с разрешением, не удастся захватить кадры с помощью VideoCapture

from picamera import PiCamera import RPi. GPIO as GPIO import time import numpy as np

ТЕПЕРЬ УСТАНАВЛИВАЕМ ОБОРУДОВАНИЕ И НАЗНАЧАЕМ ПИН-коды, ПОДКЛЮЧЕННЫЕ НА МАЛИНОВОМ ПИ.

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 # Левый ультразвуковой датчик

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 # Передний ультразвуковой датчик

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 # Правый ультразвуковой датчик

GPIO_ECHO3 = 35

MOTOR1B = 18 # Левый двигатель

MOTOR1E = 22

MOTOR2B = 21 # Правый двигатель

MOTOR2E = 19

LED_PIN = 13 # Если мяч найдет, то загорится светодиод

# Установить контакты как выход и вход

GPIO.setup (GPIO_TRIGGER1, GPIO. OUT) # Запуск GPIO.setup (GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup (GPIO_TRIGGER2, GPIO. OUT) # Запуск GPIO.setup (GPIO_ECHO2, GPIO. IN) GPIO.setup (GPIO_TRIGGER3, GPIO. OUT) # Запуск GPIO.setup (GPIO_ECHO3, GPIO. IN) GPIO.setup (LED_PIN, GPIO. OUT)

# Установите для триггера значение False (Low)

GPIO.output (GPIO_TRIGGER1, False) GPIO.output (GPIO_TRIGGER2, False) GPIO.output (GPIO_TRIGGER3, False)

В ЭТОЙ ФУНКЦИИ ИСПОЛЬЗУЮТСЯ ВСЕ УЛЬТРАЗВУКОВЫЕ ДАТЧИКИ.

# Разрешить модулю урегулировать

def sonar (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # Установить контакты как выход, а вход GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Триггер GPIO.setup (GPIO_ECHO, GPIO. IN) # Эхо # Установить триггер на False (Низкий) GPIO.output (GPIO_TRIGGER, False) # Разрешить модулю установить time.sleep (0,01) # на расстоянии> 5: # Отправить импульс 10us для запуска GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. output (GPIO_TRIGGER, False) begin = time.time (), а GPIO.input (GPIO_ECHO) == 0 и time.time ()

НАСТРОЙКА ДВИГАТЕЛЕЙ ПОСТОЯННОГО ТОКА ДЛЯ РАБОТЫ С МАЛИНЫМИ

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

GPIO.setup (MOTOR2B, GPIO. OUT) GPIO.setup (MOTOR2E, GPIO. OUT)

ОПРЕДЕЛЕНИЕ ФУНКЦИЙ ДЛЯ УПРАВЛЕНИЯ РОБОТОМ И ПРИВОДА ЕГО ДВИЖЕНИЯ В РАЗНЫХ НАПРАВЛЕНИЯХ

def forward ():

GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def reverse (): GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH) def rightturn (): GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def leftturn (): GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH)

def stop ():

GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW)

ПРИНЦИП ДЕЙСТВИЯ МОДУЛЯ КАМЕРЫ И НАСТРОЙКА НАСТРОЕК

# КАМЕРНЫЙ ЗАХВАТ

# инициализировать камеру и получить ссылку на необработанный снимок камеры camera = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (camera, size = (160, 120)) # разрешить камеру к времени разогрева. сна (0,001)

СЕЙЧАС ВЫПОЛНЯЙТЕ ГЛАВНОЕ, КОГДА БОТ СЛЕДУЕТ ЗА МЯЧОМ, И ИЗБЕГАЙТЕ ЛЮБЫХ ПРЕПЯТСТВИЙ НА ПУТИ.

while (1 <10): {# расстояние от переднего ультразвукового датчика distanceC = sonar (GPIO_TRIGGER2, GPIO_ECHO2) # расстояние от правого ультразвукового датчика distanceR = sonar (GPIO_TRIGGER3, GPIO_ECHO3) # расстояние от левого ультразвукового датчика distanceL = сонар (GPIO_TRIGGER1, GPIO_ECHO1) if (distanceC = 8: rightturn () time.sleep (0,00625) stop () time.sleep (0,0125) forward () time.sleep (0,00625) stop () time.sleep (0,0125) # пока найдено == 0: leftturn () time.sleep (0,00625) elif distanceL> = 8: leftturn () time.sleep (0,00625) stop () time.sleep (0,0125) вперед () time.sleep (0,00625) stop () time.sleep (0,0125) rightturn () time.sleep (0,00625) stop () time.sleep (0,0125) else: stop () time.sleep (0,01) else: # в противном случае он двигается вперед () time.sleep (0,00625) if (distanceC> 10): # он переносит координаты шара в центр воображаемой оси камеры. if (centre_x = 20): if (centre_x0): flag = 1 leftturn () time.sleep (0.025) forward () time.sleep (0.00003125)) stop () time.sleep (0,00625) иначе: stop () time.sleep (0,01)

еще:

# Если он находит мяч и находится слишком близко, загорается светодиод. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.truncate (0) # очистить поток для подготовки к следующий кадр}

ПРОВОДИТЕ НЕОБХОДИМЫЕ ЧИСТКИ

GPIO.cleanup () # освободить все контакты GPIO

Шаг 8: внешние ссылки

Ссылка на демонстрационное видео: нажмите здесь (Youtube)

Ссылка на код на Git-hub: нажмите здесь (Git-Hub)

Рекомендуемые: