Cuprins:

Robot de urmărire a mingii: 8 pași
Robot de urmărire a mingii: 8 pași

Video: Robot de urmărire a mingii: 8 pași

Video: Robot de urmărire a mingii: 8 pași
Video: PRIMII PAȘI CU AJUTORUL UNUI ROBOT MEDICAL 2024, Iulie
Anonim
Robot de urmărire a mingii
Robot de urmărire a mingii
Robot de urmărire a mingii
Robot de urmărire a mingii
Robot de urmărire a mingii
Robot de urmărire a mingii

Deci, în acest sens, voi spune cum să fac un robot de urmărire a mingii care este un robot care să identifice o bilă și să o urmeze. Este practic o tehnică de supraveghere automată care poate fi utilizată în lumea modernă. Deci, lasă-ne să intrăm și să începem să construim …

NOTĂ: Aceasta este atribuirea părții trimisă la Universitatea Deakin, Școala de IT, SIT-210 Dezvoltarea sistemelor încorporate

Provizii

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

Pasul 1: Introducere

Introducere
Introducere

Supravegherea de astăzi oferă un dezavantaj major, constând în faptul că se bazează pe implicarea oamenilor care, după cum știm cu toții, poate fi distrasă cu ușurință, așa că a fost extrem de important să descoperim un sistem care poate monitoriza regiunile în mod autonom și continuu. Și, de asemenea, dorim să identificăm lucrurile și pericolele obositoare sau nedorite în timp ce luăm simultan decizii și să răspundem în consecință. Așadar, urmărirea obiectelor cu utilizarea sistemelor și computerelor inteligente este esențială și crucială pentru a realiza o supraveghere automată.

Orice sistem de supraveghere în aer liber trebuie să poată urmări obiectele care se mișcă în câmpul său vizual, să clasifice aceste obiecte și să detecteze unele dintre activitățile lor. Am dezvoltat o metodă de urmărire și clasificare a acestor obiecte în scenarii realiste. Urmărirea obiectelor într-o singură cameră se realizează utilizând scăderea fundalului, urmată de corespondența regiunii. Acest lucru ia în considerare mai multe indicii, inclusiv viteze, dimensiuni și distanțe ale casetelor de delimitare.

Pasul 2: Materiale și articole moi utilizate în acest proiect

Materiale și articole moi utilizate în acest proiect
Materiale și articole moi utilizate în acest proiect
Materiale și articole moi utilizate în acest proiect
Materiale și articole moi utilizate în acest proiect
Materiale și articole moi utilizate în acest proiect
Materiale și articole moi utilizate în acest proiect

Componente hardware utilizate:

  • Raspberry Pi (x1)
  • Modul de cameră Raspberry Pi (x1)
  • Senzor cu ultrasunete (x3)
  • Drivere de motor SparkFun Dual H-Bridge L298 (x1)
  • Motor DC (x1)
  • Panou (x1)
  • Conectarea firelor

Software folosit:

OpenCV

Unelte de mana:

Piton

Pasul 3: Ce să faci?

Orice sistem de supraveghere în aer liber trebuie să poată urmări obiectele care se mișcă în câmpul său vizual, să clasifice aceste obiecte și să detecteze unele dintre activitățile lor. Am dezvoltat o metodă de urmărire și clasificare a acestor obiecte în scenarii realiste. Urmărirea obiectelor într-o singură cameră se realizează utilizând scăderea fundalului, urmată de corespondența regiunii. Acest lucru ia în considerare mai multe indicii, inclusiv viteze, dimensiuni și distanțe ale casetelor de delimitare.

Un lucru crucial în timpul detectării imaginilor cadru cu cadru a fost de a evita orice cadere a cadrelor, deoarece botul poate intra într-o stare de limb dacă botul nu observă direcția de mișcare a mingii din cauza caderelor cadrului. Dacă mingea iese din raza de acțiune a camerei, va intra în ceea ce numim o stare limbo, în acest caz, robotul face o întoarcere de 360 de grade pentru a vizualiza spațiul din jur până când mingea revine în cadrul camera și apoi începeți să vă mișcați în direcția sa.

Pentru analiza imaginii, iau fiecare cadru și apoi îl maschez cu culoarea necesară. Apoi găsesc toate contururile și le găsesc pe cele mai mari dintre ele și le-am legat într-un dreptunghi. Și arată dreptunghiul de pe imaginea principală și găsește coordonatele centrului dreptunghiului.

În cele din urmă, robotul încearcă să aducă coordonatele mingii în centrul axei sale de coordonate. Așa funcționează robotul. Acest lucru poate fi îmbunătățit în continuare prin utilizarea unui dispozitiv IoT, cum ar fi o particulă de foton, care vă poate permite să fiți informat când este detectat un lucru și că robotul îl urmărește sau când robotul a pierdut urmele acestuia și acum se întoarce la bază.

În scopul procesării imaginilor, trebuie să instalați software OpenCV pe raspberry pi, ceea ce a fost destul de dificil pentru mine.

Puteți obține orice informații necesare pentru a instala OpenCV prin acest link: faceți clic aici

Pasul 4: Scheme

Image
Image
Scheme
Scheme
Scheme
Scheme

Mai sus am furnizat schemele pentru proiectul meu și împreună cu acesta este placa de circuit imprimat (PCB).

Iată câteva dintre principalele conexiuni pe care trebuie să le faceți:

• În primul rând modulul Raspberry Pi Camera este conectat direct la Raspberry Pi.

• Senzorii cu ultrasunete VCC sunt conectați la terminalul comun la fel cu GND (masă), iar celelalte două porturi ale senzorului cu ultrasunete sunt conectate la pinii GPIO de pe Raspberry Pi.

• Motoarele sunt conectate folosind H-Bridge.

• Alimentarea este furnizată folosind bateria.

Am adăugat, de asemenea, videoclipul care ar putea ajuta la înțelegerea funcționării senzorului cu ultrasunete și a modului în care acesta funcționează.

și, de asemenea, puteți urmări acest link dacă nu găsiți videoclipul de mai sus.

Pasul 5: Cum se face?

Am făcut acest proiect descriind un robot de bază care poate urmări o minge. Robotul folosește o cameră pentru a prelucra imagini luând cadre și urmărind mingea. Pentru a urmări mingea se utilizează diverse caracteristici precum culoarea, dimensiunea, forma.

Robotul găsește o culoare codificată și apoi caută bila de acea culoare și o urmărește. Am ales Raspberry Pi ca microcontroler în acest proiect, deoarece ne permite să folosim modulul său de cameră și oferă o mare flexibilitate în cod, deoarece folosește un limbaj python, care este foarte ușor de utilizat și, de asemenea, ne permite să folosim biblioteca OpenCV pentru analiza imaginilor.

Un H-Bridge a fost folosit pentru a comuta direcția de rotație a motoarelor sau pentru a le opri.

Pentru analiza imaginii, iau fiecare cadru și apoi îl maschez cu culoarea necesară. Apoi găsesc toate contururile și le găsesc pe cele mai mari dintre ele și le-am legat într-un dreptunghi. Și arată dreptunghiul de pe imaginea principală și găsește coordonatele centrului dreptunghiului.

În cele din urmă, robotul încearcă să aducă coordonatele mingii în centrul axei sale de coordonate. Așa funcționează robotul. Acest lucru poate fi îmbunătățit în continuare prin utilizarea unui dispozitiv IoT, cum ar fi o particulă de foton, care vă poate permite să fiți informat când este detectat un lucru și că robotul îl urmărește sau când robotul a pierdut urmele acestuia și acum se întoarce la bază. Și pentru a face acest lucru, vom folosi o platformă software online care conectează dispozitivele și le permite acestora să efectueze anumite acțiuni pe declanșatoare specifice, care sunt declanșatoarele IFTTT.

Pasul 6: Pseudo-cod

Pseudo cod
Pseudo cod

Iată pseudo-codul pentru partea de detectare folosind OpenCV unde detectăm o minge.

Pasul 7: Cod

Cod
Cod
Cod
Cod
Cod
Cod
Cod
Cod

Deasupra sunt fragmentele codului și mai jos este descrierea detaliată a codului.

# importă pachetele necesare

IMPORTAM TOATE PACHETELE NECESARE

din picamera.array import PiRGBArray # Deoarece există o problemă de rezoluție în raspberry pi, nu va fi capabil să captureze cadre prin VideoCapture

din picamera import PiCamera import RPi. GPIO ca GPIO import timp import numpy ca np

ACUM CONFIGURĂM HARDWARE-UL ȘI ALOCĂM PIN-ULLE CONEXE PE RASPBERRY PI

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Sensor cu ultrasunete stânga

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 # Senzor ultrasonic frontal

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 # Senzor ultrasonic drept

GPIO_ECHO3 = 35

MOTOR1B = 18 #Motor stâng

MOTOR1E = 22

MOTOR2B = 21 #Motor drept

MOTOR2E = 19

LED_PIN = 13 # Dacă găsește mingea, atunci va aprinde ledul

# Setați pinii ca ieșire și intrare

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

# Setați declanșatorul la False (Scăzut)

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

ACEASTĂ FUNCȚIE UTILIZEAZĂ TOȚI SENZORII ULTRASONICI ADUNĂ DISTANȚA DE LA OBIECTELE DIN jurul BOTULUI NOSTRU

# Permiteți modulului să se stabilească

def sonar (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # Setați pinii ca ieșire și intrare GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Setați declanșatorul la False (Scăzut) GPIO.output (GPIO_TRIGGER, False) # Permite modulului să stabilească time.sleep (0.01) # while distance> 5: #Send 10us pulse to trigger GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. ieșire (GPIO_TRIGGER, False) begin = time.time () în timp ce GPIO.input (GPIO_ECHO) == 0 și time.time ()

COMUNICAREA MOTORILOR DC Pentru a lucra cu RASPBERRY PI

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

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

DEFINIREA FUNCȚIILOR PENTRU FUNCȚIONAREA ROBOTULUI ȘI FACEREA MISCĂRII ÎN DIRECȚII DIFERITE

def forward ():

GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def reverse (): GPIO.output (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) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def leftturn (): GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH)

def stop ():

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

FUNCȚIONAREA MODULULUI CAMERĂ ȘI REGLAREA SETĂRILOR

#CAPERA CAPTURĂ

# inițializați camera și apucați o referință la camera de captare a camerei brute = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (camera, size = (160, 120)) # permite camera până la timpul de încălzire. somn (0,001)

ACUM PUNEREA ÎN APLICARE PRINCIPALUL LUCRU ÎN CARE BOTUL URMĂREȘTE MINGEA ȘI EVITĂ ORICE OBSTACOL ÎN MOD

în timp ce (1 <10): {#distanța care vine de la distanța senzorului ultrasonic frontalC = sonar (GPIO_TRIGGER2, GPIO_ECHO2) #distanța care vine de la distanța senzorului ultrasonic drept R = sonar (GPIO_TRIGGER3, GPIO_ECHO3) #distanța provine de la distanța senzorului ultrasonic stâng L = sonar (GPIO_TRIGGER1, 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: #în caz contrar merge înainte înainte () time.sleep (0,00625) dacă (distanceC> 10): #it aduce coordonatele mingii la centrul axei imaginare a camerei. 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)

altceva:

#dacă întemeiază mingea și este prea aproape, aprinde ledul. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.truncate (0) # ștergeți fluxul în pregătirea pentru următorul cadru}

FĂ CURĂȚILE NECESARE

GPIO.cleanup () #free toate pinii GPIO

Pasul 8: Legături externe

Link către videoclipul demonstrativ: faceți clic aici (Youtube)

Link către cod pe Git-hub: faceți clic aici (Git-Hub)

Recomandat: