Kazalo:

Robot za sledenje žogicam: 8 korakov
Robot za sledenje žogicam: 8 korakov

Video: Robot za sledenje žogicam: 8 korakov

Video: Robot za sledenje žogicam: 8 korakov
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Julij
Anonim
Robot za sledenje žogicam
Robot za sledenje žogicam
Robot za sledenje žogicam
Robot za sledenje žogicam
Robot za sledenje žogicam
Robot za sledenje žogicam

V tem bom povedal, kako naj robot za sledenje žogici, ki je robot, prepozna kroglo in ji sledi. To je v bistvu avtomatizirana tehnika nadzora, ki jo je mogoče uporabiti v sodobnem svetu. Torej, samo skočimo in začnimo graditi …

OPOMBA: Ta del je bil poslan na Univerzo Deakin, šolo za IT, SIT-210 za razvoj vgrajenih sistemov

Zaloge

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

1. korak: Uvod

Uvod
Uvod

Današnji nadzor ima veliko pomanjkljivost, saj temelji na vpletenosti ljudi, ki jih, kot vsi vemo, zlahka odvrnemo, zato je bilo za nas zelo pomembno, da odkrijemo sistem, ki lahko samostojno in neprekinjeno spremlja regije. Prav tako želimo identificirati neprijetne ali nezaželene stvari in nevarnosti, hkrati pa sprejemati odločitve in se ustrezno odzvati. Tako je sledenje objektom z uporabo inteligentnih sistemov in računalnikov bistveno in ključno za doseganje avtomatiziranega nadzora.

Vsak zunanji nadzorni sistem mora biti sposoben slediti predmetom, ki se gibljejo v njegovem vidnem polju, razvrščati te predmete in zaznati nekatere njihove dejavnosti. Razvil sem metodo za sledenje in razvrščanje teh predmetov v realne scenarije. Sledenje objektom v eni sami kameri se izvede z odštevanjem ozadja, ki mu sledi korespondenca po regijah. To upošteva več znakov, vključno s hitrostmi, velikostmi in razdaljami omejevalnih oken.

2. korak: Materiali in mehko blago, uporabljeni v tem projektu

Materiali in mehko blago, uporabljeni v tem projektu
Materiali in mehko blago, uporabljeni v tem projektu
Materiali in mehko blago, uporabljeni v tem projektu
Materiali in mehko blago, uporabljeni v tem projektu
Materiali in mehko blago, uporabljeni v tem projektu
Materiali in mehko blago, uporabljeni v tem projektu

Uporabljene komponente strojne opreme:

  • Raspberry Pi (x1)
  • Modul kamere Raspberry Pi (x1)
  • Ultrazvočni senzor (x3)
  • SparkFun Dual H-Bridge motorni gonilniki L298 (x1)
  • DC motor (x1)
  • Okvir (x1)
  • Priključitev žic

Uporabljena programska oprema:

OpenCV

Ročno orodje:

Python

3. korak: Kaj storiti?

Vsak zunanji nadzorni sistem mora biti sposoben slediti predmetom, ki se gibljejo v njegovem vidnem polju, razvrščati te predmete in zaznati nekatere njihove dejavnosti. Razvil sem metodo za sledenje in razvrščanje teh predmetov v realne scenarije. Sledenje objektom v eni sami kameri se izvede z odštevanjem ozadja, ki mu sledi korespondenca po regijah. To upošteva več znakov, vključno s hitrostmi, velikostmi in razdaljami omejevalnih oken.

Bistveno pri odkrivanju slik po sličicah je bilo, da se izognemo kakršnim koli padcem okvirja, saj lahko bot preide v stanje limba, če bot zaradi padcev okvirja ne opazi smeri gibanja žoge. Če žoga gre izven dosega kamere, bo prešla v stanje, ki mu pravimo limbo, v tem primeru bo bot za 360 stopinj zavil, da si ogleda prostor okoli sebe, dokler se žogica ne vrne v okvir kamero in se nato začnite premikati v njeno smer.

Za analizo slike vzamem vsak okvir in ga nato prikrijem z želeno barvo. Potem najdem vse konture in med njimi najdem največjo ter jo povežem v pravokotnik. In pokažite pravokotnik na glavni sliki in poiščite koordinate središča pravokotnika.

Nazadnje, bot poskuša koordinate žoge pripeljati do središča njene koordinatne osi. Tako deluje robot. To je mogoče še izboljšati z uporabo naprave IoT, kot je delček fotona, ki vas lahko obvesti, ko stvar zazna in da ji robot sledi ali ko ji je robot izgubil sled in se zdaj vrača v bazo.

Za namene obdelave slik morate na svoj malinov pi namestiti programsko opremo OpenCV, kar je bilo zame precej težavno.

Vse potrebne informacije za namestitev OpenCV lahko dobite na tej povezavi: kliknite tukaj

4. korak: Sheme

Image
Image
Sheme
Sheme
Sheme
Sheme

Zgoraj sem predložil sheme za svoj projekt in skupaj z njim je tiskana vezja (PCB).

In tukaj je nekaj glavnih povezav, ki jih morate narediti:

• Najprej je modul kamere Raspberry Pi neposredno povezan z Raspberry Pi.

• Ultrazvočni senzorji VCC so povezani s skupnim priključkom, enako kot GND (ozemljitev), preostala dva vhoda ultrazvočnega senzorja pa sta povezana z nožicami GPIO na Raspberry Pi.

• Motorji so povezani s H-mostom.

• Napajanje se napaja iz baterije.

Dodal sem tudi videoposnetek, ki bi lahko pomagal pri razumevanju delovanja ultrazvočnega senzorja in njegovega delovanja.

prav tako pa lahko sledite tej povezavi, če zgornjega videoposnetka ne najdete.

5. korak: Kako to storiti?

Naredil sem ta projekt, ki prikazuje osnovnega robota, ki lahko sledi žogici. Robot uporablja kamero za obdelavo slik, tako da posname okvirje in sledi žogici. Za sledenje žogi se uporabljajo različne lastnosti, kot so njena barva, velikost, oblika.

Robot najde trdo kodirano barvo, nato poišče kroglico te barve in ji sledi. Za mikrokrmilnik v tem projektu sem izbral Raspberry Pi, ker nam omogoča uporabo modula kamere in daje veliko prilagodljivost kodi, saj uporablja jezik python, ki je zelo uporabniku prijazen, poleg tega pa nam omogoča uporabo knjižnice OpenCV za analizo slik.

Za preklop smeri vrtenja motorjev ali njihovo ustavitev je bil uporabljen H-most.

Za analizo slike vzamem vsak okvir in ga nato prikrijem z želeno barvo. Potem najdem vse konture in med njimi najdem največjo ter jo povežem v pravokotnik. In pokažite pravokotnik na glavni sliki in poiščite koordinate središča pravokotnika.

Nazadnje bot poskuša koordinate žoge pripeljati v središče koordinatne osi. Tako deluje robot. To je mogoče še izboljšati z uporabo naprave IoT, kot je delček fotona, ki vas lahko obvesti, ko stvar zazna in da ji robot sledi ali ko ji je robot izgubil sled in se zdaj vrača v bazo. Za to bomo uporabili spletno programsko platformo, ki povezuje naprave in jim omogoča izvajanje določenih dejanj na posebnih sprožilcih, ki so sprožilci IFTTT.

Korak 6: Psevdo koda

Psevdo koda
Psevdo koda

Tu je psevdo koda za del zaznavanja z uporabo OpenCV, kjer zaznamo žogo.

7. korak: Koda

Koda
Koda
Koda
Koda
Koda
Koda
Koda
Koda

Zgoraj so izrezki kode, spodaj pa podroben opis kode.

# uvozite potrebne pakete

UVOZAMO VSE POTREBNE PAKETE

from picamera.array import PiRGBArray #Ker je v malini pi problem z ločljivostjo, ne bo mogel zajeti okvirjev z VideoCapture

iz picamere uvoz PiCamera uvoz RPi. GPIO kot GPIO uvoz čas uvoza numpy kot np

SEDAJ NASTAVIMO ORODJE IN DODELIMO KODE, KI SO POVEZANE NA MALINI PI

Način nastavitve GPIO (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Levi ultrazvočni senzor

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Sprednji ultrazvočni senzor

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Desni ultrazvočni senzor

GPIO_ECHO3 = 35

MOTOR1B = 18 #Levi motor

MOTOR1E = 22

MOTOR2B = 21 #Desni motor

MOTOR2E = 19

LED_PIN = 13 #Če najde žogo, bo osvetlila vodilno stran

# Nastavite zatiče kot izhod in vhod

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

# Nastavi sprožilec na False (nizko)

GPIO.output (GPIO_TRIGGER1, False) GPIO.output (GPIO_TRIGGER2, False) GPIO.output (GPIO_TRIGGER3, False)

Ta funkcija uporablja vse ultrazvočne senzorje, ki zbirajo razdaljo od predmetov okoli našega mesta

# Pustite, da se modul poravna

def sonar (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # Nastavi zatiče kot izhodne in vhodne GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Sproži GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Nastavi sprožilec na False (Nizko) GPIO.output (GPIO_TRIGGER, False) #Dovoli modulu poravnavo time.sleep (0,01) #while distance> 5: #Pošlji 10us impulz za sprožitev GPIO.output (GPIO_TRIGGER, True) time.sleep (0,00001) GPIO. izhod (GPIO_TRIGGER, False) begin = time.time () medtem ko je GPIO.input (GPIO_ECHO) == 0 in time.time ()

PRIPRAVA DC MOTORJEV, DA DELUJO Z MALINO PI

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

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

DEFINIRANJE FUNKCIJ ZA UPRAVLJANJE ROBOTA IN NJEGOVO POMIKANJE V RAZLIČNIH SMERIH

def forward ():

Izhod GPIO (MOTOR1B, GPIO. HIGH) Izhod GPIO (MOTOR1E, GPIO. LOW) Izhod GPIO (MOTOR2B, GPIO. HIGH) Izhod GPIO (MOTOR2E, GPIO. LOW) def obratno (): Izhod GPIO (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH) def rightturn (): GPIO.output (MOTOR1B, GPIO. LOW) Izhod GPIO (MOTOR1E, GPIO. HIGH) Izhod GPIO (MOTOR2B, GPIO. HIGH) Izhod GPIO (MOTOR2E, GPIO. LOW) def levo obračanje (): Izhod GPIO (MOTOR1B, GPIO. HIGH) Izhod GPIO (MOTOR1E, GPIO. LOW) Izhod GPIO (MOTOR2B, GPIO. LOW) Izhod GPIO. (MOTOR2E, GPIO. HIGH)

def stop ():

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

DELOVANJE MODULA KAMERE IN PRILAGAJANJE NASTAVITEV

#KAMERA UJEM

#inicializirajte kamero in vzemite sklic na kamero za zajem surove kamere = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (camera, size = (160, 120)) # dovolite kamero za čas ogrevanja. spanje (0,001)

ZDAJ IZVEDITE GLAVNO, KJER BOT sledi žogi in se izognite kakršnim koli oviram na način

medtem ko (1 <10): { #razdalja prihaja od sprednje ultrazvočne razdalje senzorja C = sonar (GPIO_TRIGGER2, GPIO_ECHO2) #razdalja od desne ultrazvočne razdalje senzorja R = sonar (GPIO_TRIGGER3, GPIO_ECHO3) #razdalja od leve ultrazvočne razdalje senzorja L = sonar (GPIO_TRIGER1, GPIO_ECHO1) if (distanceC = 8: rightturn () time.sleep (0.00625) stop () time.sleep (0.0125) forward () time.sleep (0.00625) stop () time.sleep (0.0125) #while found == 0: leftturn () time.sleep (0.00625) elif distance L> = 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: #drugače se premakne naprej () time.sleep (0.00625) if (distanceC> 10): #it pripelje koordinate žogice do središča namišljene osi kamere. if (centre_x = 20): if (centre_x0): flag = 1 leftturn () time.sleep (0.025) forward () time.sleep (0.00003125) stop () time.sleep (0.00625) else: stop () time.sleep (0.01)

drugače:

#če žogico najde in je preblizu, zasveti vodilno stran. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.truncate (0) # počistite tok v pripravah na naslednji okvir}

NAPRAVITE ČIŠČENJA

GPIO.cleanup () #sprosti vse zatiče GPIO

8. korak: Zunanje povezave

Povezava do predstavitvenega videa: kliknite tukaj (Youtube)

Povezava do kode na Git-hubu: kliknite tukaj (Git-Hub)

Priporočena: