Inhoudsopgave:

Ball Tracking Robot - Ajarnpa
Ball Tracking Robot - Ajarnpa

Video: Ball Tracking Robot - Ajarnpa

Video: Ball Tracking Robot - Ajarnpa
Video: Real Life Voodoo Doll Walks... 2024, Juli-
Anonim
Balvolgrobot
Balvolgrobot
Balvolgrobot
Balvolgrobot
Balvolgrobot
Balvolgrobot

Dus hierin ga ik vertellen hoe je een balvolgrobot maakt die een robot is die een bal identificeert en deze volgt. Het is in feite een geautomatiseerde bewakingstechniek die in de moderne wereld kan worden gebruikt. Dus laten we gewoon instappen en beginnen met bouwen…

OPMERKING: dit is de deelopdracht die is ingediend bij Deakin University, School of IT, SIT-210 Embedded Systems Development

Benodigdheden

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

Stap 1: Inleiding

Invoering
Invoering

Het huidige toezicht heeft een groot nadeel, namelijk dat het berust op de betrokkenheid van mensen die, zoals we allemaal weten, gemakkelijk kunnen worden afgeleid, dus het was van het grootste belang om een systeem te ontdekken dat regio's autonoom en continu kan bewaken. En ook willen we onaangename of ongewenste dingen en gevaren identificeren en tegelijkertijd beslissingen nemen en dienovereenkomstig reageren. Het volgen van objecten met behulp van intelligente systemen en computers is dus essentieel en cruciaal om geautomatiseerde bewaking te realiseren.

Elk buitenbewakingssysteem moet in staat zijn om bewegende objecten in zijn gezichtsveld te volgen, deze objecten te classificeren en sommige van hun activiteiten te detecteren. Ik heb een methode ontwikkeld om deze objecten te volgen en te classificeren in realistische scenario's. Objecttracking in een enkele camera wordt uitgevoerd met behulp van achtergrondaftrekking, gevolgd door regiocorrespondentie. Dit houdt rekening met meerdere signalen, waaronder snelheden, afmetingen en afstanden van begrenzingsvakken.

Stap 2: Materialen en software die in dit project worden gebruikt

Materialen en software gebruikt in dit project
Materialen en software gebruikt in dit project
Materialen en software gebruikt in dit project
Materialen en software gebruikt in dit project
Materialen en software gebruikt in dit project
Materialen en software gebruikt in dit project

Gebruikte hardwarecomponenten:

  • Framboos Pi (x1)
  • Raspberry Pi-cameramodule (x1)
  • Ultrasone sensor (x3)
  • SparkFun Dual H-Bridge motordrivers L298 (x1)
  • DC-motor (x1)
  • Broodplank (x1)
  • Draden aansluiten

Gebruikte software:

OpenCV

Handgereedschap:

Python

Stap 3: Wat te doen?

Elk buitenbewakingssysteem moet in staat zijn om bewegende objecten in het gezichtsveld te volgen, deze objecten te classificeren en sommige van hun activiteiten te detecteren. Ik heb een methode ontwikkeld om deze objecten te volgen en te classificeren in realistische scenario's. Objecttracking in een enkele camera wordt uitgevoerd met behulp van achtergrondaftrekking, gevolgd door regiocorrespondentie. Dit houdt rekening met meerdere signalen, waaronder snelheden, afmetingen en afstanden van begrenzingsvakken.

Cruciaal bij het frame voor frame detecteren van afbeeldingen was om framedrops te voorkomen, omdat de bot dan in een limbo-toestand kan gaan als de bot de bewegingsrichting van de bal niet opmerkt vanwege framedrops. Als de bal buiten het bereik van de camera komt, gaat hij in wat we een limbo-toestand noemen, in dat geval maakt de bot een 360-graden draai om de ruimte eromheen te bekijken totdat de bal terugkomt in het frame van de camera en begin dan in zijn richting te bewegen.

Voor de beeldanalyse neem ik elk frame en maskeer het vervolgens met de benodigde kleur. Dan zoek ik alle contouren en vind de grootste onder hen en bind het in een rechthoek. En toon de rechthoek op de hoofdafbeelding en vind de coördinaten van het midden van de rechthoek.

Ten slotte probeert de bot de coördinaten van de bal naar het midden van zijn coördinatenas te brengen. Dit is hoe de robot werkt. Dit kan verder worden verbeterd door een IoT-apparaat te gebruiken, zoals een fotondeeltje, waarmee u kunt worden geïnformeerd wanneer iets wordt gedetecteerd en dat de robot het volgt of wanneer de robot het spoor kwijt is en nu terugkeert naar de basis.

Voor beeldverwerking moet je OpenCV-software op je Raspberry Pi installeren, wat voor mij best lastig was.

U kunt alle benodigde informatie krijgen om OpenCV te installeren via deze link: klik hier

Stap 4: Schema's

Image
Image
Schema's
Schema's
Schema's
Schema's

Hierboven heb ik de schema's voor mijn project verstrekt en daarbij is de Printed Circuit Board (PCB).

En hier zijn enkele van de belangrijkste verbindingen die u moet doen:

• Allereerst wordt de Raspberry Pi Camera module direct aangesloten op de Raspberry Pi.

• De ultrasone sensoren VCC zijn verbonden met de gemeenschappelijke terminal, hetzelfde is met de GND (aarde) en de resterende twee poorten van de ultrasone sensor zijn verbonden met de GPIO-pinnen op de Raspberry Pi.

• De motoren worden aangesloten via de H-brug.

• De stroom wordt geleverd met behulp van de batterij.

Ik heb ook de video toegevoegd die kan helpen bij het begrijpen van de werking van de ultrasone sensor en hoe deze werkt.

en je kunt ook deze link volgen als je de video hierboven niet kunt vinden.

Stap 5: Hoe te doen?

Ik heb dit project gemaakt met een basisrobot die een bal kan volgen. De robot gebruikt een camera om beeldverwerking te doen door frames te nemen en de bal te volgen. Om de bal te volgen, worden verschillende kenmerken gebruikt, zoals de kleur, grootte en vorm.

De robot vindt een hardgecodeerde kleur en zoekt vervolgens naar de bal van die kleur en volgt deze. Ik heb Raspberry Pi als microcontroller in dit project gekozen omdat het ons in staat stelt om de cameramodule te gebruiken en een grote flexibiliteit in code biedt omdat het Python-taal gebruikt die zeer gebruiksvriendelijk is en het ons ook de OpenCV-bibliotheek laat gebruiken voor het analyseren van de afbeeldingen.

Een H-brug is gebruikt om de draairichting van motoren te veranderen of te stoppen.

Voor de beeldanalyse neem ik elk frame en maskeer het vervolgens met de benodigde kleur. Dan vind ik alle contouren en vind ik de grootste onder hen en bind het in een rechthoek. En toon de rechthoek op de hoofdafbeelding en vind de coördinaten van het midden van de rechthoek.

Ten slotte probeert de bot de coördinaten van de bal naar het midden van zijn coördinatenas te brengen. Dit is hoe de robot werkt. Dit kan verder worden verbeterd door een IoT-apparaat te gebruiken, zoals een fotondeeltje, waarmee u kunt worden geïnformeerd wanneer iets wordt gedetecteerd en dat de robot het volgt of wanneer de robot het spoor kwijt is en nu terugkeert naar de basis. En om dit te doen, zullen we een online softwareplatform gebruiken dat de apparaten verbindt en hen in staat stelt bepaalde acties uit te voeren op specifieke triggers, namelijk IFTTT-triggers.

Stap 6: Pseudo-code

Pseudo-code
Pseudo-code

Hier is de pseudo-code voor het detectiegedeelte met OpenCV waar we een bal detecteren.

Stap 7: Coderen

Code
Code
Code
Code
Code
Code
Code
Code

Hierboven staan de fragmenten van de code en hieronder de gedetailleerde beschrijving van de code.

# importeer de benodigde pakketten

WIJ IMPORTEREN ALLE NODIGE PAKKETTEN

van picamera.array import PiRGBArray #Aangezien er een resolutieprobleem is in raspberry pi, kunnen geen frames worden vastgelegd met VideoCapture

van picamera import PiCamera import RPi. GPIO als GPIO import tijd import numpy als np

NU STELLEN WE DE HARDWARE IN EN WIJZEN DE PINS TOE VERBONDEN OP RASPBERRY PI

GPIO.setmode(GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Linker ultrasone sensor

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Voorste ultrasone sensor

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Rechter ultrasone sensor

GPIO_ECHO3 = 35

MOTOR1B=18 #Linkermotor

MOTOR1E=22

MOTOR2B=21 #Rechtermotor

MOTOR2E=19

LED_PIN=13 #Als het de bal vindt, dan zal de led oplichten

# Stel pinnen in als uitvoer en invoer

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)

# Zet trigger op False (Laag)

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

DEZE FUNCTIE GEBRUIKT ALLE ULTRASONE SENSOREN VERZAMEL DE AFSTAND VAN DE OBJECTEN ROND ONZE BOT

# Laat de module tot rust komen

def sonar (GPIO_TRIGGER, GPIO_ECHO): start=0 stop=0 # Stel pinnen in als uitvoer en invoer GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Activeer GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Stel trigger in op False (Laag) GPIO.output (GPIO_TRIGGER, False) # Laat module time.sleep(0.01) regelen #while distance > 5: #Stuur 10us-puls om GPIO.output (GPIO_TRIGGER, True) time.sleep(0.00001) GPIO te activeren. output(GPIO_TRIGGER, False) begin = time.time() terwijl GPIO.input(GPIO_ECHO)==0 en time.time()

DE DC-MOTOREN MET DE RASPBERRY PI WERKEN

GPIO.setup(MOTOR1B, GPIO. OUT)

GPIO.setup(MOTOR1E, GPIO. OUT)

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

FUNCTIES DEFINIREN OM DE ROBOT TE BEDIENEN EN IN VERSCHILLENDE RICHTEN TE LATEN BEWEGEN

def vooruit():

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

DE CAMERAMODULE WERKEN EN DE INSTELLINGEN AANPASSEN

#CAMERA-VASTLEGGEN

#initialiseer de camera en pak een verwijzing naar de raw camera capture camera = PiCamera() camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray(camera, size=(160, 120)) # sta de camera toe naar opwarmtijd.slaap(0.001)

IMPLEMENTEER NU HET BELANGRIJKSTE DAT DE BOT DE BAL VOLGT EN ELKE OBSTAKEL IN DE WEG vermijdt

while(1<10): { #afstand komende van ultrasone sensor vooraan distanceC = sonar(GPIO_TRIGGER2, GPIO_ECHO2) #distance komende van rechter ultrasone sensor distanceR = sonar(GPIO_TRIGGER3, GPIO_ECHO3) #distance komende van linker ultrasone sensor afstandL = 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: linksom() 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: #otherwise gaat het vooruit() time.sleep(0.00625) if(distanceC>10): #it brengt de coördinaten van de bal naar het midden van de denkbeeldige as van de camera 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)

anders:

#als het de bal vindt en het is te dichtbij, licht de led op. GPIO.output(LED_PIN, GPIO. HIGH) time.sleep(0.1) stop() time.sleep(0.1) #cv2.imshow("draw", frame) rawCapture.truncate(0) # wis de stream ter voorbereiding op de volgende frame }

DOE DE NOODZAKELIJKE REINIGINGEN

GPIO.cleanup() #bevrijd alle GPIO-pinnen

Stap 8: Externe links

Link naar de demonstratievideo: klik hier (Youtube)

Link naar de code op Git-hub: klik hier (Git-Hub)

Aanbevolen: