Indholdsfortegnelse:

Ball Tracking Robot: 8 trin
Ball Tracking Robot: 8 trin

Video: Ball Tracking Robot: 8 trin

Video: Ball Tracking Robot: 8 trin
Video: Easy Object Following Robot using Arduino and PixyCam 2024, November
Anonim
Boldsporingsrobot
Boldsporingsrobot
Boldsporingsrobot
Boldsporingsrobot
Boldsporingsrobot
Boldsporingsrobot

Så i dette vil jeg fortælle, hvordan man laver en boldsporingsrobot, der er en robot, identificerer en bold og følger den. Det er dybest set en automatiseret overvågningsteknik, der kan bruges i den moderne verden. Så lad os bare hoppe ind og begynde at bygge …

BEMÆRK: Denne delopgave blev indsendt til Deakin University, School of IT, SIT-210 Embedded Systems Development

Forbrugsvarer

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

Trin 1: Introduktion

Introduktion
Introduktion

Dagens overvågning giver en stor ulempe, at den hviler på inddragelse af mennesker, som som vi alle ved let kan blive distraheret, så det var for vores største betydning at opdage et system, der kan overvåge regioner autonomt og kontinuerligt. Og vi ønsker også at identificere ubehagelige eller uønskede ting og farer, samtidig med at vi træffer beslutninger og reagerer derefter. Så objektsporing med brug af intelligente systemer og computere er afgørende og afgørende for at opnå automatiseret overvågning.

Ethvert udendørs overvågningssystem skal kunne spore objekter, der bevæger sig i sit synsfelt, klassificere disse objekter og registrere nogle af deres aktiviteter. Jeg har udviklet en metode til at spore og klassificere disse objekter i realistiske scenarier. Objektsporing i et enkelt kamera udføres ved hjælp af baggrundssubtraktion efterfulgt af regionskorrespondance. Dette tager højde for flere signaler, herunder hastigheder, størrelser og afstande for afgrænsningskasser.

Trin 2: Materialer og bløde varer, der bruges i dette projekt

Materialer og bløde varer brugt i dette projekt
Materialer og bløde varer brugt i dette projekt
Materialer og bløde varer, der bruges i dette projekt
Materialer og bløde varer, der bruges i dette projekt
Materialer og bløde varer, der bruges i dette projekt
Materialer og bløde varer, der bruges i dette projekt

Anvendte hardwarekomponenter:

  • Hindbær Pi (x1)
  • Raspberry Pi kameramodul (x1)
  • Ultralydssensor (x3)
  • SparkFun Dual H-Bridge motordrivere L298 (x1)
  • DC -motor (x1)
  • Brødbræt (x1)
  • Tilslutning af ledninger

Brugt software:

OpenCV

Håndværktøj:

Python

Trin 3: Hvad skal man gøre?

Ethvert udendørs overvågningssystem skal kunne spore objekter, der bevæger sig i sit synsfelt, klassificere disse objekter og registrere nogle af deres aktiviteter. Jeg har udviklet en metode til at spore og klassificere disse objekter i realistiske scenarier. Objektsporing i et enkelt kamera udføres ved hjælp af baggrundssubtraktion efterfulgt af regionskorrespondance. Dette tager højde for flere signaler, herunder hastigheder, størrelser og afstande for afgrænsningskasser.

Vigtig ting, mens detektering af billeder ramme for ramme var at undgå eventuelle rammefald, da botten kan gå i en limbo -tilstand, hvis botten ikke bemærker kuglens bevægelsesretning på grund af rammefald. Hvis bolden går uden for kameraets rækkevidde, vil den gå ind i det, vi kalder en limbo-tilstand, i så fald gør botten en 360-graders drejning for at se rummet omkring det, indtil bolden kommer tilbage i rammen af kameraet og derefter begynde at bevæge sig i dens retning.

Til billedanalysen tager jeg hver ramme og maskerer den derefter med den nødvendige farve. Så finder jeg alle konturerne og finder den største blandt dem og binder det i et rektangel. Og vis rektanglet på hovedbilledet og find koordinaterne til midten af rektanglet.

Endelig forsøger boten at bringe boldens koordinater til midten af dens koordinatakse. Sådan fungerer robotten. Dette kan yderligere forbedres ved at bruge en IoT -enhed som en fotonpartikel, der kan lade dig blive informeret, når en ting opdages, og at robotten følger den, eller når robotten har mistet sporet af den og nu vender tilbage til basen.

Med henblik på billedbehandling skal du installere OpenCV -software på din hindbær pi, hvilket var ret vanskeligt for mig.

Du kan få alle nødvendige oplysninger for at installere OpenCV via dette link: klik her

Trin 4: Skemaer

Image
Image
Skemaer
Skemaer
Skemaer
Skemaer

Ovenfor har jeg leveret skemaerne til mit projekt, og sammen med det er Printed Circuit Board (PCB).

Og her er nogle af de vigtigste forbindelser, du skal gøre:

• Først og fremmest er Raspberry Pi -kameramodulet direkte forbundet til Raspberry Pi.

• Ultralydssensorerne VCC er forbundet til den fælles terminal, det samme er med GND (jord), og de resterende to porte på ultralydssensoren er forbundet til GPIO -benene på Raspberry Pi.

• Motorerne er forbundet med H-broen.

• Strømforsyningen leveres ved hjælp af batteriet.

Jeg har også tilføjet videoen, der kan hjælpe med forståelsen af ultralydssensorens funktion og hvordan den fungerer.

og du kan også følge dette link, hvis du ikke kan finde videoen ovenfor.

Trin 5: Hvordan gør man?

Jeg lavede dette projekt, der skildrer en grundlæggende robot, der kan spore en bold. Robotten bruger et kamera til billedbehandling ved at tage rammer og spore bolden. For at spore bolden bruges forskellige funktioner som dens farve, størrelse, form.

Robotten finder en hårdkodet farve og søger derefter efter bolden med den farve og følger den. Jeg har valgt Raspberry Pi som mikro-controller i dette projekt, fordi det giver os mulighed for at bruge sit kameramodul og giver stor fleksibilitet i kode, da det bruger python-sprog, som er meget brugervenligt, og det lader os også bruge OpenCV-bibliotek til at analysere billederne.

En H-bro er blevet brugt til at ændre motorens rotationsretning eller stoppe dem.

Til billedanalysen tager jeg hver ramme og maskerer den derefter med den nødvendige farve. Så finder jeg alle konturerne og finder den største blandt dem og binder det i et rektangel. Og vis rektanglet på hovedbilledet og find koordinaterne for midten af rektanglet.

Endelig forsøger bot at bringe koordinaterne for bolden til midten af dens koordinatakse. Sådan fungerer robotten. Dette kan yderligere forbedres ved at bruge en IoT -enhed som en fotonpartikel, der kan lade dig blive informeret, når en ting opdages, og at robotten følger den, eller når robotten har mistet sporet af den og nu vender tilbage til basen. Og for at gøre dette vil vi bruge en online softwareplatform, der forbinder enhederne og giver dem mulighed for at udføre bestemte handlinger på bestemte udløsere, der er IFTTT -udløsere.

Trin 6: Pseudo-kode

Pseudokode
Pseudokode

Her er pseudokoden til detektionsdelen ved hjælp af OpenCV, hvor vi registrerer en bold.

Trin 7: Kode

Kode
Kode
Kode
Kode
Kode
Kode
Kode
Kode

Ovenfor er uddragene af koden og nedenfor er den detaljerede beskrivelse af koden.

# importer de nødvendige pakker

VI IMPORTERER ALLE DE NØDVENDIGE PAKKER

fra picamera.array import PiRGBArray #Da der er et opløsningsproblem i hindbær pi, vil det ikke være i stand til at fange rammer ved VideoCapture

fra picamera import PiCamera import RPi. GPIO som GPIO import tid import numpy som np

NU OPSÆTTER VI HARDWAREN OG TILDELER PINNERNE TILSLUTTET PÅ RASPBERRY PI

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #venstre ultralydssensor

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Front ultralydssensor

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Højre ultralydssensor

GPIO_ECHO3 = 35

MOTOR1B = 18 #venstre motor

MOTOR1E = 22

MOTOR2B = 21 #højre motor

MOTOR2E = 19

LED_PIN = 13 #Hvis den finder bolden, så lyser den

# Indstil stifter som output og input

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)

# Indstil udløseren til Falsk (lav)

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

DENNE FUNKTION ANVENDER ALLE ULTRASONISKE SENSORER SAMLER AFSTANDEN FRA FORMÅLENE RUNDT VORES BOT

# Tillad modul at afregne

def ekkolod (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # Indstil stifter som output og input GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Sæt trigger til False (Lav) GPIO.output (GPIO_TRIGGER, Falsk) #Tillad modul at afregne time.sleep (0.01) #while distance> 5: #Send 10us puls for at udløse GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. output (GPIO_TRIGGER, False) begin = time.time () mens GPIO.input (GPIO_ECHO) == 0 og time.time ()

FÅ DC -MOTORERNE TIL AT ARBEJDE MED RASPBERRY PI

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

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

DEFINITION AF FUNKTIONER FOR AT BRUGE ROBOTEN OG GØRE DEN AT BEVÆGTE I FORSKELLIGE RETNINGER

def fremad ():

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 højre drej (): 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)

FÅR KAMERAMODULET til at fungere og justere indstillingerne

#KAMERA FANGST

#initialiser kameraet, og tag en reference til det rå kameraoptagelseskamera = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (kamera, størrelse = (160, 120)) # tillad kameraet til opvarmningstid. søvn (0,001)

NU GENNEMFØRER DU VEDRIGTIGT, DER BOTEN FØLGER BOLLEN OG UNDGÅ NOGEN HINDRING PÅ VEJEN

mens (1 <10): {#distance, der kommer fra ultralydssensorens forreste afstandC = ekkolod (GPIO_TRIGGER2, GPIO_ECHO2) #distance, der kommer fra højre ultralydsensorafstandR = sonar (GPIO_TRIGGER3, GPIO_ECHO3) #distance fra venstre ultralyds sensorafstand 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 distanceL> = 8: leftturn () time.sleep (0.00625) stop () time.sleep (0.0125) forward () time.sleep (0.00625) stop () time.sleep (0.0125) højre drej () time.sleep (0.00625) stop () time.sleep (0.0125) else: stop () time.sleep (0.01) else: #ellers går den fremad () time.sleep (0.00625) hvis (distanceC> 10): #det bringer koordinaterne til bolden til midten af kameraets imaginære akse. hvis (center_x = 20): if (center_x0): flag = 1 venstre tur () time.sleep (0,025) frem () time.sleep (0,00003125) stop () time.sleep (0,00625) else: stop () time.sleep (0,01)

andet:

#hvis den finder bolden, og den er for tæt, tændes lysdioden. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.trunker (0) # ryd strømmen som forberedelse til næste ramme}

GØR DE NØDVENDIGE RENGØRINGER

GPIO.cleanup () #free alle GPIO pins

Trin 8: Eksterne links

Link til demonstrationsvideoen: klik her (Youtube)

Link til koden på Git-hub: klik her (Git-Hub)

Anbefalede: