Inhaltsverzeichnis:
- Schritt 1: ERFORDERLICHE DINGE:
- Schritt 2: FUNKTIONSPRINZIP:
- Schritt 3: EINGANGSAUFNAHME UND VERARBEITUNG:
- Schritt 4:
- Schritt 5:
- Schritt 6: VERARBEITUNGSTEIL:
- Schritt 7:
- Schritt 8:
- Schritt 9:
- Schritt 10:
- Schritt 11:
- Schritt 12: BEWEGUNGSKONTROLLE:
- Schritt 13:
Video: Gesture Hawk: Handgestengesteuerter Roboter mit bildverarbeitungsbasierter Schnittstelle - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Gesture Hawk wurde in TechEvince 4.0 als einfache bildverarbeitungsbasierte Mensch-Maschine-Schnittstelle vorgestellt. Sein Nutzen liegt darin, dass keine zusätzlichen Sensoren oder Wearables außer einem Handschuh erforderlich sind, um das Roboterauto zu steuern, das nach dem Differentialantriebsprinzip fährt. In diesem anweisbaren führen wir Sie durch das Arbeitsprinzip der Objektverfolgung und Gestenerkennung, die im System verwendet werden. Der Quellcode dieses Projekts kann von Github über den Link heruntergeladen werden:
Schritt 1: ERFORDERLICHE DINGE:
- L298N Motortreiber
- Gleichstrommotoren
- Fahrgestell von Roboterautos
- Arduino Uno
- LiPo-Akkus
- Arduino USB-Kabel (lang)
- OpenCV-Bibliothek mit Python
Schritt 2: FUNKTIONSPRINZIP:
Gesture Hawk ist ein dreiphasiges Verarbeitungssystem, wie Sie im obigen Diagramm sehen können.
Schritt 3: EINGANGSAUFNAHME UND VERARBEITUNG:
Die Eingabeerfassung kann in den breiteren Kategorien im obigen Diagramm verstanden werden.
Um die Handform aus der Umgebung zu extrahieren, müssen wir eine Maskierung oder Filterung einer bestimmten Farbe (in diesem Fall – Violettblau) verwenden. Dazu müssen Sie das Bild vom BGR- in das HSV-Format konvertieren, was mit dem folgenden Code-Snippet möglich ist.
hsv = cv2.cvtColor(frame, cv2. COLOR_BGR2HSV)
Der nächste Schritt besteht nun darin, den gewünschten Bereich von HSV-Parametern zu finden, um die Hand über Maske oder Filter zu extrahieren. Verwenden Sie dazu am besten Trackbars, um einen geeigneten Bereich zu finden. Hier ist der Screenshot einer für dieses Projekt verwendeten Spurleiste.
Schritt 4:
Schritt 5:
Hier ist unten ein Code-Snippet, um eine solche Trackbar für den Maskenbau zu erstellen:
CV2 importieren
import numpy as npdef nichts(x): pass cv2.namedWindow('image') img = cv2. VideoCapture(0) cv2.createTrackbar('l_H', 'image', 110, 255, nichts) cv2.createTrackbar('l_S ', 'image', 50, 255, nichts) cv2.createTrackbar('l_V', 'image', 50, 255, nichts) cv2.createTrackbar('h_H', 'image', 130, 255, nichts) cv2. createTrackbar('h_S', 'image', 255, 255, nichts) cv2.createTrackbar('h_V', 'image', 255, 255, nichts) while(1): _, frame = img.read()
hsv = cv2.cvtColor(frame, cv2. COLOR_BGR2HSV)lH = cv2.getTrackbarPos('l_H', 'image') lS = cv2.getTrackbarPos('l_S', 'image') lV = cv2.getTrackbarPos('l_V', 'image') hH = cv2.getTrackbarPos('h_H', 'image') hS = cv2.getTrackbarPos('h_S', 'image') hV = cv2.getTrackbarPos('h_V', 'image') lower_R = np. array([lH, lS, lV]) höher_R = np.array([hH, hS, hV]) mask = cv2.inRange(hsv, niedriger_R, höher_R) res = cv2.bitwise_and(frame, frame, mask= mask) cv2.imshow('image', res) k = cv2.waitKey(1) & 0xFF if k == 27: break cv2.destroyAllWindows()
Schritt 6: VERARBEITUNGSTEIL:
Nun, wir haben die geometrische Form einer Hand, jetzt ist es an der Zeit, sie auszunutzen und sie zu verwenden, um die Handgeste herauszufinden.
Konvexer Rumpf:
Durch die konvexe Hülle versuchen wir, ein ungefähres Polygon über in der Form vorhandene Extrempunkte anzupassen. Das links abgebildete Bild zeigt das ungefähre Polygon, das der Form mit den rot markierten konvexen Punkten zugewiesen wurde.
Konvexe Punkte sind die Punkte in der Form, die am weitesten von einer Seite dieses angenäherten Polygons entfernt sind. Das Problem mit der konvexen Hülle besteht jedoch darin, dass wir während ihrer Berechnung ein Array aller konvexen Punkte erhalten, aber was wir brauchen, ist der blau spitze konvexe Punkt. Wir sagen Ihnen, warum es erforderlich ist.
Um diesen konvexen Punkt zu finden, müssen wir die Formel für den senkrechten Abstand anwenden, um den Abstand des konvexen Punkts zur nächsten Seite zu ermitteln. Wir haben beobachtet, dass der blau spitze Punkt den maximalen Abstand von der Seite besitzt und so erhalten wir diesen Punkt.
Schritt 7:
Schritt 8:
Als nächstes müssen wir die Neigung der Linie finden, die die Daumenspitze (oder den Extrempunkt) mit diesem konvexen Punkt mit der Horizontalen verbindet.
Schritt 9:
Im obigen Fall sollte der Winkel α zwischen 0 und 90 Grad liegen, wenn die Geste für das Linksabbiegen bestimmt ist. Das heißt, tan(α) sollte positiv sein.
Schritt 10:
Im obigen Fall sollte der Winkel α zwischen 180 und 90 Grad liegen, wenn die Geste für das Rechtsabbiegen bestimmt ist. Das heißt, tan(α) sollte negativ sein.
Wenn Tan α positiv ist, dann links abbiegen. Wenn Tan α negativ ist, dann rechts abbiegen. Jetzt ist es an der Zeit zu sehen, wie Sie den wichtigsten Stoppbefehl erkennen.
Hier wird ein bestimmtes Verhältnis (durch Treffer und Versuch gefunden) untersucht und in maximalen Fällen bleibt dieses Verhältnis der Entfernungen in diesem bestimmten Bereich.
Schritt 11:
Zuletzt wird die Vorwärtsbewegungsgeste von der matchShape()-Funktion in OpenCV analysiert. Diese Funktion vergleicht die Form zweier Zähler, in diesem Fall zwischen dem Trainingsbeispiel rechts im obigen Bild mit der Kontur auf der linken Seite des obigen Bildes. Es gibt einen Wert im Bereich von 0 bis 2 oder 3 zurück, je nach vorhandener Variation in Form von zwei Konturen. Bei identischer Kontur wird 0 zurückgegeben.
ret = cv2.matchShapes(cnt1, cnt2, 1, 0.0)
Hier sind cn1 und cnt2 die beiden zu vergleichenden Konturen.
Schritt 12: BEWEGUNGSKONTROLLE:
PySerial:
Wir haben die PySerial-Bibliothek von Python verwendet, um die verarbeiteten Daten in serielle Daten umzuwandeln, die über das Arduino-USB-Kabel an Arduino Uno übermittelt werden. Sobald eine bestimmte Geste von opencv erkannt wurde, haben wir eine temporäre Variable erstellt, sagen "x", und ihr einen eindeutigen Wert zugewiesen und sie mit der folgenden Befehlszeile in eine serielle Eingabe umgewandelt:
import serial #um die Pyserial-Bibliothek zu importieren
serial. Serial('', baudrate = '9600', timeout = '0') # Einrichten der seriellen Ausgabe.. PORT NAME ist der Name des Ports, über den die Datenübertragung erfolgt.
serial.write(b'x') # x ist das an den Port gesendete Alphabet …b soll diesen String in Bytes umwandeln.
Arduino-Verarbeitung:
Jetzt ist Arduino so codiert, dass jedes unterschiedliche serielle x linear auf eine bestimmte Aktion abgebildet wird, die für eine reibungslose Bewegung des Roboters verantwortlich ist (z. B. die Erkennung einer linken Geste löst die Motoren rechts aus, um nach links abzubiegen). Wir können die Bewegung jedes Rades sowohl translatorisch als auch rotatorisch steuern, indem wir den Code richtig ändern.
L298N Motortreiber:-
Motortreiber wird als Vermittler zwischen Motor und Stromquelle verwendet, da Motoren aufgrund niedriger Nennspannungen nicht direkt mit Strom versorgt werden können. Die Li-Po-Batterie ist an ihren 12-V-Eingangsanschluss angeschlossen und wir verbinden die 5-V-Buchse von Arduino mit der 5-V-Eingangsbuchse des Motortreibers und verbinden schließlich die Masse von Li-Po sowie arduino in einer gemeinsamen Massebuchse des Motortreibers.
Nun werden die Klemmen der Motoren an den vorgegebenen Buchsen angeschlossen. Schließlich verbinden wir Eingangsklemmen für den Motor mit PWM-Ausgangsbuchsen von Arduino, damit wir die Rotations- und Translationsaspekte der Bewegung genau bestimmen können.
Empfohlen:
Einen intelligenten Roboter mit Arduino bauen – wikiHow
Wie man einen intelligenten Roboter mit Arduino macht: Hallo, ich bin Arduino-Hersteller und in diesem Tutorial werde ich Ihnen zeigen, wie man einen intelligenten Roboter mit Arduino macht, wenn Ihnen mein Tutorial gefallen hat, dann überlegen Sie, meinen Youtube-Kanal namens Arduino-Hersteller zu unterstützen
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Erfahren Sie, wie Sie mit PROCESSING eine Echtzeitschnittstelle in ARDUINO erstellen !!!!): 5 Schritte (mit Bildern)
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Learn How to Make a Real Time Interface in ARDUINO Using PROCESSING !!!!): Ein SCARA-Roboter ist eine sehr beliebte Maschine in der Industriewelt. Der Name steht sowohl für Selective Compliant Assembly Robot Arm als auch für Selective Compliant Articulated Robot Arm. Es ist im Grunde ein Roboter mit drei Freiheitsgraden, da er die ersten beiden Displ
RC-Tracked-Roboter mit Arduino – Schritt für Schritt: 3 Schritte
RC Tracked Robot mit Arduino – Schritt für Schritt: Hey Leute, ich bin zurück mit einem weiteren coolen Robot-Chassis von BangGood. Ich hoffe, Sie haben unsere vorherigen Projekte durchgegangen – Spinel Crux V1 – Der gestengesteuerte Roboter, Spinel Crux L2 – Arduino Pick-and-Place-Roboter mit Roboterarmen und The Badland Braw
Schnittstelle Regentropfensensor zu NodeMcu- für Anfänger: 5 Schritte
Schnittstelle Regentropfensensor zu NodeMcu| für Anfänger: In diesem Tutorial erfahren Sie, wie Sie den Regentropfensensor mit NodeMcu verbinden
[Arduino-Roboter] Wie erstelle ich einen Motion-Capture-Roboter - Daumen Roboter - Servomotor - Quellcode: 26 Schritte (mit Bildern)
[Arduino-Roboter] Wie erstelle ich einen Motion-Capture-Roboter | Daumen Roboter | Servomotor | Quellcode: Thumbs Robot. Verwendet ein Potentiometer des Servomotors MG90S. Es macht sehr viel Spaß und ist einfach! Der Code ist sehr einfach. Es sind nur etwa 30 Zeilen. Es sieht aus wie ein Motion-Capture.Bitte hinterlassen Sie Fragen oder Feedback![Anleitung] Quellcode https://github.c