Բովանդակություն:

Raspberry Pi - ինքնավար մարսագնաց OpenCV օբյեկտների հետքերով. 7 քայլ (նկարներով)
Raspberry Pi - ինքնավար մարսագնաց OpenCV օբյեկտների հետքերով. 7 քայլ (նկարներով)

Video: Raspberry Pi - ինքնավար մարսագնաց OpenCV օբյեկտների հետքերով. 7 քայլ (նկարներով)

Video: Raspberry Pi - ինքնավար մարսագնաց OpenCV օբյեկտների հետքերով. 7 քայլ (նկարներով)
Video: 10 Best Raspberry pi projects of the year 2022! 2024, Նոյեմբեր
Anonim
Raspberry Pi - ինքնավար մարսագնաց OpenCV օբյեկտների հետագծմամբ
Raspberry Pi - ինքնավար մարսագնաց OpenCV օբյեկտների հետագծմամբ

Powered by a Raspberry Pi 3, Բաց CV օբյեկտի ճանաչում, Ուլտրաձայնային տվիչներ և ուղղորդված DC շարժիչներ: Այս արբանյակը կարող է հետևել իր պատրաստած ցանկացած օբյեկտի և շարժվել ցանկացած տեղանքով:

Քայլ 1: Ներածություն

Image
Image
Պահանջվում են նյութեր և ծրագրակազմ
Պահանջվում են նյութեր և ծրագրակազմ

Այս Instructables- ում մենք պատրաստվում ենք կառուցել ինքնավար Mars Rover, որը կարող է ճանաչել առարկաները և դրանք հետևել Raspberry Pi 3 -ով աշխատող Open CV ծրագրային ապահովման միջոցով ՝ տեսախցիկի սարք կամ ազնվամորու pi տեսախցիկ օգտագործելու տարբերակով: Այն նաև հագեցած է ուլտրաձայնային տվիչով, որը տեղադրված է servo- ի վրա ՝ մութ միջավայրերում, որտեղ տեսախցիկը չի աշխատի, հետևելու իր ճանապարհին: Pi- ից ստացված ազդանշաններն ուղարկվում են շարժիչի վարորդին IC (L293D), որը քշում է 4 x 150rpm DC շարժիչներ, որոնք տեղադրված են PVC խողովակներով կառուցված մարմնի վրա:

Քայլ 2: Պահանջվում են նյութեր և ծրագրակազմ

Պահանջվում են նյութեր և ծրագրակազմ
Պահանջվում են նյութեր և ծրագրակազմ
Պահանջվում են նյութեր և ծրագրակազմ
Պահանջվում են նյութեր և ծրագրակազմ

Պահանջվող նյութեր

  1. Raspberry Pi (ցանկացած, բայց զրոյից)
  2. Ազնվամորի PI տեսախցիկ կամ վեբ -տեսախցիկ
  3. L293D շարժիչի վարորդի IC
  4. Ռոբոտի անիվներ (7x4 սմ) X 4
  5. Geared DC Motors (150rpm) X 4
  6. PVC խողովակներ շասսիի համար

Պահանջվում է ծրագրակազմ

  1. Putեփամածիկ SSH- ի համար Pi
  2. Բացեք CV օբյեկտի ճանաչման համար

Քայլ 3. Կառուցեք Rover շասսի

Rover շասսիի կառուցում
Rover շասսիի կառուցում
Rover շասսիի կառուցում
Rover շասսիի կառուցում
Rover շասսիի կառուցում
Rover շասսիի կառուցում

Այս PVC շասսին կառուցելու համար ձեզ հարկավոր կլինի

  • 2 X 8"
  • 2 X 4"
  • 4 T- հոդեր

ՊՎՔ խողովակները դասավորեք սանդուղքի նման կառուցվածքով և տեղադրեք T- հոդերի մեջ: Դուք կարող եք օգտագործել PVC կնիքը `հոդերն ավելի ամուր դարձնելու համար:

Հաստատված DC շարժիչները միացված են PVC խողովակի շասսիի հետ սեղմակների միջոցով, այնուհետև պտուտակներով անիվները միացված են շարժիչների հետ:

Քայլ 4. Ուլտրաձայնային հեռահար որոնիչի հավաքում

Շենքի ուլտրաձայնային հեռահար որոնիչի հավաքում
Շենքի ուլտրաձայնային հեռահար որոնիչի հավաքում

Ուլտրաձայնային տիրույթի հայտնաբերման հավաքը կառուցված է HC-SR04 ուլտրաձայնային տվիչի միջոցով, որը միացված է Micro Servo շարժիչով: Մալուխները նախապես միացված են ուլտրաձայնային տվիչի հետ նախքան պլաստմասե պատյան մեջ դնելը, որը պտուտակների միջոցով միացված է servo շարժիչին:

Քայլ 5. Սխեմաներ և էլեկտրական միացումներ

Սխեմատիկա և էլեկտրական միացումներ
Սխեմատիկա և էլեկտրական միացումներ
Սխեմատիկա և էլեկտրական միացումներ
Սխեմատիկա և էլեկտրական միացումներ

Խնդրում ենք կատարել էլեկտրական միացումները `կցված սխեմայի համաձայն:

Քայլ 6. SSH և բաց CV տեղադրում

SSH և բաց CV տեղադրում
SSH և բաց CV տեղադրում

Այժմ, մենք պետք է SSH մուտքագրենք մեր ազնվամորի pi- ն `անհրաժեշտ ծրագրակազմը տեղադրելու համար: Մենք կսկսենք SSHing- ով մեր Raspberry Pi- ին: Համոզվեք, որ ձեր Pi- ն միացված է ձեր համակարգչի նույն երթուղիչին և գիտեք, որ դա ձեր երթուղիչի կողմից իրեն տրված IP հասցեն է: Այժմ, եթե Windows- ում եք, բացեք հրամանի տողը կամ PUTTY- ը և գործարկեք հետևյալ հրամանը:

ssh [email protected]

Ձեր Pi- ի IP- ն կարող է տարբեր լինել, իմը ՝ 192.168.1.6:

Այժմ մուտքագրեք ձեր կանխադրված գաղտնաբառը `« ազնվամորի »

Այժմ, երբ SSH- ն մտցրել եք ձեր Pi- ում, եկեք սկսենք թարմացնել այս հրամանով:

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

Եկեք հիմա տեղադրենք մշակողի համար անհրաժեշտ գործիքները, sudo apt-get install build-important cmake pkg-config

Հաջորդը, մենք պետք է տեղադրենք պատկերի I/O փաթեթներ, որոնք կօգնեն մեր 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 տեղադրել 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 տեղադրված են, մենք պետք է թարմացնենք մեր pr/. Պրոֆիլը ՝ ներքևում ներառելով հետևյալ տողերը

արտահանել 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 = ԹՈLEԱՐԿՈ \Մ / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_CAMILES -3

Վերջապես կազմեք OpenCV

կատարել -j4

Այս հրամանի գործարկումն ավարտելուց հետո: Մնում է տեղադրել այն:

sudo make config

sudo ldconfig

Քայլ 7: Գործարկեք Python ծածկագիրը Rover- ի համար

Image
Image

Ստեղծեք tracker.py անունով Python ֆայլ և դրան ավելացրեք հետևյալ ծածկագիրը:

sudo nano tracker.py

ծածկագիր:-

#ASAR ծրագիր

#Այս ծրագիրը հետևում է կարմիր գնդակին և հրահանգում ազնվամորի պիին հետևել դրան: ներմուծել 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) #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.putput (22, 1) IO.output (13, 0)#Right Motor backward IO.output (15, 1) def ryt (): IO.putput (21, 0) #Left Motor backward IO.output (22, 1) IO.output (13, 1)#Right Motor forward IO.output (15, 0) def lft (): IO.output (21, 1) #Left Motor forward IO. ելք (22, 0) IO.output (13, 0)#Աջ շարժիչ հետամնաց IO. ելք (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 => օգտագործել առաջին վեբ -տեսախցիկը # ցույց տալ բնօրինակ բանաձևի տպում «կանխադրված լուծում =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_WIDTH)) + "x" + փող (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 (capWebCAMPR. MA_AME)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)), եթե capWebcam.isOpened () == Սխալ. # ստուգեք, թե արդյոք VideoCapture օբյեկտը հաջողությամբ տպվել է տեսախցիկին "սխալ. capWebcam- ը հաջողությամբ մուտք չի գործել / n / n" # եթե ոչ, տպեք սխալի հաղորդագրությունը std out os.system («դադար») # դադար, մինչև օգտվողը սեղմի ստեղնը, որպեսզի օգտվողը տեսնի սխալի հաղորդագրության վերադարձը # և ելքը (որը ծրագրից դուրս է գալիս) # ավարտը, եթե cv2.waitKey (1)! = 27 և capWebcam.isOpened (): # մինչև Esc ստեղնը սեղմելը կամ տեսախցիկի կապը չկորցնելը blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # կարդալ հաջորդ շրջանակը, եթե ոչ blnFrameReadSuccessfully or imgOriginal is No: («դադար») # դադար, մինչև օգտվողը սեղմի ստեղնը, որպեսզի օգտվողը կարողանա տեսնել սխալի ընդմիջում # ելք, երբ օղակը (որը դուրս է գալիս ծրագրից) # ավարտ, եթե 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.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, ներս / 4) # լրացրեք փոփոխական շրջանակներ մշակված պատկերի բոլոր շրջանակներով, եթե շրջանակներ ոչ մեկը չէ. կոտրել x, y և շառավիղը տպել «գնդակի դիրքը x =" + str (x) + ", y =" + str (y) + ", շառավղ =" + str (շառավիղ) # տպել գնդակի դիրքը և շառավիղը obRadius = int (շառավիղ) xAxis = int (x) եթե obRadius> 0 & obRadius100 & xAxis180: print («Շարժվում ենք աջ») ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # գծել փոքր կանաչ շրջանակ հայտնաբերված օբյեկտի cv2- ի կենտրոնում: շրջան (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 ()#հեռացնել պատուհանները հիշողությունից վերադարձնել ###################### #################################################### ############################# եթե _name_ == "_main_": main ()

Այժմ մնում է միայն ծրագիրը գործարկել

python tracker.py

Շնորհավոր! ձեր ինքնակառավարվող ռովերը պատրաստ է: Ուլտրաձայնային սենսորների վրա հիմնված նավիգացիոն հատվածը շուտով կավարտվի, և ես կթարմացնեմ այս հրահանգը:

Շնորհակալություն կարդալու համար:

Խորհուրդ ենք տալիս: