Kazalo:
- Zaloge
- 1. korak: Uvod
- 2. korak: Materiali in mehko blago, uporabljeni v tem projektu
- 3. korak: Kaj storiti?
- 4. korak: Sheme
- 5. korak: Kako to storiti?
- Korak 6: Psevdo koda
- 7. korak: Koda
- 8. korak: Zunanje povezave
Video: Robot za sledenje žogicam: 8 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:03
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
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
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
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
Tu je psevdo koda za del zaznavanja z uporabo OpenCV, kjer zaznamo žogo.
7. korak: 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:
Robot za sledenje liniji s PICO: 5 korakov (s slikami)
Robot za sledenje liniji s PICO: Preden boste sposobni ustvariti robota, ki bo lahko končal civilizacijo, kakršno poznamo, in bo sposoben končati človeško raso. Najprej morate biti sposobni ustvariti preproste robote, tiste, ki lahko sledijo liniji, potegnjeni na tleh, in tukaj boste lahko
Sledenje in sledenje majhnim trgovinam: 9 korakov (s slikami)
Sledenje in sledenje za male trgovine: To je sistem, ki je namenjen majhnim trgovinam, ki naj bi se namestile na e-kolesa ali e-skuterje za pošiljke na kratke razdalje, na primer pekarna, ki želi dostaviti pecivo. Kaj pomeni sledenje in sledenje? Sledenje in sledenje je sistem, ki ga uporabljajo ca
Robot za sledenje liniji z uporabo Arduino Uno in L298N: 5 korakov
Robot za sledenje liniji z uporabo Arduino Uno in L298N: Line Flower je zelo preprost robot, idealen za elektroniko za začetnike
Napredni robot za sledenje linijam: 7 korakov
Napredni robot za sledenje linijam: To je robot za sledenje linijam z nekaj dodatnimi funkcijami. Ta prototip se lahko uporablja v tovarni za premikanje materiala brez voznikov. Obstajata dve postaji Loading Station Unloading StationFrom Loading station robot bo čakal Materia
Robot za sledenje svetlobi: 8 korakov
Robot za sledenje svetlobi: ta sledilnik svetlobe je prvi od petih delov robotov. Začel bom z enostavnimi do manj zapletenimi. video posnetke si lahko ogledate na mojem KANALU KLIKNITE TUKAJ, TUKAJ pa se lahko NAROČITE NA MOJ KANAL