Мазмуну:

Raspberry Pi - Автономдуу Mars Rover OpenCV объектилерин көзөмөлдөө менен: 7 кадам (сүрөттөр менен)
Raspberry Pi - Автономдуу Mars Rover OpenCV объектилерин көзөмөлдөө менен: 7 кадам (сүрөттөр менен)

Video: Raspberry Pi - Автономдуу Mars Rover OpenCV объектилерин көзөмөлдөө менен: 7 кадам (сүрөттөр менен)

Video: Raspberry Pi - Автономдуу Mars Rover OpenCV объектилерин көзөмөлдөө менен: 7 кадам (сүрөттөр менен)
Video: НЕЙРОСЕТЬ своими руками за 10 минут на Python 2024, Ноябрь
Anonim
Raspberry Pi - Автономдуу Марс Ровер OpenCV объектилерин көзөмөлдөө менен
Raspberry Pi - Автономдуу Марс Ровер OpenCV объектилерин көзөмөлдөө менен

Raspberry Pi 3, Open CV объектилерин таануу, УЗИ сенсорлору жана редуктурлуу DC моторлору менен иштейт. Бул ровер үйрөтүлгөн нерселерди көзөмөлдөп, каалаган жерде кыймылдай алат.

1 -кадам: Киришүү

Image
Image
Материалдар жана программалык камсыздоо талап кылынат
Материалдар жана программалык камсыздоо талап кылынат

Бул көрсөтмөлөрдө биз Raspberry Pi 3те иштеген CV Open программасын колдонуп, объектилерди тааный турган жана көз салуучу Автономдуу Марс Роверди курганы жатабыз, анда веб -камера же түп малина pi камерасы бар. Ошондой эле камера иштебей турган караңгы чөйрөдө анын жолун көзөмөлдөө үчүн сервого орнотулган УЗИ сенсору менен жабдылган. Piдан келген сигналдар мотор айдоочусу ICге жөнөтүлөт (L293D), ал PVC түтүктөр менен курулган корпуска орнотулган 4 x 150RPM DC кыймылдаткычтарын айдайт.

2 -кадам: материалдар жана программалык камсыздоо талап кылынат

Материалдар жана программалык камсыздоо талап кылынат
Материалдар жана программалык камсыздоо талап кылынат
Материалдар жана программалык камсыздоо талап кылынат
Материалдар жана программалык камсыздоо талап кылынат

Керектүү материалдар

  1. Raspberry Pi (нөлдөн башка)
  2. Raspberry PI камерасы же веб -камера
  3. L293D мотор айдоочу IC
  4. Робот дөңгөлөктөрү (7х4 см) X 4
  5. Тиштүү DC Motors (150RPM) X 4
  6. Шасси үчүн PVC түтүктөр

Программалык камсыздоо талап кылынат

  1. SSHди пи үчүн шпаклевка
  2. Объектти таануу үчүн резюме ачуу

3 -кадам: Rover шассиин куруу

Rover шассиин куруу
Rover шассиин куруу
Rover шассиин куруу
Rover шассиин куруу
Rover шассиин куруу
Rover шассиин куруу

Бул PVC шассини куруу үчүн сизге керек болот

  • 2 X 8"
  • 2 X 4"
  • 4 T-муундары

ПВХ түтүктөрүн тепкичке окшош структурага жайгаштырыңыз жана Т-муундарга салыңыз. Сиз муундарды ого бетер күчөтүү үчүн ПВХ герметикасын колдонсоңуз болот.

Тиштүү DC моторлору PVC түтүк шасси менен кыскычтарды колдонуп, анан дөңгөлөктөр моторлор менен бурамалар аркылуу туташат.

4 -кадам: Ultrasonic Rangefinder Ассамблеясын куруу

УЗИ диапазонунун курулушу
УЗИ диапазонунун курулушу

УЗИ диапазонун табуу куралы Micro Servo мотору менен байланышкан HC-SR04 Ultrasonic сенсорунун жардамы менен курулган. Кабелдер бурама аркылуу серво моторго туташкан пластикалык корпуска салардан мурун УЗИ сенсору менен алдын ала туташат.

5 -кадам: Схемалар жана электр байланыштары

Схемалар жана электр байланыштары
Схемалар жана электр байланыштары
Схемалар жана электр байланыштары
Схемалар жана электр байланыштары

Сураныч, тиркелген схемага ылайык электр байланыштарын жасаңыз.

6 -кадам: SSH жана ачык резюме орнотуу

SSH жана ачык резюме орнотуу
SSH жана ачык резюме орнотуу

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

ssh [email protected]

Сиздин Пиңиздин IPи башкача болушу мүмкүн, меники 192.168.1.6.

Эми, демейки сырсөзүңүздү киргизиңиз - "малина"

Эми, сиздин пиңизге SSH'ди киргизгениңиз үчүн, бул буйрук менен жаңыртуудан баштайлы.

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

Келгиле, азыр керектүү иштеп чыгуучу куралдарды орнотолу, sudo apt-get install-essential cmake pkg-config орнотуу

Андан кийин, биздин Piге дисктен ар кандай сүрөт форматтарын алууга жардам бере турган кээ бир сүрөт I/O пакеттерин орнотушубуз керек.

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 source /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 = ЧЫГАРУУ / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_contrib -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 ('/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)#Left Motor Forward IO.output (22, 0) IO.output (13, 1)#Right Motor 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. чыгаруу (22, 1) IO. чыгаруу (13, 1)#Оң мотор алга IO. чыгаруу (15, 0) def lft (): IO. чыгаруу (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)#Оң мотор IO.output (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) # show updated resolution print "updated resolution =" + str (capWebcam.get (cv2. CR_WW)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened () == False: # VideoCapture объекти веб -камерага ийгиликтүү басылганын текшериңиз "катасы: capWebcam ийгиликтүү жетилген жок / n / n" # болбосо, os.system үчүн ката билдирүүсүн басып чыгарыңыз ("пауза") # колдонуучу баскычты басмайынча тыныгуу, эгерде колдонуучу ката кайтаруу # жана функциясын (программадан чыккан) # end if if cv2.waitKey (1))! = 27 жана capWebcam.isOpened (): # Esc баскычы басылганга чейин же веб -камера байланышы жоголгонго чейин blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # кийинки кадрды blnFrameReadSuccessfully же 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, radius = тегерек # x, y, and radius print "ball position x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # print ball position жана radius obRadius = int (радиусу) xAxis = int (x) if obRadius> 0 & obRadius100 & xAxis180: print ("Оңго жылуу") ryt () elif xAxis <100: print ("Солго жылуу") lft () башка: stp () башка: 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) # терезелерди түзүү, Терезенин өлчөмү cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # үчүн WINDOW_AUTOSIZE колдонуңуз же cv2.imshow ("imgOriginal", imgOri) WINDOW_NORMAL колдонуңуз. ginal)#windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#эстутум кайтаруусунан терезелерди алып салуу ##################### ###################################################### ############################## эгерде _name_ == "_main_": main ()

Эми программаны иштетүү гана калды

python tracker.py

Куттуктайм! сиздин өзү айдаган ровер даяр! Ultrasonic сенсорго негизделген багыттоо бөлүгү жакында бүтөт жана мен бул нускаманы жаңыртам.

Окуганыңыз үчүн рахмат!

Сунушталууда: