Turinys:

Kamuolio sekimo robotas: 8 žingsniai
Kamuolio sekimo robotas: 8 žingsniai

Video: Kamuolio sekimo robotas: 8 žingsniai

Video: Kamuolio sekimo robotas: 8 žingsniai
Video: High Density 2022 2024, Lapkritis
Anonim
Kamuolio sekimo robotas
Kamuolio sekimo robotas
Kamuolio sekimo robotas
Kamuolio sekimo robotas
Kamuolio sekimo robotas
Kamuolio sekimo robotas

Taigi čia aš pasakysiu, kaip padaryti, kad kamuoliukas, sekantis robotą, atpažintų rutulį ir seka jį. Iš esmės tai automatizuota stebėjimo technika, kurią galima naudoti šiuolaikiniame pasaulyje. Taigi, leisk mums tiesiog šokti ir pradėti kurti …

PASTABA: Ši dalies užduotis pateikta Deakino universitetui, IT mokyklai, SIT-210 įterptųjų sistemų kūrimui

Prekės

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

1 žingsnis: Įvadas

Įvadas
Įvadas

Šiandieninė priežiūra yra didelis trūkumas: ji priklauso nuo žmonių dalyvavimo, kurie, kaip visi žinome, gali būti lengvai išsiblaškę, todėl mums buvo labai svarbu atrasti sistemą, galinčią autonomiškai ir nuolat stebėti regionus. Taip pat norime nustatyti nemalonius ar nepageidaujamus dalykus ir pavojus, tuo pačiu priimdami sprendimus ir atitinkamai reaguoti. Taigi objektų sekimas naudojant pažangias sistemas ir kompiuterius yra būtinas ir labai svarbus siekiant automatinio stebėjimo.

Bet kuri lauko stebėjimo sistema turi sugebėti sekti objektus, judančius jos regėjimo lauke, klasifikuoti šiuos objektus ir aptikti tam tikrą jų veiklą. Aš sukūriau metodą, kaip stebėti ir klasifikuoti šiuos objektus pagal realius scenarijus. Objekto stebėjimas vienoje kameroje atliekamas naudojant fono atimtį, o po to - regiono atitikimą. Tai atsižvelgia į kelis ženklus, įskaitant ribojimo dėžių greitį, dydį ir atstumą.

2 žingsnis: Šiame projekte naudojamos medžiagos ir gaminiai

Šiame projekte naudojamos medžiagos ir gaminiai
Šiame projekte naudojamos medžiagos ir gaminiai
Šiame projekte naudojamos medžiagos ir gaminiai
Šiame projekte naudojamos medžiagos ir gaminiai
Šiame projekte naudojamos medžiagos ir gaminiai
Šiame projekte naudojamos medžiagos ir gaminiai

Naudojami aparatūros komponentai:

  • Raspberry Pi (x1)
  • „Raspberry Pi“fotoaparato modulis (x1)
  • Ultragarsinis jutiklis (x3)
  • „SparkFun Dual H-Bridge“variklių tvarkyklės L298 (x1)
  • DC variklis (x1)
  • Duonos lenta (x1)
  • Laidų prijungimas

Naudota programinė įranga:

„OpenCV“

Rankiniai įrankiai:

Python

3 žingsnis: Ką daryti?

Bet kuri lauko stebėjimo sistema turi sugebėti sekti objektus, judančius jos regėjimo lauke, klasifikuoti šiuos objektus ir aptikti tam tikrą jų veiklą. Aš sukūriau metodą, kaip stebėti ir klasifikuoti šiuos objektus pagal realius scenarijus. Objekto stebėjimas vienoje kameroje atliekamas naudojant fono atimtį, o po to - regiono atitikimą. Tai atsižvelgia į kelis ženklus, įskaitant ribojimo dėžių greitį, dydį ir atstumą.

Svarbiausia aptikti vaizdus kadrais po kadro buvo išvengti bet kokio kadro kritimo, nes tada robotas gali pereiti į nesėkmingą būseną, jei robotas nepastebi rutulio judėjimo krypties dėl kadrų kritimo. Jei kamuolys išeina iš fotoaparato diapazono, jis pereina į vadinamąją ribinę būseną, tokiu atveju botas sukasi 360 laipsnių kampu, kad pamatytų aplink esančią erdvę, kol kamuolys grįš į fotoaparatą ir tada pradėkite judėti jo kryptimi.

Vaizdo analizei paimu kiekvieną kadrą ir užmaskuoju reikiama spalva. Tada aš randu visus kontūrus ir surandu didžiausią tarp jų ir surišu jį stačiakampiu. Ir parodykite stačiakampį pagrindiniame paveikslėlyje ir raskite stačiakampio centro koordinates.

Galiausiai robotas bando nunešti rutulio koordinates į jo koordinačių ašies centrą. Taip veikia robotas. Tai galima dar labiau patobulinti naudojant daiktų interneto įrenginį, pvz., Fotono dalelę, kuri leidžia jums būti informuotam, kai aptinkamas daiktas ir kad robotas seka jį arba kai robotas prarado pėdsakus ir dabar grįžta į bazę.

Norėdami apdoroti vaizdus, turite įdiegti „OpenCV“programinę įrangą į savo aviečių pi, kuris man buvo gana sudėtingas.

Visą reikalingą informaciją „OpenCV“įdiegti galite gauti per šią nuorodą: spustelėkite čia

4 žingsnis: schemos

Image
Image
Schemos
Schemos
Schemos
Schemos

Aukščiau pateikiau savo projekto schemas ir kartu su ja yra spausdintinė plokštė (PCB).

Ir čia yra keletas pagrindinių jungčių, kurias turite atlikti:

• Pirmiausia Raspberry Pi kameros modulis yra tiesiogiai prijungtas prie Raspberry Pi.

• Ultragarsiniai jutikliai VCC yra prijungti prie bendro terminalo, kaip ir GND (įžeminimas), o likę du ultragarso jutiklio prievadai yra prijungti prie Raspberry Pi GPIO kaiščių.

• Varikliai prijungiami naudojant „H-Bridge“.

• Maitinimas tiekiamas naudojant akumuliatorių.

Taip pat pridėjau vaizdo įrašą, kuris gali padėti suprasti ultragarso jutiklio veikimą ir jo veikimą.

taip pat galite sekti šią nuorodą, jei nerandate aukščiau esančio vaizdo įrašo.

5 žingsnis: kaip tai padaryti?

Aš sukūriau šį projektą, kuriame pavaizduotas pagrindinis robotas, galintis sekti kamuolį. Robotas naudoja fotoaparatą vaizdo apdorojimui, imdamas rėmus ir sekdamas kamuolį. Kamuoliui sekti naudojamos įvairios savybės, tokios kaip jo spalva, dydis, forma.

Robotas suranda užkoduotą spalvą, tada ieško tos spalvos rutulio ir seka paskui ją. Šiame projekte pasirinkau „Raspberry Pi“kaip mikrovaldiklį, nes tai leidžia mums naudoti jo fotoaparato modulį ir suteikia daug lankstumo koduoti, nes jame naudojama labai patogi „python“kalba, taip pat leidžiama naudoti „OpenCV“biblioteką vaizdams analizuoti.

„H-Bridge“buvo naudojamas variklių sukimosi krypčiai pakeisti arba sustabdyti.

Vaizdo analizei paimu kiekvieną kadrą ir užmaskuoju reikiama spalva. Tada aš randu visus kontūrus ir surandu didžiausią tarp jų ir surišu jį stačiakampiu. Ir parodykite stačiakampį pagrindiniame paveikslėlyje ir raskite stačiakampio centro koordinates.

Galiausiai robotas bando nunešti rutulio koordinates į jo koordinačių ašies centrą. Taip veikia robotas. Tai galima dar labiau patobulinti naudojant daiktų interneto įrenginį, pvz., Fotono dalelę, kuri leidžia jums būti informuotam, kai aptinkamas daiktas ir kad robotas seka jį arba kai robotas prarado pėdsakus ir dabar grįžta į bazę. Norėdami tai padaryti, mes naudosime internetinę programinės įrangos platformą, kuri sujungia įrenginius ir leidžia jiems atlikti tam tikrus veiksmus su konkrečiais aktyvikliais, ty IFTTT aktyvikliais.

6 žingsnis: Pseudo kodas

Pseudo kodas
Pseudo kodas

Čia yra aptikimo dalies, naudojant „OpenCV“, pseudo kodas, kuriame aptinkame rutulį.

7 žingsnis: kodas

Kodas
Kodas
Kodas
Kodas
Kodas
Kodas
Kodas
Kodas

Aukščiau yra kodo fragmentai, o žemiau - išsamus kodo aprašymas.

# importuokite reikiamus paketus

IMPORTUOJAME VISUS REIKALINGUS PAKUOTES

iš „picamera.array“importuoti „PiRGBArray“

iš „picamera“importo „PiCamera“importuoja RPi. GPIO kaip GPIO importo laiko importo numpy kaip np

DABAR RENGĖJAME Aparatūrą ir priskyrėme prie RASPBERRY PI prijungtus PIN kodus

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Kairysis ultragarso jutiklis

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Priekinis ultragarso jutiklis

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Teisingas ultragarso jutiklis

GPIO_ECHO3 = 35

MOTOR1B = 18 #Kairysis variklis

MOTOR1E = 22

MOTOR2B = 21 #Dešinis variklis

MOTOR2E = 19

LED_PIN = 13 #Jei randa kamuolį, jis užsidegs

# Nustatykite kaiščius kaip išvestį ir įvestį

GPIO.setup (GPIO_TRIGGER1, GPIO. OUT) # Suaktyvinti GPIO.setup (GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup (GPIO_TRIGGER2, GPIO. OUT) # Suaktyvinti GPIO.setup (GPIO_ECHO2, GPIO. IN) GPIO.setup (GPIO_TRIGGER3, GPIO. OUT) # Suaktyvinti GPIO.setup (GPIO_ECHO3, GPIO. IN) GPIO.setup (LED_PIN, GPIO. OUT)

# Nustatykite trigerį į False (Low)

GPIO. išvestis (GPIO_TRIGGER1, klaidinga) GPIO. išvestis (GPIO_TRIGGER2, klaidinga) GPIO. išvestis (GPIO_TRIGGER3, klaidinga)

ŠI FUNKCIJA NAUDO VISUS ULTRASONINIUS JUTIKLIUS, RENKAMUS ATSTUMĄ nuo OBJEKTŲ Aplink mūsų BOTĄ

# Leiskite moduliui nusistovėti

def sonar (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # Nustatykite smeigtukus kaip išvestį ir įvestį GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Suaktyvinkite GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Nustatykite trigerį į False (Žemas) GPIO. output (GPIO_TRIGGER, False) #Leisti moduliui nusistatyti time.sleep (0.01) #while distance> 5: #Siųsti 10us impulsą, kad suaktyvintų GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. išvestis (GPIO_TRIGGER, False) begin = time.time (), o GPIO.input (GPIO_ECHO) == 0 ir time.time ()

DC MOTORŲ PRADĖJIMAS DIRBTI SU AVYNO PI

GPIO nustatymas (MOTOR1B, GPIO. OUT)

GPIO nustatymas (MOTOR1E, GPIO. OUT)

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

ROBOTO NAUDOJIMO IR PERJUNGIMO FUNKCIJŲ APIBRĖŽIMAS Skirtingomis kryptimis

į priekį ():

GPIO išėjimas (MOTOR1B, GPIO. HIGH) GPIO išėjimas (MOTOR1E, GPIO. LOW) GPIO išėjimas (MOTOR2B, GPIO. HIGH) GPIO išėjimas (MOTOR2E, GPIO. LOW) def atvirkštinis (): GPIO išėjimas (MOTOR1B, GPIO. LOW) GPIO. išvestis (MOTOR1E, GPIO. HIGH) GPIO. išvestis (MOTOR2B, GPIO. LOW) GPIO. išvestis (MOTOR2E, GPIO. HIGH) deftr. Dešinėn (): GPIO. GPIO išvestis (MOTOR1E, GPIO. HIGH) GPIO. išvestis (MOTOR2B, GPIO. HIGH) GPIO išvestis (MOTOR2E, GPIO. LOW) def leftturn (): GPIO. output (MOTOR1B, GPIO. HIGH) GPIO. output (MOTOR1E, GPIO. LOW) GPIO išvestis (MOTOR2B, GPIO. LOW) GPIO išvestis (MOTOR2E, GPIO. HIGH)

def stop ():

GPIO išėjimas (MOTOR1E, GPIO. LOW) GPIO išėjimas (MOTOR1B, GPIO. LOW) GPIO išėjimas (MOTOR2E, GPIO. LOW) GPIO išėjimas (MOTOR2B, GPIO. LOW)

KAMEROS MODULIO VEIKIMAS IR NUSTATYMŲ REGULIAVIMAS

#KAMEROS GAMYBA

# inicijuoti fotoaparatą ir paimti nuorodą į neapdorotą fotoaparato fiksavimo kamerą = „PiCamera“() kamera. rezoliucija = (160, 120) camera.framerate = 16 rawCapture = „PiRGBArray“(fotoaparatas, dydis = (160, 120)) # leisti fotoaparatui iki sušilimo laiko. miegoti (0,001)

DABAR ĮGYVENDINKITE PAGRINDINĮ dalyką, kai BOTAS seka kamuolį ir vengia bet kokių kliūčių

o (1 <10): { #atstumas nuo priekinio ultragarso jutiklio, GPIO_ECHO1), jei (atstumas C = 8: dešinysis posūkio laikas) 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) dešinysis posūkis () time.sleep (0.00625) stop () time.sleep (0.0125) else: stop () time.sleep (0.01) else: #kitaip jis juda pirmyn () time.sleep (0.00625) if (atstumasC> 10): #pateikia rutulio koordinates į vaizduotės kameros centrą. if (centre_x = 20): if (centre_x0): vėliava = 1 leftturn () time.sleep (0,025) į priekį () time.sleep (0.00003125) stop () time.sleep (0.00625) else: stop () time.sleep (0.01)

Kitas:

#jei jis suranda kamuolį ir yra per arti, jis užsidega. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("piešti", kadras) rawCapture.truncate (0) # išvalyti srautą ruošiantis kitas kadras}

DARYK BŪTINUS VALYMAS

GPIO.cleanup () #nemokamai visi GPIO kaiščiai

8 žingsnis: išorinės nuorodos

Nuoroda į demonstracinį vaizdo įrašą: spustelėkite čia (Youtube)

Nuoroda į „Git-hub“kodą: spustelėkite čia („Git-Hub“)

Rekomenduojamas: