Оглавление:
- Шаг 1. Введение
- Шаг 2. Необходимые материалы и программное обеспечение
- Шаг 3: Сборка шасси вездехода
- Шаг 4: Сборка ультразвукового дальномера
- Шаг 5: Схема и электрические соединения
- Шаг 6: SSH и установка Open CV
- Шаг 7. Запуск кода Python для Rover
Видео: Raspberry Pi - автономный марсоход с отслеживанием объектов OpenCV: 7 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:50
Работает на Raspberry Pi 3, распознавании объектов Open CV, ультразвуковых датчиках и мотор-редукторах постоянного тока. Этот марсоход может отслеживать любой объект, для которого он обучен, и перемещаться по любой местности.
Шаг 1. Введение
В этой инструкции мы собираемся построить автономный марсоход, который может распознавать объекты и отслеживать их с помощью программного обеспечения Open CV, работающего на Raspberry Pi 3, с возможностью использования веб-камеры или оригинальной камеры Raspberry Pi. Он также оснащен ультразвуковым датчиком, установленным на сервоприводе, чтобы отслеживать его путь в темноте, где камера не работает. Сигналы, полученные от Pi, отправляются на микросхему драйвера двигателя (L293D), которая управляет 4 двигателями постоянного тока по 150 об / мин, установленными на корпусе, построенном из труб из ПВХ.
Шаг 2. Необходимые материалы и программное обеспечение
Необходимые материалы
- Raspberry Pi (любой, кроме нуля)
- Raspberry PI Camera или веб-камера
- ИС драйвера двигателя L293D
- Колеса робота (7x4 см) X 4
- Мотор-редукторы постоянного тока (150 об / мин) X 4
- Трубы ПВХ для шасси
Требуется программное обеспечение
- Замазка для SSH в Pi
- Открыть резюме для распознавания объектов
Шаг 3: Сборка шасси вездехода
Чтобы построить это шасси из ПВХ, вам понадобится
- 2 X 8 дюймов
- 2 X 4 дюйма
- 4 тройника
Уложите трубы из ПВХ в виде лестницы и вставьте в тройники. Вы можете использовать ПВХ-герметик, чтобы сделать стыки еще прочнее.
Мотор-редукторы постоянного тока соединяются с шасси из ПВХ-труб с помощью зажимов, а затем колеса соединяются с двигателями с помощью винтов.
Шаг 4: Сборка ультразвукового дальномера
Узел ультразвукового дальномера построен с использованием ультразвукового датчика HC-SR04, соединенного с микро-серводвигателем. Кабели предварительно соединяются с ультразвуковым датчиком перед помещением в пластиковый корпус, который винтами крепится к серводвигателю.
Шаг 5: Схема и электрические соединения
Выполните электрические подключения согласно прилагаемой принципиальной схеме.
Шаг 6: SSH и установка Open CV
Теперь нам нужно подключиться к нашему raspberry pi по SSH, чтобы установить необходимое программное обеспечение. Мы начнем с SSHing для нашего Raspberry Pi. Убедитесь, что ваш Pi подключен к тому же маршрутизатору, что и ваш компьютер, и вы знаете, что его IP-адрес назначен ему вашим маршрутизатором. Теперь откройте командную строку или PUTTY, если вы работаете в Windows, и выполните следующую команду.
Ваш 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
Создайте файл 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
Поздравляю! Ваш беспилотный вездеход готов! Часть навигации на основе ультразвукового датчика будет скоро завершена, и я обновлю это руководство.
Спасибо за прочтение!
Рекомендуемые:
Отслеживание объектов OpenCV: 3 шага
Отслеживание объектов Opencv: обнаружение движущихся объектов - это метод, используемый в компьютерном зрении и обработке изображений. Несколько последовательных кадров из видео сравниваются различными методами, чтобы определить, обнаружен ли какой-либо движущийся объект. Обнаружение движущихся объектов использовалось для
Марсоход с использованием Raspberry Pi: 5 шагов
Марсоход с использованием Raspberry Pi: Дорогие все великие ученики, мне всегда любопытно узнать о марсоходе, имеющем 6 колес, который может перемещаться по всей поверхности Марса и исследовать объекты с Земли. Я также хочу исследовать это, сидя на своем ноутбуке. Итак, теперь я думаю, что пришло время сделать это и
Роботы для Хеллоуина с отслеживанием лица и обнаружением улыбки: 8 шагов (с изображениями)
Слежение за лицом и обнаружение улыбки Роботы Хэллоуина: приближается Хэллоуин! Решили построить что-нибудь крутое. Познакомьтесь с роботами Ghosty и Skully. Они могут следить за вашим лицом, и они знают, когда вы улыбаетесь, чтобы смеяться вместе с вами! Этот проект - еще один пример использования приложения iRobbie, которое преобразует iPhone в
Защищенный робот для наблюдения за корпусом с дистанционным отслеживанием: 7 шагов (с изображениями)
Защищенный робот для наблюдения за корпусом с дистанционным отслеживанием: Введение: Итак, это был проект, который я изначально хотел начать и завершить еще в 2016 году, однако благодаря работе и множеству других вещей я только что смог начать и завершить этот проект в новый год 2018! На это ушло около 3 недель
Робот-попрошайничество с отслеживанием лица и управлением с помощью контроллера Xbox - Arduino: 9 шагов (с изображениями)
Робот-попрошайничество с отслеживанием лица и управлением с помощью контроллера Xbox - Arduino: Мы собираемся сделать робота-попрошайку. Этот робот будет пытаться рассердить или привлечь внимание проходящих мимо людей. Он обнаружит их лица и попытается выстрелить в них лазером. Если вы дадите роботу монетку, он споет песню и станцует. Роботу понадобится