Оглавление:

Raspberry Pi - автономный марсоход с отслеживанием объектов OpenCV: 7 шагов (с изображениями)
Raspberry Pi - автономный марсоход с отслеживанием объектов OpenCV: 7 шагов (с изображениями)

Видео: Raspberry Pi - автономный марсоход с отслеживанием объектов OpenCV: 7 шагов (с изображениями)

Видео: Raspberry Pi - автономный марсоход с отслеживанием объектов OpenCV: 7 шагов (с изображениями)
Видео: Введение в визуальную одометрию 2024, Ноябрь
Anonim
Raspberry Pi - автономный марсоход с отслеживанием объектов OpenCV
Raspberry Pi - автономный марсоход с отслеживанием объектов OpenCV

Работает на Raspberry Pi 3, распознавании объектов Open CV, ультразвуковых датчиках и мотор-редукторах постоянного тока. Этот марсоход может отслеживать любой объект, для которого он обучен, и перемещаться по любой местности.

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

Image
Image
Необходимые материалы и программное обеспечение
Необходимые материалы и программное обеспечение

В этой инструкции мы собираемся построить автономный марсоход, который может распознавать объекты и отслеживать их с помощью программного обеспечения Open CV, работающего на Raspberry Pi 3, с возможностью использования веб-камеры или оригинальной камеры Raspberry Pi. Он также оснащен ультразвуковым датчиком, установленным на сервоприводе, чтобы отслеживать его путь в темноте, где камера не работает. Сигналы, полученные от Pi, отправляются на микросхему драйвера двигателя (L293D), которая управляет 4 двигателями постоянного тока по 150 об / мин, установленными на корпусе, построенном из труб из ПВХ.

Шаг 2. Необходимые материалы и программное обеспечение

Необходимые материалы и программное обеспечение
Необходимые материалы и программное обеспечение
Необходимые материалы и программное обеспечение
Необходимые материалы и программное обеспечение

Необходимые материалы

  1. Raspberry Pi (любой, кроме нуля)
  2. Raspberry PI Camera или веб-камера
  3. ИС драйвера двигателя L293D
  4. Колеса робота (7x4 см) X 4
  5. Мотор-редукторы постоянного тока (150 об / мин) X 4
  6. Трубы ПВХ для шасси

Требуется программное обеспечение

  1. Замазка для SSH в Pi
  2. Открыть резюме для распознавания объектов

Шаг 3: Сборка шасси вездехода

Сборка шасси вездехода
Сборка шасси вездехода
Сборка шасси вездехода
Сборка шасси вездехода
Сборка шасси вездехода
Сборка шасси вездехода

Чтобы построить это шасси из ПВХ, вам понадобится

  • 2 X 8 дюймов
  • 2 X 4 дюйма
  • 4 тройника

Уложите трубы из ПВХ в виде лестницы и вставьте в тройники. Вы можете использовать ПВХ-герметик, чтобы сделать стыки еще прочнее.

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

Шаг 4: Сборка ультразвукового дальномера

Сборка ультразвукового дальномера
Сборка ультразвукового дальномера

Узел ультразвукового дальномера построен с использованием ультразвукового датчика HC-SR04, соединенного с микро-серводвигателем. Кабели предварительно соединяются с ультразвуковым датчиком перед помещением в пластиковый корпус, который винтами крепится к серводвигателю.

Шаг 5: Схема и электрические соединения

Схема и электрические соединения
Схема и электрические соединения
Схемы и электрические соединения
Схемы и электрические соединения

Выполните электрические подключения согласно прилагаемой принципиальной схеме.

Шаг 6: SSH и установка Open CV

Установка SSH и Open CV
Установка SSH и Open CV

Теперь нам нужно подключиться к нашему raspberry pi по SSH, чтобы установить необходимое программное обеспечение. Мы начнем с SSHing для нашего Raspberry Pi. Убедитесь, что ваш Pi подключен к тому же маршрутизатору, что и ваш компьютер, и вы знаете, что его IP-адрес назначен ему вашим маршрутизатором. Теперь откройте командную строку или PUTTY, если вы работаете в Windows, и выполните следующую команду.

ssh [email protected]

Ваш IP-адрес Pi может быть другим, мой - 192.168.1.6.

Теперь введите пароль по умолчанию - «малина».

Теперь, когда у вас есть SSH в вашем Pi, давайте начнем с обновления с помощью этой команды.

sudo apt-get update && sudo apt-get upgrade

Давайте сейчас установим необходимые инструменты разработчика, sudo apt-get install build-essential cmake pkg-config

Затем нам нужно установить несколько пакетов ввода-вывода изображений, которые помогут нашему Pi извлекать различные форматы изображений с диска.

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Теперь несколько пакетов для получения видео, потоковой передачи в реальном времени и оптимизации производительности OpenCV.

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get установить libxvidcore-dev libx264-dev

sudo apt-get install libgtk2.0-dev libgtk-3-dev

sudo apt-get install libatlas-base-dev gfortran

Нам также необходимо установить файлы заголовков Python 2.7 и Python 3, чтобы мы могли скомпилировать OpenCV с привязками Python.

sudo apt-get install python2.7-dev python3-dev

Скачивание исходного кода OpenCV

cd ~

wget -O opencv.zip

разархивировать opencv.zip

Скачивание репозитория opencv_contrib

wget -O opencv_contrib.zip

распаковать opencv_contrib.zip

Также рекомендуется использовать виртуальную среду для установки OpenCV.

sudo pip установить virtualenv virtualenvwrapper

sudo rm -rf ~ /.cache / pip

Теперь, когда были установлены virtualenv и virtualenvwrapper, нам нужно обновить наш ~ /.profile, включив в него следующие строки внизу

экспорт WORKON_HOME = $ HOME /.virtualenvs экспорт VIRTUALENVWRAPPER_PYTHON = / usr / bin / python3 source /usr/local/bin/virtualenvwrapper.sh

Создайте свою виртуальную среду Python

mkvirtualenv CV -p python2

перейти в созданную виртуальную среду

источник ~ /.profile

workon cv

Установка NumPy

pip install numpy

Скомпилировать и установить OpenCV

компакт-диск ~ / opencv-3.3.0 /

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX = / usr / local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~ / opencv_contrib-3.3.0 / modules / -D BUESILD_INSTALL_EXAMPLESILD = ON_CV_contrib-3.3.0 / modules / -DPLESILD_BUESILD_OINSTALL_EXAMPLESILD = ON

Наконец скомпилируйте OpenCV

make -j4

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

sudo make config

sudo ldconfig

Шаг 7. Запуск кода Python для Rover

Image
Image

Создайте файл Python с именем tracker.py и добавьте в него следующий код.

sudo nano tracker.py

код:-

Программа #ASAR

# Эта программа отслеживает красный шар и инструктирует Raspberry Pi следовать за ним. import sys sys.path.append ('/ usr / local / lib / python2.7 / site-packages') import cv2 import numpy as np import os import RPi. GPIO as IO IO.setmode (IO. BOARD) IO.setup (7, IO. OUT) IO.setup (15, IO. OUT) IO.setup (13, IO. OUT) IO.setup (21, IO. OUT) IO.setup (22, IO. OUT) def fwd (): IO.output (21, 1) # Left Motor Forward IO.output (22, 0) IO.output (13, 1) # Правый двигатель Forward IO.output (15, 0) def bac (): IO.output (21, 0) # Левый мотор назад IO.output (22, 1) IO.output (13, 0) # Правый мотор назад IO.output (15, 1) def ryt (): IO.output (21, 0) # Левый двигатель назад IO.output (22, 1) IO.output (13, 1) # Правый двигатель вперед IO.output (15, 0) def lft (): IO.output (21, 1) # Левый двигатель вперед IO.output (22, 0) IO.output (13, 0) # Правый двигатель в обратном направлении IO.output (15, 1) def stp (): IO.output (21, 0) # Остановка левого двигателя IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ########################### ########################################################################## #################### def main (): capWebcam = cv2. VideoCapture (0) # объявить Объект VideoCapture и связать его с веб-камерой, 0 => использовать 1-ю веб-камеру # показать исходное разрешение print "default Resolution =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) capWebcam.set (cv2. CAP_PROP_FRAME_WIDTH, 320.0) # измените разрешение на 320x240 для более быстрой обработки capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # покажите обновленное разрешение print "обновленное разрешение =" + str (capWebTHRAME_FRAME)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened () == False: # проверьте, был ли объект VideoCapture связан с веб-камерой успешно print "error: capWebcam не удалось получить доступ / n / n" # если нет, вывести сообщение об ошибке в std out os.system ("pause") # приостановить, пока пользователь не нажмет клавишу, чтобы пользователь мог увидеть сообщение об ошибке return # и выйти из функции (которая завершает программу) # end if while cv2.waitKey (1)! = 27 и capWebcam.isOpened (): # пока не будет нажата клавиша Esc или не будет потеряно соединение с веб-камерой blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # читать следующий кадр, если не blnFrameReadSuccessfully или imgOriginal is None: # если кадр не был прочитан успешно print "error: frame not read from webcam / n" # вывод сообщения об ошибке в std out os.system ("pause") # пауза, пока пользователь не нажмет клавишу, чтобы пользователь мог увидеть сообщение об ошибке break # выйти из цикла while (который завершает программу) # end if imgHSV = cv2.cvtColor (imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange (imgHSV, np.array ([0, 135, 135]), np.array ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.array ([165, 135, 135]), np. array ([179, 255, 255])) imgThresh = cv2.add (imgThreshLow, imgThreshHigh) imgThresh = cv2. GaussianBlur (imgThresh, (3, 3), 2) imgThresh = cv2.dilate (imgThresh, np.ones ((5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape круги = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # заполняем кружки переменных всеми кружками в обработанном изображении, если кружки не None: # эта строка необходима для предотвращения сбоя программы на следующей строке, если кругов не найдено IO.output (7, 1) для круга в кругах [0]: # для каждого круга x, y, radius = circle # вывести x, y и радиус print "положение шара x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # распечатать положение шара и радиус obRadius = int (radius) xAxis = int (x) if obRadius> 0 & obRadius100 & xAxis180: print ("Движение вправо") ryt () elif xAxis <100: print ("Движение влево") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # рисуем маленький зеленый кружок в центре обнаруженного объекта cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # рисуем красный кружок вокруг обнаруженного объекта # end for # end if else: IO.output (7, 0) cv2. namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # создаем окна используйте WINDOW_AUTOSIZE для фиксированного размера окна cv2. namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # или используйте WINDOW_NORMAL, чтобы разрешить изменение размера окна cv2.imshow ("imgOriginal", imgOri ginal) # показать окна cv2.imshow ("imgThresh", imgThresh) # end while cv2.destroyAllWindows () # удалить окна из памяти return #################### #################################################################################################### ########################### if _name_ == "_main_": main ()

Теперь осталось только запустить программу.

python tracker.py

Поздравляю! Ваш беспилотный вездеход готов! Часть навигации на основе ультразвукового датчика будет скоро завершена, и я обновлю это руководство.

Спасибо за прочтение!

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