Სარჩევი:
- ნაბიჯი 1: შესავალი
- ნაბიჯი 2: საჭირო მასალები და პროგრამული უზრუნველყოფა
- ნაბიჯი 3: ავაშენოთ როვერის შასი
- ნაბიჯი 4: ულტრაბგერითი ამომრჩევლის ასამბლეის შექმნა
- ნაბიჯი 5: სქემა და ელექტრული კავშირები
- ნაბიჯი 6: SSH და ღია CV ინსტალაცია
- ნაბიჯი 7: პითონის კოდის გაშვება როვერისთვის
ვიდეო: Raspberry Pi - ავტონომიური მარს როვერი OpenCV ობიექტების თვალყურით: 7 ნაბიჯი (სურათებით)
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:17
იკვებება Raspberry Pi 3 -ით, გახსენით CV ობიექტის ამოცნობა, ულტრაბგერითი სენსორები და გადაცემული DC ძრავები. ამ როვერს შეუძლია თვალყური ადევნოს ნებისმიერ საგანს, რომლისთვისაც იგი ვარჯიშობს და გადაადგილდეს ნებისმიერ რელიეფზე.
ნაბიჯი 1: შესავალი
ამ ინსტრუქციებში ჩვენ ვაპირებთ ავაშენოთ ავტონომიური მარს როვერი, რომელსაც შეუძლია ობიექტების ამოცნობა და თვალყურის დევნება Raspberry Pi 3 – ზე გაშვებული ღია CV პროგრამული უზრუნველყოფის გამოყენებით, ვებკამერის მოწყობილობის ან ორიგინალური ჟოლოს კამერის გამოყენების შესაძლებლობის გათვალისწინებით. იგი ასევე აღჭურვილია ულტრაბგერითი სენსორით, რომელიც დამონტაჟებულია სერვოზე, რათა თვალყური ადევნოს გზას ბნელ გარემოში, სადაც კამერა არ იმუშავებს. Pi– სგან მიღებული სიგნალები იგზავნება საავტომობილო დრაივერზე IC (L293D), რომელიც ამოძრავებს 4 x 150 RPM DC ძრავებს, რომლებიც დამონტაჟებულია PVC მილებით.
ნაბიჯი 2: საჭირო მასალები და პროგრამული უზრუნველყოფა
საჭირო მასალები
- ჟოლო პი (ნებისმიერი ნულის გარდა)
- ჟოლოს PI კამერა ან ვებკამერა
- L293D ძრავის მძღოლი IC
- რობოტის ბორბლები (7x4 სმ) X 4
- გადაცემათა კოლოფი DC Motors (150rpm) X 4
- PVC მილები შასისთვის
საჭიროა პროგრამული უზრუნველყოფა
- ბოთლი SSH- ში Pi- სთვის
- გახსენით CV ობიექტების ამოცნობისთვის
ნაბიჯი 3: ავაშენოთ როვერის შასი
ამ PVC შასის ასაშენებლად დაგჭირდებათ
- 2 X 8"
- 2 X 4"
- 4 T- სახსრები
დაალაგეთ PVC მილები კიბის მსგავს სტრუქტურაში და ჩადეთ T- სახსრებში. თქვენ შეგიძლიათ გამოიყენოთ PVC sealant, რათა სახსრები კიდევ უფრო გაძლიერდეს.
გადაცემული DC ძრავები დაკავშირებულია PVC მილების შასასთან დამჭერების გამოყენებით და შემდეგ ბორბლები უკავშირდება ძრავებს ხრახნების გამოყენებით.
ნაბიჯი 4: ულტრაბგერითი ამომრჩევლის ასამბლეის შექმნა
ულტრაბგერითი დიაპაზონის მაძიებლის ასამბლეა აგებულია HC-SR04 ულტრაბგერითი სენსორის გამოყენებით, რომელიც დაკავშირებულია მიკრო სერვო ძრავასთან. კაბელები წინასწარ არის დაკავშირებული ულტრაბგერითი სენსორით პლასტმასის კორპუსში ჩასვლამდე, რომელიც დაკავშირებულია სერვო ძრავას ხრახნების საშუალებით.
ნაბიჯი 5: სქემა და ელექტრული კავშირები
გთხოვთ გააკეთოთ ელექტრული კავშირები თანდართული სქემის მიხედვით.
ნაბიჯი 6: SSH და ღია CV ინსტალაცია
ახლა, ჩვენ გვჭირდება SSH ჩვენს ჟოლოს პიში, რათა დავაინსტალიროთ საჭირო პროგრამული უზრუნველყოფა. ჩვენ დავიწყებთ SSHing– ით ჩვენს Raspberry Pi– ს. დარწმუნდით, რომ თქვენი Pi დაკავშირებულია იმავე როუტერთან, როგორც თქვენი კომპიუტერი და იცით, რომ ეს არის IP მისამართი, რომელსაც მას მიანიჭებს თქვენი როუტერი. ახლა გახსენით ბრძანების სტრიქონი ან PUTTY, თუ Windows- ზე ხართ და გაუშვით შემდეგი ბრძანება.
თქვენი Pi- ს IP შეიძლება განსხვავებული იყოს, ჩემი არის 192.168.1.6.
ახლა შეიყვანეთ თქვენი ნაგულისხმევი პაროლი - "ჟოლო"
ახლა, როდესაც თქვენ გაქვთ SSH'd თქვენს Pi- ში, დავიწყოთ ამ ბრძანების განახლებით.
sudo apt-get განახლება && sudo apt-get განახლება
მოდით დავაინსტალიროთ დეველოპერის საჭირო ინსტრუმენტები, sudo apt-get დააინსტალირეთ build-essential 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
ახლა, რომ ვირტუალური და ვირტუალური შემავსებელი დამონტაჟებულია, ჩვენ უნდა განვაახლოთ ჩვენი pr/.პროფილი, რომელიც მოიცავს შემდეგ ხაზებს ბოლოში
ექსპორტი WORKON_HOME = $ HOME/.virtualenvs ექსპორტი VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 წყარო /usr/local/bin/virtualenvwrapper.sh
შექმენით თქვენი პითონის ვირტუალური გარემო
mkvirtualenv cv -p პითონი 2
გადაერთეთ შექმნილ ვირტუალურ გარემოზე
წყარო ~/.პროფილი
სამუშაო cv
NumPy– ის ინსტალაცია
pip დააინსტალირეთ numpy
შეადგინეთ და დააინსტალირეთ OpenCV
cd ~/opencv-3.3.0/
მკდირის აშენება
cd აშენება
cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_CAMIL_Boil_3
საბოლოოდ შეადგინეთ OpenCV
გააკეთე -j4
ამ ბრძანების დასრულების შემდეგ. ყველაფერი რაც თქვენ გჭირდებათ არის დააინსტალიროთ.
sudo make config
sudo ldconfig
ნაბიჯი 7: პითონის კოდის გაშვება როვერისთვის
შექმენით პითონის ფაილი სახელწოდებით tracker.py და დაამატეთ მას შემდეგი კოდი.
sudo nano tracker.py
კოდი:-
#ASAR პროგრამა
#ეს პროგრამა თვალყურს ადევნებს წითელ ბურთს და ავალებს ჟოლოს პის დაიცვას იგი. იმპორტი sys sys.path.append ('/usr/local/lib/python2.7/საიტი-პაკეტები') იმპორტი 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. გამომავალი (22, 1) IO. გამომავალი (13, 0)#მარჯვენა ძრავის უკან IO. გამოსავალი (15, 1) def ryt (): IO.output (21, 0) #მარცხენა საავტომობილო უკან IO.output (22, 1) IO.output (13, 1)#მარჯვენა საავტომობილო ნაბიჯია IO.output (15, 0) def lft (): IO.output (21, 1)#მარცხენა ძრავის წინ IO. გამომავალი (22, 0) IO.output (13, 0)#მარჯვენა საავტომობილო ჩამორჩენილი IO. გამომავალი (15, 1) def stp (): IO.output (21, 0)#მარცხენა საავტომობილო გაჩერება IO.output (22, 0) IO.output (13, 0)#მარჯვენა საავტომობილო გაჩერება IO.output (15, 0) ############################## #################################################### ##################### def main (): capWebcam = cv2. ვიდეოჩანაწერი (0)#გამოცხადება ვიდეოჩანაწერის ობიექტი და ასოცირება ვებკამერაზე, 0 => პირველი ვებკამერის გამოყენება # ორიგინალური გარჩევადობის ჩვენება ამობეჭდვა "ნაგულისხმევი გარჩევადობა =" + სტრიქონი (capWebcam.get (cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT) cap)) + "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 ან imgOriginal არ არის: # თუ ჩარჩო წარმატებით არ იქნა წაკითხული დაბეჭდე "error: frame is not read from webcam / n" # print error message to std out os.system ("პაუზა") # პაუზა სანამ მომხმარებელი არ დააჭერს ღილაკს, რათა მომხმარებელმა ნახოს შეცდომის შეტყობინება შესვლა # გასვლა მარყუჟისას (რომელიც პროგრამიდან გამოდის) # დასასრული თუ 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). HOUGH_GRADIENT, 5, intRows / 4) # შეავსეთ ცვლადი წრეები ყველა წრეებით დამუშავებულ სურათში, თუ წრეები არ არის არცერთი: # ეს ხაზი აუცილებელია იმისათვის, რომ პროგრამა არ დაიშალოს მომდევნო ხაზზე, თუ წრეები არ იქნა ნაპოვნი IO. გამოსავალი (7, 1) წრეებში წრეებში [0]: # თითოეული წრისთვის x, y, რადიუსი = წრე # გარჩევა 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_ == "_ მთავარი_": მთავარი ()
ახლა რჩება მხოლოდ პროგრამის გაშვება
პითონის ტრეკერი. py
Გილოცავ! შენი თვითმავალი როვერი მზად არის! ულტრაბგერითი სენსორი დაფუძნებული სანავიგაციო ნაწილი მალე დასრულდება და მე განვაახლებ ამას სასწავლო.
Მადლობა წაკითხვისთვის!
გირჩევთ:
თქვენი ოთახის გადაქცევა მარს როვერზე: 5 ნაბიჯი
გადააქციე შენი ოთახიბა მარს როვერზე:
მარს როვერი ჟოლოს პიის გამოყენებით: 5 ნაბიჯი
მარს როვერი ჟოლოს Pi გამოყენებით: ძვირფასო ყველასათვის, დიდი მცოდნე, მე ყოველთვის მაინტერესებს ვიცოდე მარს როვერის შესახებ, რომელსაც აქვს 6 ბორბალი, რომელსაც შეუძლია მარსის ყველა ზედაპირზე გასვლა და დედამიწის საგნების შესწავლა. მე ასევე მინდა რამის შესწავლა ჩემს ლეპტოპზე ჯდომით. ახლა მე ვხვდები, რომ ამის გაკეთების დროა და
მარს რუმბა: 6 ნაბიჯი
Mars Roomba: ეს ინსტრუქცია გაგიძღვებათ Raspberry Pi კონტროლირებადი Roomba ვაკუუმური ბოტის მუშაობის მიმართულებით. ოპერაციული სისტემა, რომელსაც ჩვენ ვიყენებთ, არის MATLAB
ახლომდებარე ობიექტების სკანირება 3D მოდელის შესაქმნელად ARDUINO– ს გამოყენებით: 5 ნაბიჯი (სურათებით)
ახლომდებარე ობიექტების სკანირება 3D მოდელის შესაქმნელად ARDUINO– ს გამოყენებით: ეს პროექტი სპეციფიკურია ულტრაბგერითი HC-SR04 სენსორის გამოყენებით ახლომდებარე ობიექტების სკანირებისთვის. 3D მოდელის შესაქმნელად თქვენ გჭირდებათ სენსორის პერპენდიკულარული მიმართულებით გადაადგილება. შეგიძლიათ Arduino– ს პროგრამირება, რომ განგაშის სიგნალი გამოიტანოს, როდესაც სენსორი აღმოაჩენს ობიექტს
AR ობიექტების განთავსება GPS კოორდინატებზე დამატებით რეალობაში: 8 ნაბიჯი (სურათებით)
AR ობიექტების განთავსება GPS კოორდინატებში გაფართოებულ რეალობაში: ეს ინსტრუქცია აპირებს გადადგას მობილური აპლიკაციის შესაქმნელად AR ობიექტების GPS კოორდინატებზე ARkit და ARCore Unity3D გამოყენებით. მე გაგიმხელთ პროექტის შექმნისას, რომელიც გავაკეთე Mapbox– ის გამოყენებით, რაც საშუალებას გვაძლევს მონიშნოთ შეტყობინებები კონკრეტულ G