Բովանդակություն:
- Քայլ 1: Ներածություն
- Քայլ 2: Պահանջվում են նյութեր և ծրագրակազմ
- Քայլ 3. Կառուցեք Rover շասսի
- Քայլ 4. Ուլտրաձայնային հեռահար որոնիչի հավաքում
- Քայլ 5. Սխեմաներ և էլեկտրական միացումներ
- Քայլ 6. SSH և բաց CV տեղադրում
- Քայլ 7: Գործարկեք Python ծածկագիրը Rover- ի համար
Video: Raspberry Pi - ինքնավար մարսագնաց OpenCV օբյեկտների հետքերով. 7 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:46
Powered by a Raspberry Pi 3, Բաց CV օբյեկտի ճանաչում, Ուլտրաձայնային տվիչներ և ուղղորդված DC շարժիչներ: Այս արբանյակը կարող է հետևել իր պատրաստած ցանկացած օբյեկտի և շարժվել ցանկացած տեղանքով:
Քայլ 1: Ներածություն
Այս Instructables- ում մենք պատրաստվում ենք կառուցել ինքնավար Mars Rover, որը կարող է ճանաչել առարկաները և դրանք հետևել Raspberry Pi 3 -ով աշխատող Open CV ծրագրային ապահովման միջոցով ՝ տեսախցիկի սարք կամ ազնվամորու pi տեսախցիկ օգտագործելու տարբերակով: Այն նաև հագեցած է ուլտրաձայնային տվիչով, որը տեղադրված է servo- ի վրա ՝ մութ միջավայրերում, որտեղ տեսախցիկը չի աշխատի, հետևելու իր ճանապարհին: Pi- ից ստացված ազդանշաններն ուղարկվում են շարժիչի վարորդին IC (L293D), որը քշում է 4 x 150rpm DC շարժիչներ, որոնք տեղադրված են PVC խողովակներով կառուցված մարմնի վրա:
Քայլ 2: Պահանջվում են նյութեր և ծրագրակազմ
Պահանջվող նյութեր
- Raspberry Pi (ցանկացած, բայց զրոյից)
- Ազնվամորի PI տեսախցիկ կամ վեբ -տեսախցիկ
- L293D շարժիչի վարորդի IC
- Ռոբոտի անիվներ (7x4 սմ) X 4
- Geared DC Motors (150rpm) X 4
- PVC խողովակներ շասսիի համար
Պահանջվում է ծրագրակազմ
- Putեփամածիկ SSH- ի համար Pi
- Բացեք CV օբյեկտի ճանաչման համար
Քայլ 3. Կառուցեք 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 մուտքագրենք մեր ազնվամորի pi- ն `անհրաժեշտ ծրագրակազմը տեղադրելու համար: Մենք կսկսենք SSHing- ով մեր Raspberry Pi- ին: Համոզվեք, որ ձեր Pi- ն միացված է ձեր համակարգչի նույն երթուղիչին և գիտեք, որ դա ձեր երթուղիչի կողմից իրեն տրված IP հասցեն է: Այժմ, եթե Windows- ում եք, բացեք հրամանի տողը կամ PUTTY- ը և գործարկեք հետևյալ հրամանը:
Ձեր 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- ի համար
Ստեղծեք 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
Շնորհավոր! ձեր ինքնակառավարվող ռովերը պատրաստ է: Ուլտրաձայնային սենսորների վրա հիմնված նավիգացիոն հատվածը շուտով կավարտվի, և ես կթարմացնեմ այս հրահանգը:
Շնորհակալություն կարդալու համար:
Խորհուրդ ենք տալիս:
Switch-Adapt Խաղալիքներ. Աստիճաններ բարձրանալու հետքերով խաղալիք `7 քայլ
Խաղալիքների հարմարեցումը բացում է նոր ուղիներ և հարմարեցված լուծումներ, որոնք թույլ են տալիս սահմանափակ շարժունակությամբ կամ զարգացման արատներով երեխաներին ինքնուրույն շփվել խաղալիքների հետ: Շատ դեպքերում այն երեխաները, ովքեր պահանջում են հարմարեցված խաղալիքներ, չեն կարողանում մտնել
Oyոյստիկով կառավարվող անվասայլակ ՝ խոչընդոտների հետքերով. 3 քայլ (նկարներով)
Stոյստիկով վերահսկվող անվասայլակ `խոչընդոտների հետքերով Basedոյսթիկի տեղաշարժի հիման վրա շարժիչները սայլակով կշարժվեն ցանկացած չորս ուղղություններով և յուրաքանչյուրի արագությամբ
Օբյեկտների վրա հիմնված ծրագրավորում. Օբյեկտների ստեղծում Ուսուցման/դասավանդման մեթոդ/տեխնիկա ՝ օգտագործելով ձևի բռունցք. 5 քայլ
Օբյեկտների վրա հիմնված ծրագրավորում. Օբյեկտների ստեղծում Ուսուցման/դասավանդման մեթոդ/տեխնիկա Shape Puncher- ի օգտագործմամբ. Սա միջոց է, որը թույլ է տալիս նրանց պատկերացնել և տեսնել դասերից օբյեկտների ստեղծման գործընթացը: Մասեր .1. EkTools 2 դյույմ մեծ դակիչ; ամուր ձևերն ամենալավն են: 2. Թղթի կտոր կամ գ
Օբյեկտների վրա հիմնված ծրագրավորում. Օբյեկտների ստեղծում Ուսուցման/ուսուցման մեթոդ/տեխնիկա Մկրատների միջոցով. 5 քայլ
Օբյեկտների վրա հիմնված ծրագրավորում. Օբյեկտների ստեղծում Ուսուցման/ուսուցման մեթոդ/տեխնիկա Մկրատների օգտագործմամբ. Սա միջոց է, որը թույլ է տալիս նրանց պատկերացնել և տեսնել դասերից օբյեկտների ստեղծման գործընթացը: Մասեր. 1. Մկրատ (ցանկացած տեսակի կանի): 2. Թուղթ կամ թղթի կտոր: 3. Մարկեր
Sոդիչ PCB հետքերով `5 քայլ
Sոդիչ PCB հետքերի վրա. Երբևէ կարիք զգացե՞լ եք բաղադրիչը միացնել արդեն ավարտված PCB- ին, կամ ցանկացե՞լ եք շտկել կոտրված հետքը կամ նույնիսկ խաղային վերահսկիչի նման մի բան: Դե ահա թե ինչպես