Мазмұны:

Raspberry Pi - Автономды Mars Rover OpenCV нысандарын бақылау: 7 қадам (суреттермен)
Raspberry Pi - Автономды Mars Rover OpenCV нысандарын бақылау: 7 қадам (суреттермен)

Бейне: Raspberry Pi - Автономды Mars Rover OpenCV нысандарын бақылау: 7 қадам (суреттермен)

Бейне: Raspberry Pi - Автономды Mars Rover OpenCV нысандарын бақылау: 7 қадам (суреттермен)
Бейне: Малина в стиле киберпанк | Hi-Tech 2024, Қараша
Anonim
Raspberry Pi - OpenCV объектілерін қадағалауы бар автономды Mars Rover
Raspberry Pi - OpenCV объектілерін қадағалауы бар автономды Mars Rover

Raspberry Pi 3, ашық резюме объектілерін тану, ультрадыбыстық датчиктер мен берілісті тұрақты ток қозғалтқыштарымен жұмыс істейді. Бұл ровер үйретілген кез келген нысанды бақылай алады және кез келген рельефте қозғала алады.

1 -қадам: Кіріспе

Image
Image
Қажетті материалдар мен бағдарламалық қамтамасыз ету
Қажетті материалдар мен бағдарламалық қамтамасыз ету

Бұл нұсқаулықта біз Raspberry Pi 3 -те жұмыс істейтін Open CV бағдарламалық жасақтамасын қолдана отырып, объектілерді тануға және оларды бақылай алатын Автономды Марс Роверін құрғалы отырмыз. Ол сонымен қатар камера жұмыс істемейтін қараңғы ортада жолды бақылау үшін сервоға орнатылған ультрадыбыстық сенсормен жабдықталған. Пи -ден алынған сигналдар ПВХ құбырлармен салынған корпусқа орнатылған 4 x 150RPM тұрақты ток қозғалтқыштарын басқаратын IC (L293D) драйверіне жіберіледі.

2 -қадам: материалдар мен бағдарламалық қамтамасыз ету қажет

Қажетті материалдар мен бағдарламалық қамтамасыз ету
Қажетті материалдар мен бағдарламалық қамтамасыз ету
Қажетті материалдар мен бағдарламалық қамтамасыз ету
Қажетті материалдар мен бағдарламалық қамтамасыз ету

Қажетті материалдар

  1. Raspberry Pi (нөлден басқа)
  2. Raspberry PI камерасы немесе веб -камера
  3. L293D мотор драйвері IC
  4. Робот дөңгелектері (7х4 см) X 4
  5. Тісті доңғалақты қозғалтқыштар (150 айн / мин) X 4
  6. Шасси үшін ПВХ құбырлары

Бағдарламалық қамтамасыз ету қажет

  1. SSH -ге арналған плита
  2. Нысанды тану үшін түйіндемені ашыңыз

3 -қадам: Rover шассиін құру

Rover шассиінің құрылысы
Rover шассиінің құрылысы
Rover шассиінің құрылысы
Rover шассиінің құрылысы
Rover шассиінің құрылысы
Rover шассиінің құрылысы

ПВХ шассиін жасау үшін сізге қажет

  • 2 X 8 «
  • 2 X 4 «
  • 4 Т-буындары

ПВХ құбырларын баспалдақ тәрізді етіп орналастырыңыз және Т-қосылыстарына салыңыз. ПВХ тығыздағышты буындарды одан әрі нығайту үшін қолдануға болады.

Редукторлы тұрақты ток қозғалтқыштары ПВХ құбыр шассиімен қысқыштар арқылы, содан кейін дөңгелектер қозғалтқыштармен бұрандалармен қосылады.

4 -қадам: Ультрадыбыстық диапазонды құрастыру

Ультрадыбыстық диапазонды құрастыру
Ультрадыбыстық диапазонды құрастыру

Ультрадыбыстық диапазонды жинау микросерво қозғалтқышына қосылған HC-SR04 ультрадыбыстық сенсордың көмегімен жасалған. Кабельдер сервоприводкаға бұрандалар арқылы қосылған пластикалық корпусқа салмас бұрын ультрадыбыстық датчикпен алдын ала қосылады.

5 -қадам: схемалар мен электрлік қосылыстар

Схемалар мен электрлік қосылыстар
Схемалар мен электрлік қосылыстар
Схемалар мен электрлік қосылыстар
Схемалар мен электрлік қосылыстар

Қосылған схемаға сәйкес электр қосылымдарын жасаңыз.

6 -қадам: SSH және ашық түйіндемені орнату

SSH және ашық түйіндемені орнату
SSH және ашық түйіндемені орнату

Енді біз қажетті бағдарламалық жасақтаманы орнату үшін таңқурай пи -ге SSH енгізуіміз керек. Біз SSHing -тен Raspberry Pi -ге бастаймыз. Сіздің Pi компьютеріңізбен бірдей маршрутизаторға қосылғанын және оның маршрутизатор оған тағайындалған IP мекенжайын білетініне көз жеткізіңіз. Енді Windows жүйесінде болсаңыз, пәрмен жолын немесе PUTTY ашыңыз және келесі пәрменді іске қосыңыз.

ssh [email protected]

Сіздің Pi IP мекенжайы басқаша болуы мүмкін, менікі 192.168.1.6.

Енді әдепкі құпия сөзді енгізіңіз - «таңқурай»

Енді сіздің Pi -ге SSH қосылғандықтан, осы пәрменді жаңартудан бастайық.

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

Енді қажетті әзірлеуші құралдарын орнатайық, sudo apt-get install build-essential cmake pkg-config орнатыңыз

Әрі қарай, бізге Pi -ге дискіден әр түрлі кескін форматтарын алуға көмектесетін бірнеше сурет енгізу -шығару пакеттерін орнату керек.

sudo apt-get libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev орнатыңыз

Енді бейнені алуға, тікелей трансляциялауға және OpenCV жұмысын оңтайландыруға арналған кейбір пакеттер

sudo apt-get libavcodec-dev libavformat-dev libswscale-dev libv4l-dev орнатыңыз

sudo apt-get libxvidcore-dev libx264-dev орнатыңыз

sudo apt-get libgtk2.0-dev libgtk-3-dev орнатыңыз

sudo apt-get libatlas-base-dev gfortran орнатыңыз

Біз сондай -ақ Python 2.7 және Python 3 тақырып файлдарын орнатуымыз керек, сондықтан біз OpenCV -ті питон байланыстарымен құрастыра аламыз.

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 орнату numpy

OpenCV құрастыру және орнату

cd ~/opencv-3.3.0/

mkdir құрастыру

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. DAM/3.3.0/

Соңында OpenCV құрастырыңыз

жасау -j4

Бұл пәрмен аяқталғаннан кейін іске қосылады. Сізге оны орнату ғана қажет.

sudo конфигурациясын жасаңыз

sudo ldconfig

7 -қадам: Rover үшін Python кодын іске қосу

Image
Image

Tracker.py деп аталатын Python файлын жасаңыз және оған келесі кодты қосыңыз.

sudo nano tracker.py

код:-

#ASAR бағдарламасы

#Бұл бағдарлама қызыл допты қадағалап, таңқурай пиіне оны орындауды нұсқайды. syspath.append syspath.append импорттау (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. шығысы (21, 1)#Сол жақ мотор Алға IO.шығу (22, 0) IO.шығу (13, 1)#Оң жақ мотор Алға IO.шығу (15, 0) def bac (): IO. шығыс (21, 0)#Сол жақ мотор IO. шығысы (22, 1) IO. шығысы (13, 0)#Оң мотор артқа IO. шығысы (15, 1) def ryt (): IO. шығысы (21, 0) #Сол мотор артқа IO.шығу (22, 1) IO.шығу (13, 1)#Оңға қозғалтқыш алға IO.шығу (15, 0) def lft (): IO.шығу (21, 1)#Сол мотор алға IO.шығу (22, 0) IO.шығу (13, 0)#Оң мотор артқа IO.шығу (15, 1) def stp (): IO.шығу (21, 0)#Сол мотор тоқтауы IO.шығу (22, 0) IO. шығысы (13, 0)#Оң мотор тоқтауы IO. шығысы (15, 0) ############################ ############################################################################################################################### ##################### def main (): capWebcam = cv2. VideoCapture (0)#жариялау VideoCapture объектісі және веб -камерамен байланыстыру, 0 => 1 -ші веб -камераны қолданыңыз # түпнұсқалық рұқсатты көрсетіңіз «әдепкі ажыратымдылық =» + 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) # жаңартылған ажыратымдылықты көрсету «жаңартылған ажыратымдылық =» + str (capWebcam.get (cv2_FRAME)) + «x» + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), егер capWebcam.isOpened () == False: # VideoCapture объектісінің веб -камерамен байланыстырылғанын тексеріңіз «қате: capWebcam сәтті қол жеткізілмеген / n / n» # олай болмаса, қате туралы хабарламаны os.system -ге шығару («кідірту»))! = 27 және capWebcam.isOpened (): # Esc пернесі басылғанша немесе веб -камера байланысы үзілгенше blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # blnFrameReadSuccessful болмаса imgOriginal болмаса келесі кадрды оқыңыз: # егер кадр сәтті оқылмаса «қате: кадр веб -камерадан оқылмаған / n» # os.system -ді шығару үшін басып шығару қатесі туралы хабарды басып шығарыңыз («кідірту») пайдаланушы пернені басқанға дейін # пауза, сондықтан пайдаланушы қате туралы хабарламаны көре алады # цикл кезінде шығу (ол бағдарламадан шығады) # 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. массив ([179, 255, 255])) imgThresh = cv2.add (imgThreshLow, imgThreshHigh) imgThresh = cv2. GaussianBlur (imgThresh, (3, 3), 2) imgThresh = cv2.dilate (imgThresh (np) 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) + «, радиус =» + str (радиус) # баспа шарының орналасуы мен радиусы obRadius = int (радиусы) 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), радиусына кішкентай жасыл шеңбер сызыңыз, (0, 0, 255), 3) # анықталатын объектінің айналасында # қызыл шеңбер сызыңыз, cv2.namedWindow («imgThresh», cv2. WINDOW_AUTOSIZE) # бекітілген терезе өлшемі үшін WINDOW_AUTOSIZE пайдаланыңыз # немесе терезенің өлшемін өзгертуге window_normal пайдаланыңыз cv2.imshow («imgOriginal», imgOri ginal)#терезелерді көрсету cv2.imshow («imgThresh», imgThresh)#end while cv2.destroyAllWindows ()#терезелерді жадтан қайтару ###################### ############################################################################################################################### ############################## егер _ аты_ == «_басты_»: main ()

Енді бағдарламаны іске қосу ғана қалды

python tracker.py

Құттықтаймын! өздігінен жүретін ровер дайын! Ультрадыбыстық сенсорға негізделген навигация бөлігі жақында аяқталады және мен бұл нұсқаулықты жаңартамын.

Оқығаныңыз үшін рахмет!

Ұсынылған: