Съдържание:

Raspberry Pi - Автономен марсоход с проследяване на обекти OpenCV: 7 стъпки (със снимки)
Raspberry Pi - Автономен марсоход с проследяване на обекти OpenCV: 7 стъпки (със снимки)

Видео: Raspberry Pi - Автономен марсоход с проследяване на обекти OpenCV: 7 стъпки (със снимки)

Видео: Raspberry Pi - Автономен марсоход с проследяване на обекти OpenCV: 7 стъпки (със снимки)
Видео: Пульты управления для плеера на Raspberry Pi 2024, Ноември
Anonim
Raspberry Pi - Автономен марсоход с OpenCV проследяване на обекти
Raspberry Pi - Автономен марсоход с OpenCV проследяване на обекти

Захранва се от Raspberry Pi 3, разпознаване на обекти с отворен CV, ултразвукови сензори и мотори с постоянен ток. Този марсоход може да проследява всеки обект, за който е обучен, и да се движи по всякакъв терен.

Стъпка 1: Въведение

Image
Image
Необходими материали и софтуер
Необходими материали и софтуер

В тази инструкция ще изградим автономен марсоход, който може да разпознава обекти и да ги проследява с помощта на софтуера Open CV, работещ на Raspberry Pi 3 с възможност за използване на уеб камера или оригинална малинова pi камера. Той също така е оборудван с ултразвуков сензор, монтиран на серво, за проследяване на пътя му в тъмна среда, където камерата не работи. Сигналите, получени от Pi, се изпращат към IC драйвера на двигателя (L293D), който задвижва 4 x 150 rPM DC двигателя, монтирани върху тяло, изградено с PVC тръби.

Стъпка 2: Необходими материали и софтуер

Необходими материали и софтуер
Необходими материали и софтуер
Необходими материали и софтуер
Необходими материали и софтуер

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

  1. Raspberry Pi (Всички, но нула)
  2. Малина PI камера или уеб камера
  3. L293D драйвер на двигателя IC
  4. Роботни колела (7x4 см) X 4
  5. Редуктори за постоянен ток (150 об / мин) X 4
  6. PVC тръби за шаси

Изисква се софтуер

  1. Шпакловка за SSH ing Pi
  2. Отворете CV за разпознаване на обекти

Стъпка 3: Изграждане на шасито на Rover

Изграждане на шасито на Rover
Изграждане на шасито на Rover
Изграждане на шасито на Rover
Изграждане на шасито на Rover
Изграждане на шасито на Rover
Изграждане на шасито на Rover

За да изградите това шаси от PVC, ще ви трябва

  • 2 X 8"
  • 2 X 4"
  • 4 Т-образни съединения

Подредете PVC тръбите в стълбищна структура и ги поставете в Т-образни връзки. Можете да използвате PVC уплътнителя, за да направите фугите още по -здрави.

Двигателите с постоянен ток са свързани с шасито от PVC тръби с помощта на скоби и след това колелата са свързани с двигателите с помощта на винтове.

Стъпка 4: Изграждане на ултразвуков далекомер

Изграждане на ултразвуков далекомер
Изграждане на ултразвуков далекомер

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

Стъпка 5: Схеми и електрически връзки

Схеми и електрически връзки
Схеми и електрически връзки
Схеми и електрически връзки
Схеми и електрически връзки

Моля, направете електрическите връзки съгласно приложената електрическа схема.

Стъпка 6: Инсталиране на SSH и Open CV

Инсталиране на SSH и Open CV
Инсталиране на SSH и Open CV

Сега трябва да SSH в нашия малинов pi, за да инсталираме необходимия софтуер. Ще започнем със SSHing към нашия Raspberry Pi. Уверете се, че вашият Pi е свързан към същия рутер като вашия компютър и знаете, че IP адресът му е присвоен от вашия рутер. Сега отворете командния ред или PUTTY, ако сте в Windows и изпълнете следната команда.

ssh [email protected]

IP на вашия Pi може да е различен, моят е 192.168.1.6.

Сега въведете паролата си по подразбиране - "малинка"

Сега, когато имате SSH'd във вашия Pi, Нека започнем с актуализиране с тази команда.

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

Нека сега инсталираме необходимите инструменти за програмисти, sudo apt-get install build-essential cmake pkg-config

След това трябва да инсталираме някои I/O пакети с изображения, които ще помогнат на нашия 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 install 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 източник /usr/local/bin/virtualenvwrapper.sh

Създайте вашата виртуална среда на python

mkvirtualenv cv -p python2

преминете към създадената виртуална среда

източник ~/.профил

Workon cv

Инсталиране на NumPy

pip install numpy

Компилирайте и инсталирайте OpenCV

cd ~/opencv-3.3.0/

mkdir build

cd компилация

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/BOD = 3.3.0

Накрая компилирайте OpenCV

направи -j4

След като тази команда приключи изпълнението. Всичко, което трябва да направите, е да го инсталирате.

sudo направи конфигурация

sudo ldconfig

Стъпка 7: Стартирайте кода на Python за Rover

Image
Image

Създайте Python файл, наречен tracker.py и добавете следния код към него.

sudo nano tracker.py

код:-

#ASAR програма

#Тази програма проследява червена топка и инструктира малиново пи да я следва. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') импортиране cv2 внос numpy като np импорт os импортиране RPi. GPIO като 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)#IO. Iout. Lout отляво на двигателя (22, 0) IO.output (13, 1)#IO. Iout. Interput (15, 0) def bac (): IO.output (21, 0)#Ляв двигател назад IO.output (22, 1) IO.output (13, 0) #Right Motor IO.outout (15, 1) def ryt (): IO.output (21, 0) #Ляв двигател назад IO.изход (22, 1) IO.изход (13, 1)#Десен двигател напред IO.изход (15, 0) def lft (): IO.изход (21, 1)#Ляв двигател напред IO.output (22, 0) IO.output (13, 0) #Right Motor IO.output (15, 1) def stp (): IO.output (21, 0) #Left Motor stop IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ########################## ################################################# ###################### def main (): capWebcam = cv2. VideoCapture (0)#декларирайте VideoCapture обект и свързване с уеб камера, 0 => използвайте първа уеб камера # покажете първоначалната разделителна способност печат "разделителна способност по подразбиране =" + 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) # показване на отпечатана актуализирана разделителна способност "updated resolution =" + str (capWebcam.get (cvPCCR))) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), ако capWebcam.isOpened () == False: # проверете дали обектът VideoCapture е свързан с уеб камерата успешно отпечатва "грешка: capWebcam не е достъпна успешно / n / n" # ако не, отпечатайте съобщение за грешка до std out os.system ("пауза") # пауза, докато потребителят не натисне клавиш, за да може потребителят да види съобщение за грешка return # и функция за излизане (която излиза от програмата) # end if while cv2.waitKey (1)! = 27 и capWebcam.isOpened (): # докато не се натисне клавиш Esc или връзката с уеб камера не се прекъсне blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # прочетете следващия кадър, ако не blnFrameReadSuccessfully или imgOriginal е Няма: # ако кадърът не беше прочетен успешно отпечатайте "грешка: кадърът не се чете от уеб камерата / n" # съобщение за грешка при отпечатване към std out os.system ("пауза") # пауза, докато потребителят натисне клавиш, за да може потребителят да види съобщение за грешка прекъсване # изход докато цикъл (който излиза от програмата) # край, ако imgHSV = cv2.cvtColor (imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange (imgHSV, np.array ([0, 135, 135]), np.raray ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.array ([165, 135, 135]), np. масив ([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) # попълнете променливи кръгове с всички кръгове в обработеното изображение, ако кръгове не е Няма: # този ред е необходим, за да не се срине програмата на следващия ред, ако не са намерени кръгове IO.output (7, 1) за кръг в кръгове [0]: # за всеки кръг x, y, радиус = кръг # пробийте x, y и радиус отпечатайте "позиция на топката x =" + str (x) + ", y =" + str (y) + ", radius =" + str (радиус) # позиция на топката за печат и радиус obRadius = int (радиус) xAxis = int (x), ако obRadius> 0 & obRadius100 & xAxis180: print ("Moving Right") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # нарисувайте малък зелен кръг в центъра на открития обект cv2.circle (imgOriginal, (x, y), радиус, (0, 0, 255), 3) # нарисувайте червен кръг около открития обект # край за # край, ако иначе: 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)#край докато cv2.destroyAllWindows ()#премахване на прозорци от паметта връщане #################### ################################################# ############################ if _name_ == "_main_": main ()

Сега остава само да стартирате програмата

python tracker.py

Поздравления! вашият самоуправляващ се марсоход е готов! Частта за навигация, базирана на ултразвуков сензор, ще бъде завършена скоро и ще актуализирам тази инструкция.

Благодаря за четенето!

Препоръчано: