Inhaltsverzeichnis:

Balltracking-Roboter - Gunook
Balltracking-Roboter - Gunook

Video: Balltracking-Roboter - Gunook

Video: Balltracking-Roboter - Gunook
Video: I Built a Ball Balancing Robot 2024, November
Anonim
Balltracking-Roboter
Balltracking-Roboter
Balltracking-Roboter
Balltracking-Roboter
Balltracking-Roboter
Balltracking-Roboter

In diesem werde ich also erzählen, wie man einen Balltracking-Roboter herstellt, der ein Roboter ist, der einen Ball identifiziert und ihm folgt. Es ist im Grunde eine automatisierte Überwachungstechnik, die in der modernen Welt verwendet werden kann. Also, lass uns einfach einsteigen und mit dem Bauen beginnen…

HINWEIS: Dies ist die Teilaufgabe, die an die Deakin University, School of IT, SIT-210 Embedded Systems Development, eingereicht wurde

Lieferungen

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

Schritt 1: Einführung

Einführung
Einführung

Die heutige Überwachung hat den großen Nachteil, dass sie auf der Beteiligung von Menschen beruht, die, wie wir alle wissen, leicht abgelenkt werden können. Daher war es für uns von größter Bedeutung, ein System zu finden, das Regionen autonom und kontinuierlich überwachen kann. Und wir wollen auch unangenehme oder unerwünschte Dinge und Gefahren erkennen und gleichzeitig Entscheidungen treffen und entsprechend reagieren. Daher ist die Objektverfolgung durch den Einsatz intelligenter Systeme und Computer unerlässlich und entscheidend für eine automatisierte Überwachung.

Jedes Outdoor-Überwachungssystem muss in der Lage sein, sich in seinem Sichtfeld bewegende Objekte zu verfolgen, diese Objekte zu klassifizieren und einige ihrer Aktivitäten zu erkennen. Ich habe eine Methode entwickelt, um diese Objekte in realistischen Szenarien zu verfolgen und zu klassifizieren. Die Objektverfolgung in einer einzelnen Kamera wird unter Verwendung einer Hintergrundsubtraktion durchgeführt, gefolgt von einer Bereichskorrespondenz. Dies berücksichtigt mehrere Hinweise, einschließlich Geschwindigkeiten, Größen und Abstände von Bounding Boxes.

Schritt 2: Materialien und Software, die in diesem Projekt verwendet werden

In diesem Projekt verwendete Materialien und Software
In diesem Projekt verwendete Materialien und Software
In diesem Projekt verwendete Materialien und Software
In diesem Projekt verwendete Materialien und Software
In diesem Projekt verwendete Materialien und Software
In diesem Projekt verwendete Materialien und Software

Verwendete Hardwarekomponenten:

  • Himbeer-Pi (x1)
  • Raspberry Pi-Kameramodul (x1)
  • Ultraschallsensor (x3)
  • SparkFun Dual H-Brücken-Motortreiber L298 (x1)
  • Gleichstrommotor (x1)
  • Steckbrett (x1)
  • Anschließen von Drähten

Verwendete Software:

OpenCV

Handwerkzeuge:

Python

Schritt 3: Was ist zu tun?

Jedes Outdoor-Überwachungssystem muss in der Lage sein, sich in seinem Sichtfeld bewegende Objekte zu verfolgen, diese Objekte zu klassifizieren und einige ihrer Aktivitäten zu erkennen. Ich habe eine Methode entwickelt, um diese Objekte in realistischen Szenarien zu verfolgen und zu klassifizieren. Die Objektverfolgung in einer einzelnen Kamera wird unter Verwendung einer Hintergrundsubtraktion durchgeführt, gefolgt von einer Bereichskorrespondenz. Dies berücksichtigt mehrere Hinweise, einschließlich Geschwindigkeiten, Größen und Abstände von Bounding Boxes.

Entscheidend bei der Erkennung von Bildern Frame für Frame war es, Frame-Drops zu vermeiden, da der Bot dann in einen Schwebezustand geraten kann, wenn der Bot die Bewegungsrichtung des Balls aufgrund von Frame-Drops nicht bemerkt. Wenn der Ball die Reichweite der Kamera verlässt, wird er in einen sogenannten Limbo-Zustand versetzt. In diesem Fall macht der Bot eine 360-Grad-Drehung, um den Raum um ihn herum zu sehen, bis der Ball im Rahmen von die Kamera und bewegen Sie sich dann in ihre Richtung.

Für die Bildanalyse nehme ich jeden Frame und maskiere ihn dann mit der benötigten Farbe. Dann finde ich alle Konturen und finde die größte unter ihnen und binde sie in ein Rechteck. Zeigen Sie das Rechteck im Hauptbild an und finden Sie die Koordinaten der Mitte des Rechtecks.

Schließlich versucht der Bot, die Koordinaten des Balls in die Mitte seiner Koordinatenachse zu bringen. So funktioniert der Roboter. Dies kann noch verbessert werden, indem ein IoT-Gerät wie ein Photonenteilchen verwendet wird, mit dem Sie benachrichtigt werden können, wenn ein Ding erkannt wird und der Roboter ihm folgt oder wenn der Roboter die Spur verloren hat und jetzt zur Basis zurückkehrt.

Für die Bildbearbeitung müssen Sie die OpenCV-Software auf Ihrem Raspberry Pi installieren, was für mich ziemlich knifflig war.

Sie können alle erforderlichen Informationen zur Installation von OpenCV über diesen Link erhalten: Klicken Sie hier

Schritt 4: Schaltpläne

Image
Image
Schema
Schema
Schema
Schema

Oben habe ich die Schaltpläne für mein Projekt bereitgestellt und zusammen mit ihm die Leiterplatte (PCB).

Und hier sind einige der wichtigsten Verbindungen, die Sie tun müssen:

• Zuerst wird das Raspberry Pi Camera Modul direkt mit dem Raspberry Pi verbunden.

• Die Ultraschallsensoren VCC werden mit dem gemeinsamen Anschluss verbunden, der mit GND (Masse) verbunden ist und die restlichen beiden Ports des Ultraschallsensors sind mit den GPIO-Pins des Raspberry Pi verbunden.

• Die Motoren sind über die H-Brücke verbunden.

• Die Stromversorgung erfolgt über den Akku.

Ich habe auch das Video hinzugefügt, das zum Verständnis der Funktionsweise des Ultraschallsensors und seiner Funktionsweise beitragen könnte.

und Sie können diesem Link auch folgen, wenn Sie das obige Video nicht finden können.

Schritt 5: Wie zu tun?

Ich habe dieses Projekt gemacht, das einen einfachen Roboter darstellt, der einen Ball verfolgen kann. Der Roboter verwendet eine Kamera zur Bildverarbeitung, indem er Frames aufnimmt und den Ball verfolgt. Um den Ball zu verfolgen, werden verschiedene Merkmale wie Farbe, Größe, Form verwendet.

Der Roboter findet eine hartcodierte Farbe und sucht dann nach dem Ball dieser Farbe und folgt ihm. Ich habe Raspberry Pi als Mikrocontroller in diesem Projekt gewählt, weil es uns ermöglicht, sein Kameramodul zu verwenden und eine große Flexibilität im Code bietet, da es die Python-Sprache verwendet, die sehr benutzerfreundlich ist und uns auch die OpenCV-Bibliothek zum Analysieren der Bilder ermöglicht.

Eine H-Brücke wurde verwendet, um die Drehrichtung von Motoren umzuschalten oder sie zu stoppen.

Für die Bildanalyse nehme ich jeden Frame und maskiere ihn dann mit der benötigten Farbe. Dann finde ich alle Konturen und finde die größte unter ihnen und binde sie in ein Rechteck. Zeigen Sie das Rechteck im Hauptbild an und finden Sie die Koordinaten der Mitte des Rechtecks.

Schließlich versucht der Bot, die Koordinaten des Balls in die Mitte seiner Koordinatenachse zu bringen. So funktioniert der Roboter. Dies kann noch verbessert werden, indem ein IoT-Gerät wie ein Photonenteilchen verwendet wird, mit dem Sie benachrichtigt werden können, wenn ein Ding erkannt wird und der Roboter ihm folgt oder wenn der Roboter die Spur verloren hat und jetzt zur Basis zurückkehrt. Dazu verwenden wir eine Online-Softwareplattform, die die Geräte verbindet und es ihnen ermöglicht, bestimmte Aktionen an bestimmten Triggern auszuführen, die IFTTT-Trigger sind.

Schritt 6: Pseudo-Code

Pseudo-Code
Pseudo-Code

Hier ist der Pseudocode für den Erkennungsteil mit OpenCV, bei dem wir einen Ball erkennen.

Schritt 7: Code

Code
Code
Code
Code
Code
Code
Code
Code

Oben sind die Ausschnitte des Codes und unten die detaillierte Beschreibung des Codes.

# Importieren Sie die erforderlichen Pakete

WIR IMPORTIEREN ALLE BENÖTIGTEN PAKETE

from picamera.array import PiRGBArray #Da es ein Auflösungsproblem in Raspberry Pi gibt, können keine Frames von VideoCapture erfasst werden

von picamera import PiCamera import RPi. GPIO als GPIO import time import numpy als np

JETZT SETZEN WIR DIE HARDWARE EIN UND VERLEGEN DIE AN RASPBERRY PI. ANGESCHLOSSENEN PINS

GPIO.setmode(GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Linker Ultraschallsensor

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Front-Ultraschallsensor

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Rechter Ultraschallsensor

GPIO_ECHO3 = 35

MOTOR1B=18 #Linker Motor

MOTOR1E=22

MOTOR2B=21 #Rechter Motor

MOTOR2E=19

LED_PIN=13 #Wenn es den Ball findet, leuchtet die LED auf

# Pins als Ausgang und Eingang setzen

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)

# Trigger auf False (Niedrig) setzen

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

DIESE FUNKTION VERWENDET ALLE ULTRASCHALLSENSOREN ERFASSEN DIE ABSTAND VON DEN OBJEKTEN UM UNSEREN BOT

# Modul absetzen lassen

def sonar(GPIO_TRIGGER, GPIO_ECHO): start=0 stop=0 # Pins als Ausgang und Eingang setzen GPIO.setup(GPIO_TRIGGER, GPIO. OUT) # Trigger GPIO.setup(GPIO_ECHO, GPIO. IN) # Echo # Trigger auf False setzen (Niedrig) GPIO.output(GPIO_TRIGGER, False) # Erlaube dem Modul, time.sleep(0.01) einzuschwingen #während der Distanz > 5: #Sende 10us-Impuls, um GPIO.output(GPIO_TRIGGER, True) time.sleep(0.00001) GPIO auszulösen. output(GPIO_TRIGGER, False) begin = time.time() während GPIO.input(GPIO_ECHO)==0 und time.time()

DIE DC-MOTOREN MIT DEM RASPBERRY PI. FUNKTIONIEREN

GPIO.setup(MOTOR1B, GPIO. OUT)

GPIO.setup(MOTOR1E, GPIO. OUT)

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

DEFINIEREN VON FUNKTIONEN, UM DEN ROBOTER ZU BEDIENEN UND IHN IN VERSCHIEDENE RICHTUNGEN ZU BEWEGEN

def vorwärts():

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. Ausgang (MOTOR2B, GPIO. LOW) GPIO. Ausgang (MOTOR2E, GPIO. HIGH)

def stop():

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

DAS KAMERAMODUL FUNKTIONIEREN UND DIE EINSTELLUNGEN ANPASSEN

#KAMERA-AUFNAHME

#initialisieren Sie die Kamera und nehmen Sie einen Verweis auf die Raw-Kameraaufnahme. camera = PiCamera() camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray(camera, size=(160, 120)) # Erlaube die Kamera zur Aufwärmzeit. Schlaf(0.001)

JETZT UMSETZEN, WAS DER BOT DEM BALL FOLGT UND JEDES HINDERNIS IM WEG VERMEIDET

while(1<10): { #Abstand vom vorderen Ultraschallsensor AbstandC = Sonar(GPIO_TRIGGER2, GPIO_ECHO2) #Abstand vom rechten Ultraschallsensor AbstandR = Sonar(GPIO_TRIGGER3, GPIO_ECHO3) #Abstand vom linken Ultraschallsensor AbstandL = 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) rightturn() time.sleep(0.00625) stop() time.sleep(0.0125) else: stop() time.sleep(0.01) else: #sonst bewegt es sich vorwärts() time.sleep(0.00625) if(distanceC>10): #es bringt die Koordinaten des Balls zur Mitte der imaginären Achse der Kamera if(centre_x=20): if(centre_x0): flag=1 leftturn() time.sleep(0.025) forward() time.sleep(0.00003125.)) stop() time.sleep(0.00625) sonst: stop() time.sleep(0.01)

anders:

#Wenn er den Ball findet und er zu nah ist, leuchtet die LED auf. GPIO.output(LED_PIN, GPIO. HIGH) time.sleep(0.1) stop() time.sleep(0.1) #cv2.imshow("draw", frame) rawCapture.truncate(0) # lösche den Stream in Vorbereitung auf die nächster Rahmen }

MACHEN SIE DIE NOTWENDIGEN REINIGUNGEN

GPIO.cleanup() #alle GPIO-Pins freigeben

Schritt 8: Externe Links

Link zum Demonstrationsvideo: hier klicken (Youtube)

Link zum Code auf Git-Hub: hier klicken (Git-Hub)