Съдържание:
- Стъпка 1: Въведение
- Стъпка 2: Необходими материали и софтуер
- Стъпка 3: Изграждане на шасито на Rover
- Стъпка 4: Изграждане на ултразвуков далекомер
- Стъпка 5: Схеми и електрически връзки
- Стъпка 6: Инсталиране на SSH и Open CV
- Стъпка 7: Стартирайте кода на Python за Rover
Видео: Raspberry Pi - Автономен марсоход с проследяване на обекти OpenCV: 7 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
Захранва се от Raspberry Pi 3, разпознаване на обекти с отворен CV, ултразвукови сензори и мотори с постоянен ток. Този марсоход може да проследява всеки обект, за който е обучен, и да се движи по всякакъв терен.
Стъпка 1: Въведение
В тази инструкция ще изградим автономен марсоход, който може да разпознава обекти и да ги проследява с помощта на софтуера Open CV, работещ на Raspberry Pi 3 с възможност за използване на уеб камера или оригинална малинова pi камера. Той също така е оборудван с ултразвуков сензор, монтиран на серво, за проследяване на пътя му в тъмна среда, където камерата не работи. Сигналите, получени от Pi, се изпращат към IC драйвера на двигателя (L293D), който задвижва 4 x 150 rPM DC двигателя, монтирани върху тяло, изградено с PVC тръби.
Стъпка 2: Необходими материали и софтуер
Необходими материали
- Raspberry Pi (Всички, но нула)
- Малина PI камера или уеб камера
- L293D драйвер на двигателя IC
- Роботни колела (7x4 см) X 4
- Редуктори за постоянен ток (150 об / мин) X 4
- PVC тръби за шаси
Изисква се софтуер
- Шпакловка за SSH ing Pi
- Отворете CV за разпознаване на обекти
Стъпка 3: Изграждане на шасито на Rover
За да изградите това шаси от PVC, ще ви трябва
- 2 X 8"
- 2 X 4"
- 4 Т-образни съединения
Подредете PVC тръбите в стълбищна структура и ги поставете в Т-образни връзки. Можете да използвате PVC уплътнителя, за да направите фугите още по -здрави.
Двигателите с постоянен ток са свързани с шасито от PVC тръби с помощта на скоби и след това колелата са свързани с двигателите с помощта на винтове.
Стъпка 4: Изграждане на ултразвуков далекомер
Ултразвуковият далекомер е изграден с помощта на HC-SR04 ултразвуков сензор, свързан с микро серво мотор. Кабелите са предварително свързани с ултразвуковия сензор, преди да се поставят в пластмасовия корпус, който е свързан към серво мотора чрез винтове.
Стъпка 5: Схеми и електрически връзки
Моля, направете електрическите връзки съгласно приложената електрическа схема.
Стъпка 6: Инсталиране на SSH и Open CV
Сега трябва да SSH в нашия малинов pi, за да инсталираме необходимия софтуер. Ще започнем със SSHing към нашия Raspberry Pi. Уверете се, че вашият Pi е свързан към същия рутер като вашия компютър и знаете, че IP адресът му е присвоен от вашия рутер. Сега отворете командния ред или PUTTY, ако сте в Windows и изпълнете следната команда.
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
Създайте 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
Поздравления! вашият самоуправляващ се марсоход е готов! Частта за навигация, базирана на ултразвуков сензор, ще бъде завършена скоро и ще актуализирам тази инструкция.
Благодаря за четенето!
Препоръчано:
Micro: bit MU Vision Sensor - Проследяване на обекти: 7 стъпки
Micro: bit MU Vision Sensor - Object Tracking: Така че в тази инструкция ще започнем да програмираме Smart Car, който изграждаме в тази инструкция, и че сме инсталирали сензор за MU зрение в тази инструкция. Ние ще програмираме микро: малко с просто проследяване на обекти, така че
Проследяване на обекти на Opencv: 3 стъпки
Проследяване на обекти на Opencv: Откриването на движещи се обекти е техника, използвана в компютърното зрение и обработка на изображения. Няколко последователни кадъра от видео се сравняват по различни методи, за да се определи дали е открит движещ се обект. Откриването на движещи се обекти е използвано за wi
Проследяване и проследяване за малки магазини: 9 стъпки (със снимки)
Проследяване и следене за малки магазини: Това е система, създадена за малки магазини, която трябва да се монтира на електронни велосипеди или електронни тротинетки за доставки на къси разстояния, например пекарна, която иска да доставя сладкиши. Какво означава Track and Trace? Проследяване и проследяване е система, използвана от ca
Проследяване на обекти въз основа на откриване на цвят: 10 стъпки
Проследяване на обекти въз основа на откриване на цвят: История Направих този проект, за да науча обработката на изображения с помощта на Raspberry PI и отворена автобиография. За да направя този проект по -интересен, използвах два сервомотора SG90 и монтирам камера върху него. Един двигател, използван за хоризонтално движение, и втори двигател, използван за вертикално
Плъзгач за камера за проследяване на обекти с ротационна ос. 3D отпечатано и вградено в контролера за DC двигател на RoboClaw и Arduino: 5 стъпки (със снимки)
Плъзгач за камера за проследяване на обекти с ротационна ос. 3D отпечатано и изградено върху RoboClaw DC моторния контролер и Arduino: Този проект е един от любимите ми проекти, откакто съчетах интереса си от създаването на видео с DIY. Винаги съм гледал и исках да подражавам на тези кинематографични кадри във филми, където камера се движи по екрана, докато се движи, за да проследи