Sadržaj:

Robot za praćenje lopte: 8 koraka
Robot za praćenje lopte: 8 koraka

Video: Robot za praćenje lopte: 8 koraka

Video: Robot za praćenje lopte: 8 koraka
Video: НЕЗАКОННЫЕ Эксперименты c БОКСИ БУ из ПОППИ ПЛЕЙТАЙМ и ХАГИ ВАГИ в VR! 2024, Juli
Anonim
Robot za praćenje loptica
Robot za praćenje loptica
Robot za praćenje loptica
Robot za praćenje loptica
Robot za praćenje loptica
Robot za praćenje loptica

Dakle, u ovome ću vam reći kako napraviti robota za praćenje lopte koji je robot koji će identificirati loptu i slijediti je. To je u osnovi automatizirana tehnika nadzora koja se može koristiti u modernom svijetu. Dakle, samo uskočimo i počnimo graditi …

NAPOMENA: Ovaj dio posla dostavljen Univerzitetu Deakin, IT školi, SIT-210 razvoj ugrađenih sistema

Supplies

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

Korak 1: Uvod

Uvod
Uvod

Današnji nadzor pruža veliki nedostatak koji počiva na uključivanju ljudi koje, kao što svi znamo, možemo lako omesti, pa nam je od najveće važnosti bilo otkriti sistem koji može autonomno i kontinuirano nadzirati regije. Također želimo identificirati neugodne ili neželjene stvari i opasnosti dok istovremeno donosimo odluke i u skladu s tim reagiramo. Stoga je praćenje objekata uz upotrebu inteligentnih sistema i računara ključno i ključno za postizanje automatiziranog nadzora.

Svaki vanjski nadzorni sistem mora biti u mogućnosti pratiti objekte koji se kreću u njegovom vidnom polju, klasificirati te objekte i otkriti neke od njihovih aktivnosti. Razvio sam metodu za praćenje i klasifikaciju ovih objekata u realnim scenarijima. Praćenje objekata u jednoj kameri vrši se oduzimanjem pozadine, nakon čega slijedi korespondencija regije. Ovo uzima u obzir više znakova, uključujući brzine, veličine i udaljenosti ograničavajućih kutija.

Korak 2: Materijali i mekani proizvodi korišteni u ovom projektu

Materijali i mekani proizvodi korišteni u ovom projektu
Materijali i mekani proizvodi korišteni u ovom projektu
Materijali i mekani proizvodi korišteni u ovom projektu
Materijali i mekani proizvodi korišteni u ovom projektu
Materijali i mekani proizvodi korišteni u ovom projektu
Materijali i mekani proizvodi korišteni u ovom projektu

Korištene hardverske komponente:

  • Raspberry Pi (x1)
  • Modul kamere Raspberry Pi (x1)
  • Ultrazvučni senzor (x3)
  • Drajveri motora SparkFun Dual H-Bridge L298 (x1)
  • DC motor (x1)
  • Oglasna ploča (x1)
  • Spajanje žica

Korišteni softver:

OpenCV

Ručni alati:

Python

Korak 3: Šta učiniti?

Svaki vanjski nadzorni sistem mora biti u mogućnosti pratiti objekte koji se kreću u njegovom vidnom polju, klasificirati te objekte i otkriti neke od njihovih aktivnosti. Razvio sam metodu za praćenje i klasifikaciju ovih objekata u realnim scenarijima. Praćenje objekata u jednoj kameri vrši se oduzimanjem pozadine, nakon čega slijedi korespondencija regije. Ovo uzima u obzir više znakova, uključujući brzine, veličine i udaljenosti ograničavajućih kutija.

Ključna stvar pri otkrivanju slika okvir po kadar bilo je izbjegavanje bilo kakvih padova kadra, jer tada bot može ući u stanje limba ako bot ne opazi smjer kretanja loptice zbog pada karata. Ako lopta izađe iz dometa kamere, ona će ući u ono što nazivamo limbo stanje, u tom slučaju bot se okreće za 360 stepeni kako bi vidio prostor oko sebe sve dok se lopta ne vrati u okvir kameru, a zatim počnite da se krećete u njenom smeru.

Za analizu slike uzimam svaki kadar i zatim ga maskiram potrebnom bojom. Zatim pronalazim sve konture i pronalazim najveću među njima i povezujem je u pravokutnik. I pokažite pravokutnik na glavnoj slici i pronađite koordinate središta pravokutnika.

Konačno, bot pokušava dovesti koordinate lopte u središte svoje koordinatne osi. Ovako robot funkcionira. To se može dodatno poboljšati korištenjem IoT uređaja poput čestice fotona koji vas može obavijestiti kada se nešto otkrije i da ga robot prati ili kada mu je robot izgubio trag i sada se vraća u bazu.

U svrhu obrade slike, morate instalirati OpenCV softver na svoj maline pi, što je za mene bilo prilično nezgodno.

Sve potrebne informacije za instaliranje OpenCV -a možete dobiti putem ove veze: kliknite ovdje

Korak 4: Sheme

Image
Image
Sheme
Sheme
Sheme
Sheme

Gore sam dao sheme za svoj projekt, a uz nju je i štampana ploča (PCB).

A evo nekih glavnih veza koje trebate uspostaviti:

• Pre svega, modul Raspberry Pi kamere je direktno povezan sa Raspberry Pi.

• Ultrazvučni senzori VCC spojeni su na zajednički terminal, isto kao i GND (uzemljenje), a preostala dva priključka ultrazvučnog senzora spojena su na GPIO pinove na Raspberry Pi.

• Motori su povezani pomoću H-mosta.

• Napajanje se vrši pomoću baterije.

Dodao sam i video koji bi mogao pomoći u razumijevanju rada ultrazvučnog senzora i njegovog rada.

a možete i slijediti ovu vezu ako ne možete pronaći gornji video zapis.

Korak 5: Kako to učiniti?

Napravio sam ovaj projekt koji prikazuje osnovnog robota koji može pratiti loptu. Robot koristi kameru za obradu slike uzimajući kadrove i prateći loptu. Za praćenje lopte koriste se različite značajke poput boje, veličine i oblika.

Robot pronalazi tvrdo kodiranu boju, zatim traži loptu te boje i slijedi je. Odabrao sam Raspberry Pi kao mikrokontroler u ovom projektu jer nam omogućuje korištenje modula kamere i daje veliku fleksibilnost u kodu jer koristi jezik Python koji je vrlo jednostavan za upotrebu, a omogućuje nam i korištenje OpenCV biblioteke za analizu slika.

H-most je korišten za promjenu smjera vrtnje motora ili njihovo zaustavljanje.

Za analizu slike uzimam svaki kadar i zatim ga maskiram potrebnom bojom. Zatim pronalazim sve konture i pronalazim najveću među njima i povezujem je u pravokutnik. I pokažite pravokutnik na glavnoj slici i pronađite koordinate središta pravokutnika.

Konačno, bot pokušava dovesti koordinate lopte u središte svoje koordinatne osi. Ovako robot funkcionira. To se može dodatno poboljšati korištenjem IoT uređaja poput čestice fotona koji vas može obavijestiti kada se nešto otkrije i da ga robot prati ili kada mu je robot izgubio trag i sada se vraća u bazu. A da bismo to učinili, koristit ćemo internetsku softversku platformu koja povezuje uređaje i omogućava im da izvode određene radnje na određenim okidačima, a to su IFTTT okidači.

Korak 6: Pseudo-kod

Pseudo-kod
Pseudo-kod

Evo pseudo koda za dio za otkrivanje koji koristi OpenCV gdje otkrivamo loptu.

Korak 7: Kodirajte

Kod
Kod
Kod
Kod
Kod
Kod
Kod
Kod

Gore su isječci koda, a ispod je detaljan opis koda.

# uvezite potrebne pakete

UVOZIMO SVE POTREBNE PAKETE

from picamera.array import PiRGBArray #Budući da postoji problem s rješavanjem u malini pi, neće moći snimati kadrove pomoću VideoCapture -a

sa picamera uvoza PiCamera uvoza RPi. GPIO kao GPIO vreme uvoza uvoza numpy kao np

SADA POSTAVLJAMO HARDVER I DODJELUJEMO PINOVE POVEZANE NA POLOVNICI MALINE

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Lijevi ultrazvučni senzor

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Prednji ultrazvučni senzor

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Desni ultrazvučni senzor

GPIO_ECHO3 = 35

MOTOR1B = 18 #Lijevi motor

MOTOR1E = 22

MOTOR2B = 21 #Desni motor

MOTOR2E = 19

LED_PIN = 13 #Ako pronađe loptu, tada će zasvijetliti vodstvo

# Postavite pinove kao izlaz i ulaz

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

# Postavite okidač na Netačno (nisko)

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

Ova funkcija koristi sve ultrazvučne senzore koji skupljaju udaljenost od objekata oko naše zemlje

# Dopustite modulu da se slegne

def sonar (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # Postavite pinove kao izlaz i ulaz GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Okidač GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Okidač postavite na False (Nisko) GPIO.izlaz (GPIO_TRIGGER, Netačno) #Dopustite modulu da podmiri vrijeme.spavanje (0,01) #dok je udaljenost> 5: #Pošaljite 10us impuls za aktiviranje GPIO.izlaza (GPIO_TRIGGER, Tačno) vrijeme.spavanje (0,00001) GPIO. izlaz (GPIO_TRIGGER, False) begin = time.time () dok je GPIO.input (GPIO_ECHO) == 0 i time.time ()

USKLAĐIVANJE DC MOTORA NA RAD S PI MALINE

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

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

DEFINIRANJE FUNKCIJA ZA UPRAVLJANJE ROBOTOM I NJEGOVO POKRETANJE U RAZLIČITIM SMJERIMA

def forward ():

GPIO.izlaz (MOTOR1B, GPIO. HIGH) GPIO.izlaz (MOTOR1E, GPIO. LOW) GPIO.izlaz (MOTOR2B, GPIO. HIGH) GPIO.izlaz (MOTOR2E, GPIO. LOW) def unazad (): GPIO.izlaz (MOTOR1B, GPIO. LOW) GPIO.izlaz (MOTOR1E, GPIO. HIGH) GPIO.izlaz (MOTOR2B, GPIO. LOW) GPIO.izlaz (MOTOR2E, GPIO. HIGH) def desno okret (): GPIO.izlaz (MOTOR1B, GPIO. LOW) GPIO.izlaz (MOTOR1E, GPIO. HIGH) GPIO.izlaz (MOTOR2B, GPIO. HIGH) GPIO.izlaz (MOTOR2E, GPIO. LOW) def lijevo okretanje (): GPIO.izlaz (MOTOR1B, GPIO. HIGH) GPIO.izlaz (MOTOR1E, GPIO. LOW) GPIO.izlaz (MOTOR2B, GPIO. LOW) GPIO.izlaz (MOTOR2E, GPIO. HIGH)

def stop ():

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

KORIŠTENJE MODULA KAMERE I PODEŠAVANJE POSTAVKI

#CAMERA CAPTURE

#inicijalizirajte kameru i uzmite referencu na sirovu kameru za snimanje kamere = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (kamera, veličina = (160, 120)) # dopustite kameru za zagrijavanje time.sleep (0.001)

SAD PROVEDITE GLAVNU STVAR GDJE BOT SLEDI LOPTU I IZBEGLITE BILO KAKVU PREPREKU

dok (1 <10): {#daljenost dolazi s udaljenosti prednjeg ultrazvučnog senzoraC = sonar (GPIO_TRIGGER2, GPIO_ECHO2) #udaljenost dolazi s udaljenosti desnog ultrazvučnog senzoraR = sonar (GPIO_TRIGGER3, GPIO_ECHO3) #daljenost dolazi s udaljenosti lijevog ultrazvučnog senzoraL = 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 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: #inače se pomiče naprijed () time.sleep (0.00625) if (distanceC> 10): #it dovodi koordinate lopte u središte zamiš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)

drugo:

#ako pronađe loptu i ako je preblizu, osvjetljava vodstvo. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.truncate (0) # obrišite tok u pripremi za sljedeći kadar}

UČINITE POTREBNA ČIŠĆENJA

GPIO.cleanup () #oslobodi sve GPIO pinove

Korak 8: Vanjske veze

Link na demonstracijski video: kliknite ovdje (Youtube)

Link do koda na Git-hubu: kliknite ovdje (Git-Hub)

Preporučuje se: