Სარჩევი:

ბურთის მიმდევარი რობოტი: 8 ნაბიჯი
ბურთის მიმდევარი რობოტი: 8 ნაბიჯი

ვიდეო: ბურთის მიმდევარი რობოტი: 8 ნაბიჯი

ვიდეო: ბურთის მიმდევარი რობოტი: 8 ნაბიჯი
ვიდეო: ლუკა და მარიამი 2024, ივლისი
Anonim
ბურთის თვალთვალის რობოტი
ბურთის თვალთვალის რობოტი
ბურთის თვალთვალის რობოტი
ბურთის თვალთვალის რობოტი
ბურთის თვალთვალის რობოტი
ბურთის თვალთვალის რობოტი

ამრიგად, მე გეტყვით, თუ როგორ უნდა გააკეთოთ ბურთის თვალთვალის რობოტი, რომელიც არის რობოტი, რომელიც ამოიცნობს ბურთს და მიჰყვება მას. ეს არის ძირითადად ავტომატური მეთვალყურეობის ტექნიკა, რომელიც შეიძლება გამოყენებულ იქნას თანამედროვე მსოფლიოში. მოდით, უბრალოდ შევეშვათ და დავიწყოთ მშენებლობა …

შენიშვნა: ეს არის ნაწილობრივი დავალება, რომელიც გადაეცა დიაკინის უნივერსიტეტს, IT სკოლას, SIT-210 Embedded Systems Development

მარაგები

www.hackster.io/junejarohan/ball-tracking-robot-7a9865

ნაბიჯი 1: შესავალი

შესავალი
შესავალი

დღევანდელი მეთვალყურეობა არის მთავარი მინუსი, რომელიც მდგომარეობს იმაში, რომ ის ემყარება ადამიანების ჩართულობას, რომელიც, როგორც ყველამ ვიცით, შეიძლება ადვილად გადაიტანოს ყურადღების გადატანა, ამიტომ ჩვენთვის უაღრესად მნიშვნელოვანი იყო სისტემის აღმოჩენა, რომელსაც შეუძლია რეგიონების მონიტორინგი ავტონომიურად და განუწყვეტლივ. ჩვენ ასევე გვინდა გამოვავლინოთ საზიზღარი ან არასასურველი საგნები და საფრთხეები გადაწყვეტილებების მიღებისას და შესაბამისად ვუპასუხოთ. ასე რომ, ობიექტის თვალყურის დევნება ინტელექტუალური სისტემებისა და კომპიუტერების გამოყენებით არის აუცილებელი და გადამწყვეტი ავტომატური მეთვალყურეობის მისაღწევად.

ნებისმიერ გარე სათვალთვალო სისტემას უნდა შეეძლოს თვალყური ადევნოს მის ხედვის არეზე მოძრავ ობიექტებს, დაალაგოს ეს ობიექტები და აღმოაჩინოს მათი ზოგიერთი აქტივობა. მე შევიმუშავე მეთოდი ამ ობიექტების თვალყურის დევნისა და კლასიფიკაციისთვის რეალისტურ სცენარებში. ობიექტების თვალყურის დევნება ერთ კამერაში ხორციელდება ფონის გამოკლების გამოყენებით, რასაც მოჰყვება რეგიონის კორესპონდენცია. ეს ითვალისწინებს მრავალრიცხოვან მინიშნებებს, მათ შორის ჩამკეტის ყუთების სიჩქარეს, ზომასა და მანძილს.

ნაბიჯი 2: მასალები და რბილი ნაწარმი, რომლებიც გამოიყენება ამ პროექტში

ამ პროექტში გამოყენებული მასალები და რბილი ნაწარმი
ამ პროექტში გამოყენებული მასალები და რბილი ნაწარმი
ამ პროექტში გამოყენებული მასალები და რბილი ნაწარმი
ამ პროექტში გამოყენებული მასალები და რბილი ნაწარმი
ამ პროექტში გამოყენებული მასალები და რბილი ნაწარმი
ამ პროექტში გამოყენებული მასალები და რბილი ნაწარმი

გამოყენებული აპარატურის კომპონენტები:

  • ჟოლო Pi (x1)
  • Raspberry Pi კამერის მოდული (x1)
  • ულტრაბგერითი სენსორი (x3)
  • SparkFun Dual H-Bridge ძრავის მძღოლები L298 (x1)
  • DC ძრავა (x1)
  • პურის დაფა (x1)
  • დამაკავშირებელი მავთულები

გამოყენებული პროგრამული უზრუნველყოფა:

OpenCV

Ხელსაწყოები:

პითონი

ნაბიჯი 3: რა უნდა გავაკეთოთ?

ნებისმიერ გარე სათვალთვალო სისტემას უნდა შეეძლოს თვალყური ადევნოს მის ხედვის არეზე მოძრავ ობიექტებს, დაალაგოს ეს ობიექტები და აღმოაჩინოს მათი ზოგიერთი აქტივობა. მე შევიმუშავე მეთოდი ამ ობიექტების თვალთვალის და კლასიფიკაციისთვის რეალისტურ სცენარებში. ობიექტების თვალყურის დევნება ერთ კამერაში ხორციელდება ფონის გამოკლების გამოყენებით, რასაც მოჰყვება რეგიონის კორესპონდენცია. ეს ითვალისწინებს მრავალრიცხოვან მინიშნებებს, მათ შორის სიჩქარის, ზომის და დაშორების შემაკავშირებელ ყუთებს.

ჩარჩო -ჩარჩოზე სურათების გამოვლენისას გადამწყვეტი მნიშვნელობა ჰქონდა ჩარჩოს წვეთების თავიდან აცილებას, რადგან მაშინ ბოტი შეიძლება გადავიდეს limbo მდგომარეობაში, თუ ბოტი ჩარჩოს ვარდნის გამო ვერ შეამჩნევს ბურთის მოძრაობის მიმართულებას. თუ ბურთი გამოდის კამერის დიაპაზონიდან, ის გადადის ის რასაც ჩვენ ვუწოდებთ limbo მდგომარეობას, ამ შემთხვევაში ბოტი 360 გრადუსით ბრუნავს მის გარშემო არსებული სივრცის სანახავად სანამ ბურთი არ დაბრუნდება ჩარჩოში კამერა და შემდეგ დაიწყეთ მოძრაობა მისი მიმართულებით.

სურათის ანალიზისთვის ვიღებ თითოეულ ჩარჩოს და შემდეგ ვფარავ მას საჭირო ფერით. შემდეგ ვპოულობ ყველა კონტურს და ვპოულობ მათ შორის ყველაზე დიდს და ვკრავ მას ოთხკუთხედში. და აჩვენე ოთხკუთხედი მთავარ სურათზე და იპოვე ოთხკუთხედის ცენტრის კოორდინატები.

დაბოლოს, ბოტი ცდილობს ბურთის კოორდინატები მიიტანოს მისი საკოორდინატო ღერძის ცენტრში. ასე მუშაობს რობოტი. ეს შეიძლება კიდევ უფრო გაძლიერდეს IoT მოწყობილობის გამოყენებით, როგორიცაა ფოტონის ნაწილაკი, რომელიც საშუალებას მოგცემთ იყოთ ინფორმირებული, როდესაც რამე აღმოჩენილია და რობოტი მისდევს მას ან რობოტმა დაკარგა კვალი და ახლა ბრუნდება ბაზაზე რა

სურათის დამუშავების მიზნით, თქვენ უნდა დააინსტალიროთ OpenCV პროგრამა თქვენს ჟოლოს პიზე, რაც ჩემთვის საკმაოდ სახიფათო იყო.

თქვენ შეგიძლიათ მიიღოთ ნებისმიერი საჭირო ინფორმაცია OpenCV– ს ინსტალაციისათვის ამ ბმულის საშუალებით: დააწკაპუნეთ აქ

ნაბიჯი 4: სქემა

Image
Image
სქემატიკა
სქემატიკა
სქემატიკა
სქემატიკა

ზემოთ მე მოვიყვანე ჩემი პროექტის სქემა და მასთან ერთად არის დაბეჭდილი მიკროსქემის დაფა (PCB).

და აქ არის რამოდენიმე ძირითადი კავშირი, რომელიც თქვენ უნდა გააკეთოთ:

• პირველ რიგში Raspberry Pi კამერის მოდული პირდაპირ კავშირშია Raspberry Pi– სთან.

• ულტრაბგერითი სენსორები VCC დაკავშირებულია საერთო ტერმინალთან იგივე GND (ადგილზე) და ულტრაბგერითი სენსორის დანარჩენი ორი პორტი უკავშირდება GPIO ქინძისთავებს Raspberry Pi– ზე.

• ძრავები დაკავშირებულია H- ხიდის გამოყენებით.

• ელექტროენერგია მიეწოდება ბატარეის გამოყენებით.

მე ასევე დავამატე ვიდეო, რომელიც შეიძლება დაგეხმაროთ იმის გაგებაში, თუ როგორ მუშაობს ულტრაბგერითი სენსორი და როგორ მუშაობს იგი.

და ასევე შეგიძლიათ მიყევით ამ ბმულს, თუ ვერ იპოვით ზემოთ მოცემულ ვიდეოს.

ნაბიჯი 5: როგორ გავაკეთოთ?

მე გავაკეთე ეს პროექტი, სადაც გამოსახულია ძირითადი რობოტი, რომელსაც შეუძლია ბურთის თვალყურის დევნება. რობოტი იყენებს კამერას სურათის დამუშავებისათვის ჩარჩოების გადაღებით და ბურთის თვალყურის დევნებით. ბურთის თვალყურის დევნისთვის გამოიყენება სხვადასხვა მახასიათებლები, როგორიცაა მისი ფერი, ზომა, ფორმა.

რობოტი პოულობს მყარ კოდირებულ ფერს, შემდეგ ეძებს ამ ფერის ბურთს და მიჰყვება მას. მე ამ პროექტში ავირჩიე Raspberry Pi, როგორც მიკრო კონტროლერი, რადგან ის გვაძლევს საშუალებას გამოვიყენოთ მისი კამერის მოდული და იძლევა დიდ მოქნილობას კოდში, რადგან ის იყენებს პითონის ენას, რომელიც არის ძალიან მოსახერხებელი და ასევე საშუალებას გვაძლევს გამოვიყენოთ OpenCV ბიბლიოთეკა სურათების გასაანალიზებლად.

H- ხიდი გამოიყენება ძრავების ბრუნვის მიმართულების შესაცვლელად ან მათი შესაჩერებლად.

სურათის ანალიზისთვის ვიღებ თითოეულ ჩარჩოს და შემდეგ ვფარავ მას საჭირო ფერით. შემდეგ ვპოულობ ყველა კონტურს და ვპოულობ მათ შორის ყველაზე დიდს და ვკრავ მას ოთხკუთხედში. და აჩვენე ოთხკუთხედი მთავარ სურათზე და იპოვე ოთხკუთხედის ცენტრის კოორდინატები.

დაბოლოს, ბოტი ცდილობს ბურთის კოორდინატები მიიტანოს მისი საკოორდინატო ღერძის ცენტრში. ასე მუშაობს რობოტი. ეს შეიძლება კიდევ უფრო გაძლიერდეს IoT მოწყობილობის გამოყენებით, როგორიცაა ფოტონის ნაწილაკი, რომელიც საშუალებას მოგცემთ იყოთ ინფორმირებული, როდესაც რამე აღმოჩენილია და რობოტი მისდევს მას ან რობოტმა დაკარგა კვალი და ახლა ბრუნდება ბაზაზე რა და ამისათვის ჩვენ ვიყენებთ ონლაინ პროგრამულ პლატფორმას, რომელიც აკავშირებს მოწყობილობებს და საშუალებას აძლევს მათ შეასრულონ გარკვეული მოქმედებები კონკრეტულ გამომწვევებზე, რაც არის IFTTT გამომწვევები.

ნაბიჯი 6: ფსევდოკოდი

ფსევდოკოდი
ფსევდოკოდი

აქ არის ფსევდო კოდი გამოვლენის ნაწილისთვის OpenCV გამოყენებით, სადაც ჩვენ ვხვდებით ბურთს.

ნაბიჯი 7: კოდი

კოდი
კოდი
კოდი
კოდი
კოდი
კოდი
კოდი
კოდი

ზემოთ არის კოდის ფრაგმენტები და ქვემოთ არის კოდის დეტალური აღწერა.

# შემოიტანეთ საჭირო პაკეტები

ჩვენ შევიტანთ ყველა საჭირო პაკეტს

picamera.array იმპორტი PiRGBArray #როგორც არის ჟოლოს პიში რეზოლუციის პრობლემა, ვერ შეძლებს ვიდეოების გადაღების ჩარჩოების გადაღებას

picamera იმპორტიდან PiCamera იმპორტი RPi. GPIO როგორც GPIO იმპორტი დრო იმპორტი numpy როგორც np

ახლა ჩვენ ვამუშავებთ HARDWARE- ს და ვსვამთ ჟოლოს PI- სთან დაკავშირებულ ქინძისთავებს

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #მარცხენა ულტრაბგერითი სენსორი

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #წინა ულტრაბგერითი სენსორი

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #ულტრაბგერითი სენსორი

GPIO_ECHO3 = 35

MOTOR1B = 18 #მარცხენა ძრავა

MOTOR1E = 22

MOTOR2B = 21 #მარჯვენა ძრავა

MOTOR2E = 19

LED_PIN = 13 #თუ ის იპოვის ბურთს, მაშინ ის ანათებს led- ს

# დააყენეთ ქინძისთავები, როგორც გამომავალი და შემავალი

GPIO.setup (GPIO_TRIGGER1, GPIO. OUT) # გამომწვევი GPIO.setup (GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup (GPIO_TRIGGER2, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO2) GPIO_TRIGGER3, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO3, GPIO. IN) GPIO.setup (LED_PIN, GPIO. OUT)

# დააყენეთ გამომწვევი მცდარი (დაბალი)

GPIO.output (GPIO_TRIGGER1, ყალბი) GPIO.output (GPIO_TRIGGER2, ყალბი) GPIO.output (GPIO_TRIGGER3, ყალბი)

ეს ფუნქცია იყენებს ყველა ულტრაბგერითი სენსორს, რომელიც აგროვებს დისტანციას ჩვენი ბოტის გარშემო

# მიეცი მოდულის მოგვარების საშუალება

def sonar (GPIO_TRIGGER, GPIO_ECHO): დაწყება = 0 გაჩერება = 0 # ქინძისთავების დაყენება, როგორც გამომავალი და შეყვანის GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Set trigger to False (დაბალი) GPIO.output (GPIO_TRIGGER, False) #მიეცით მოდულს საშუალება მოაგვაროს დრო. ძილი (0.01) #ხოლო მანძილი> 5: #გაგზავნეთ პულსი 10us GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. გამომავალი (GPIO_TRIGGER, ყალბი) დაწყება = დრო. დრო (), ხოლო GPIO. შეყვანა (GPIO_ECHO) == 0 და დრო. დრო ()

DC MOTORS– ის მიღება ჟოლოს PI– ით მუშაობისთვის

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

GPIO.setup (MOTOR2B, GPIO. OUT) GPIO.setup (MOTOR2E, GPIO. OUT)

რობოტის ფუნქციონირების და მისი გადაადგილების განსხვავებული მიმართულებების განსაზღვრის ფუნქციები

def წინ ():

GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def reverse (): GPIO.output (MOTOR1, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH) def rightturn (): GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def leftturn (): GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGHT)

def stop ():

GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW)

კამერის მოდულის მუშაობა და პარამეტრების მორგება

#კამერის გადაღება

# კამერის ინიციალიზაცია და მიანიჭეთ მითითება ნედლი კამერის გადაღების კამერაზე = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (კამერა, ზომა = (160, 120)) # ნება დართეთ კამერას გასათბობად. ძილი (0.001)

ახლავე ვახორციელებ მთავარ საქმეს, სადაც ბოტი მიჰყვება ბურთს და თავს არიდებს ყოველგვარ დაბრკოლებას

ხოლო (1 <10): { #მანძილი მოდის წინა ულტრაბგერითი სენსორის მანძილიდან C = სონარი (GPIO_TRIGGER2, GPIO_ECHO2) #მანძილი მარჯვენა ულტრაბგერითი სენსორის მანძილიდან R = სონარი (GPIO_TRIGGER3, GPIO_ECHO3) #მანძილი ულტრაბგერითი სენსორის დისტანციიდან L = სონარი (GPIO_, GPIO_ECHO1) თუ (მანძილი C = 8: მარჯვნივ მობრუნება () დრო. ძილი (0.00625) გაჩერება () დრო. ძილი (0.0125) წინ () დრო. ძილი (0.00625) გაჩერება () დრო. ძილი (0.0125) #ხოლო ნაპოვნია == 0: leftturn () time.sleep (0.00625) elif distanceL> = 8: leftturn () time.sleep (0.00625) stop () time.sleep (0.0125) forward () time.sleep (0.00625) stop () time.sleep (0.0125) rightturn () time.sleep (0.00625) stop () time.sleep (0.0125) else: stop () time.sleep (0.01) else: #წინააღმდეგ შემთხვევაში ის წინ მიიწევს წინ () დრო. ძილი (0.00625) თუ (მანძილი C> 10): #მას მოაქვს ბურთის კოორდინატები კამერის წარმოსახვითი ღერძის ცენტრში.) გაჩერება () დრო. ძილი (0.00625) სხვა: გაჩერება () დრო. ძილი (0.01)

სხვა:

#თუ ის აღმოაჩენს ბურთს და ის ძალიან ახლოს არის ის ანათებს led- ს. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.truncate (0) # გაასუფთავეთ ნაკადი მომზადებისთვის შემდეგი ჩარჩო}

გააკეთეთ აუცილებელი დასუფთავება

GPIO.cleanup () #უფასოდ GPIO ყველა ქინძისთავები

ნაბიჯი 8: გარე ბმულები

სადემონსტრაციო ვიდეოს ბმული: დააწკაპუნეთ აქ (Youtube)

კოდის ბმული Git-hub: დააწკაპუნეთ აქ (Git-Hub)

გირჩევთ: