Innehållsförteckning:

Ball Tracking Robot: 8 steg
Ball Tracking Robot: 8 steg

Video: Ball Tracking Robot: 8 steg

Video: Ball Tracking Robot: 8 steg
Video: Guy Counts To 1 Million In One Take [ World Record ] 2024, November
Anonim
Bollspårningsrobot
Bollspårningsrobot
Bollspårningsrobot
Bollspårningsrobot
Bollspårningsrobot
Bollspårningsrobot

Så i det här ska jag berätta hur man gör en bollspårningsrobot som är en robot kommer att identifiera en boll och följer den. Det är i grunden en automatiserad övervakningsteknik som kan användas i den moderna världen. Så låt oss bara hoppa in och börja bygga …

OBS: Detta deluppdrag lämnas till Deakin University, IT-skolan, SIT-210 Embedded Systems Development

Tillbehör

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

Steg 1: Introduktion

Introduktion
Introduktion

Dagens övervakning är en stor nackdel som är att den vilar på människors engagemang som, som vi alla vet, lätt kan distraheras, så det var av yttersta vikt att upptäcka ett system som kan övervaka regioner autonomt och kontinuerligt. Och vi vill också identifiera vidriga eller oönskade saker och faror samtidigt som vi fattar beslut och svarar därefter. Så spårning av objekt med användning av intelligenta system och datorer är avgörande och avgörande för att uppnå automatisk övervakning.

Alla utomhusövervakningssystem måste kunna spåra föremål som rör sig i sitt synfält, klassificera dessa objekt och upptäcka några av deras aktiviteter. Jag har utvecklat en metod för att spåra och klassificera dessa objekt i realistiska scenarier. Objektspårning i en enda kamera utförs med hjälp av bakgrundssubtraktion, följt av regionkorrespondens. Detta tar hänsyn till flera signaler, inklusive hastigheter, storlekar och avstånd för avgränsningsboxar.

Steg 2: Material och mjukvaror som används i detta projekt

Material och mjukvaror som används i detta projekt
Material och mjukvaror som används i detta projekt
Material och mjukvaror som används i detta projekt
Material och mjukvaror som används i detta projekt
Material och mjukvaror som används i detta projekt
Material och mjukvaror som används i detta projekt

Hårdvarukomponenter som används:

  • Hallon Pi (x1)
  • Raspberry Pi kameramodul (x1)
  • Ultraljudssensor (x3)
  • SparkFun Dual H-Bridge motorförare L298 (x1)
  • Likströmsmotor (x1)
  • Brödbräda (x1)
  • Anslutningskablar

Programvara som används:

OpenCV

Handverktyg:

Pytonorm

Steg 3: Vad ska jag göra?

Alla utomhusövervakningssystem måste kunna spåra föremål som rör sig i sitt synfält, klassificera dessa objekt och upptäcka några av deras aktiviteter. Jag har utvecklat en metod för att spåra och klassificera dessa objekt i realistiska scenarier. Objektspårning i en enda kamera utförs med hjälp av bakgrundssubtraktion, följt av regionkorrespondens. Detta tar hänsyn till flera ledtrådar inklusive hastigheter, storlekar och avstånd för avgränsningsboxar.

Avgörande när man upptäckte bilder bild för bild var att undvika ramdroppar eftersom botten då kan hamna i ett limbo -tillstånd om boten inte märker bollens rörelseriktning på grund av ramfall. Om bollen går utanför kamerans räckvidd kommer den att gå in i det vi kallar ett limbo-tillstånd, i så fall gör boten en 360-graders sväng för att se utrymmet runt den tills bollen kommer tillbaka i ramen för kameran och börja sedan röra sig i dess riktning.

För bildanalysen tar jag varje ram och maskerar den sedan med den färg som behövs. Sedan hittar jag alla konturer och hittar den största bland dem och band det i en rektangel. Och visa rektangeln på huvudbilden och hitta koordinaterna för rektangelns mitt.

Slutligen försöker boten att föra bollens koordinater till mitten av dess koordinataxel. Så här fungerar roboten. Detta kan förbättras ytterligare genom att använda en IoT -enhet som en fotonpartikel som kan låta dig informeras när en sak upptäcks och att roboten följer den eller när roboten har tappat spåret av den och nu återvänder till basen.

För bildbehandling måste du installera OpenCV -programvara på din hallon pi vilket var ganska svårt för mig.

Du kan få all nödvändig information för att installera OpenCV via denna länk: klicka här

Steg 4: Scheman

Image
Image
Scheman
Scheman
Scheman
Scheman

Ovan har jag tillhandahållit schemat för mitt projekt och tillsammans med det är Printed Circuit Board (PCB).

Och här är några av de viktigaste anslutningarna som du behöver göra:

• Först och främst är Raspberry Pi -kameramodulen direkt ansluten till Raspberry Pi.

• Ultraljudssensorerna VCC är anslutna till den gemensamma terminalen, samma är med GND (jord) och de återstående två portarna på ultraljudssensorn är anslutna till GPIO -stiften på Raspberry Pi.

• Motorerna är anslutna med H-bron.

• Strömförsörjningen sker med batteriet.

Jag har också lagt till videon som kan hjälpa till med förståelsen av hur ultraljudssensorn fungerar och hur den fungerar.

och du kan också följa den här länken om du inte hittar videon ovan.

Steg 5: Hur gör man?

Jag gjorde det här projektet som visar en grundläggande robot som kan spåra en boll. Roboten använder en kamera för bildbehandling genom att ta ramar och spåra bollen. För att spåra bollen används olika funktioner som dess färg, storlek, form.

Roboten hittar en hårdkodad färg och söker sedan efter bollen med den färgen och följer den. Jag har valt Raspberry Pi som mikrokontroller i detta projekt eftersom det tillåter oss att använda sin kameramodul och ger stor flexibilitet i kod eftersom det använder pythonspråk som är mycket användarvänligt och det låter oss också använda OpenCV-bibliotek för att analysera bilderna.

En H-bro har använts för att ändra motorns rotationsriktning eller stoppa dem.

För bildanalysen tar jag varje ram och maskerar den sedan med den färg som behövs. Sedan hittar jag alla konturer och hittar den största bland dem och band det i en rektangel. Och visa rektangeln på huvudbilden och hitta koordinaterna för rektangelns mitt.

Slutligen försöker boten att föra bollens koordinater till mitten av dess koordinataxel. Så här fungerar roboten. Detta kan förbättras ytterligare genom att använda en IoT -enhet som en fotonpartikel som kan låta dig informeras när en sak upptäcks och att roboten följer den eller när roboten har tappat spåret av den och nu återvänder till basen. Och för att göra detta kommer vi att använda en online mjukvaruplattform som ansluter enheterna och låter dem utföra vissa åtgärder på specifika triggers som är IFTTT -triggers.

Steg 6: Pseudokod

Pseudokod
Pseudokod

Här är pseudokoden för detekteringsdelen med OpenCV där vi upptäcker en boll.

Steg 7: Kod

Koda
Koda
Koda
Koda
Koda
Koda
Koda
Koda

Ovan är kodavsnitten och nedan följer en detaljerad beskrivning av koden.

# importera nödvändiga paket

Vi importerar alla nödvändiga paket

från picamera.array import PiRGBArray #Eftersom det finns ett upplösningsproblem i hallon pi, kommer inte att kunna fånga bildrutor av VideoCapture

från picamera import PiCamera import RPi. GPIO som GPIO import tid import numpy som np

NU SETTER VI HARDWARE OCH TILLDELAR PIN -KNAPPARNA ANSLUTNA PÅ RASPBERRY PI

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #vänster ultraljudssensor

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Front ultraljudssensor

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Rätt ultraljudssensor

GPIO_ECHO3 = 35

MOTOR1B = 18 #vänster motor

MOTOR1E = 22

MOTOR2B = 21 #höger motor

MOTOR2E = 19

LED_PIN = 13 #Om den hittar bollen tänds lysdioden

# Ställ in stift som utgång och ingång

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)

# Ställ utlösaren på Falsk (låg)

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

DENNA FUNKTION ANVÄNDER ALLA ULTRASONISKA SENSORER SAMLAR AVSTÅNDEN FRÅN OBJEKTEN RUNDOM VÅR BOT

# Låt modulen lösa sig

def ekolod (GPIO_TRIGGER, GPIO_ECHO): start = 0 stopp = 0 # Ställ in stift som utgång och ingång GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Ställ utlösare till False (Låg) GPIO.output (GPIO_TRIGGER, Falsk) #Låt modulen reglera time.sleep (0.01) #medan distans> 5: #Skicka 10us puls för att utlösa GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. output (GPIO_TRIGGER, False) begin = time.time () medan GPIO.input (GPIO_ECHO) == 0 och time.time ()

FÅ DC -MOTORERNA ATT ARBETA MED RASPBERRY PI

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

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

DEFINERA FUNKTIONER FÖR ATT ANVÄNDA ROBOTEN OCH GÖRA DEN RÖR DIG I Olika riktningar

def framåt ():

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 stopp ():

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

LÅT KAMERAMODULEN FUNGERA OCH JUSTERA INSTÄLLNINGARNA

#KAMERA Fånga

#initialisera kameran och ta en referens till kameran för kamerafångning = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (kamera, storlek = (160, 120)) # tillåt kameran till uppvärmningstid. sömn (0,001)

NU ATT GENOMFÖRA HUVUDSAKEN VAR BOTEN FÖLJER BOLLEN OCH UNDVIK NOGEN HINDNING PÅ VÄGEN

medan (1 <10): { #avstånd kommer från främre ultraljudsgivaravståndC = ekolod (GPIO_TRIGGER2, GPIO_ECHO2) #avstånd från höger ultraljudsgivaravståndR = ekolod (GPIO_TRIGGER3, GPIO_ECHO3) #avstånd från vänster ultraljudsgivaravstånd L = ekolod (GPIO_TRIGGER1, GPIO_ECHO1) if (distansC = 8: högervrid () time.sleep (0.00625) stop () time.sleep (0.0125) fram () time.sleep (0.00625) stop () time.sleep (0.0125) #medan hittades == 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ögervrid () time.sleep (0.00625) stop () time.sleep (0.0125) else: stop () time.sleep (0.01) else: #annars går det framåt () time.sleep (0.00625) om (avståndC> 10): #det tar bollens koordinater till mitten av kamerans imaginära axel. om (center_x = 20): if (center_x0): flagga = 1 vänster () time.sleep (0,025) framåt () time.sleep (0,00003125) stop () time.sleep (0.00625) else: stop () time.sleep (0.01)

annan:

#om den hittar bollen och den är för nära tänds lysdioden. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.truncate (0) # rensa strömmen som förberedelse för nästa bild}

GÖR DE NÖDVÄNDIGA RENGÖRINGARNA

GPIO.cleanup () #free alla GPIO -pins

Steg 8: Externa länkar

Länk till demonstrationsvideon: klicka här (Youtube)

Länk till koden på Git-hub: klicka här (Git-Hub)

Rekommenderad: