Hindernisvermeidung
In diesem Blog zeigen wir, wie Sie unseren Algorithmus zur Vermeidung von Hindernissen mit Raspberry Pi und einem Sphero RVR-Rover ausführen können. Das Hauptziel ist es, die Umgebung zu erkunden und gleichzeitig Hindernisse zu erkennen und zu vermeiden. Dieser Algorithmus verwendet den Obstacle Detection-Algorithmus, um Hindernisse zu identifizieren. Weitere Informationen finden Sie in der Vorheriger Blog.
Das Raspberry Pi + Sphero RVR Rover-Setup ist unten dargestellt. Eine mobile Kamera wurde vorne platziert, um die Bewegung kontinuierlich aufzuzeichnen.
Wir führen einen Python-Code aus, um die Ausgabe zu erhalten, die Quellcodes finden Sie unten.
API-Quellcode von GitHubSie benötigen einen Abonnementschlüssel, um dies zu verwenden, Sie können die Intro-Blog Wie Sie Ihren kostenlosen Abonnementschlüssel erhalten.
Um den Rover ausführen zu können, müssen wir 4 Einstellungen anpassen.
- MinSafeDistanceFactor: Dies dient dazu, den minimalen Sicherheitsabstand zwischen dem Rover und dem Hindernis in jede Richtung anzugeben. Dies ist eine Gleitkommazahl von 0,1 bis 1. Die Werte stellen den Abstand als Faktor der Zeilengröße des Bildrahmens dar, d.h. wenn der Wert 0,5 ist, dürfen für die Hälfte des Bildes keine Hindernisse vorhanden sein. Es ist wichtig zu beachten, dass die Mitte für den Rover im Bild die unterste Zeile und die mittlere Spalte ist.
- MinPathWidthFactor: Hier wird die minimale Pfadbreite angegeben, die zwischen den Hindernissen verfügbar ist, die der Rover am minimalen sicheren Abstandspunkt durchqueren kann. Dies ist eine Gleitkommazahl von 0,1 bis 1. Die Werte stellen den Abstand als Faktor der Spaltengröße des Bildrahmens dar, d.h. wenn der Wert 0,5 ist, ist mindestens die Hälfte des Bildes am minimalen Abstandspunkt hindernisfrei.
- MinObjectHeightFactor: Hier wird die Mindesthöhe des Hindernisses angegeben, das als gültig angesehen werden soll. Dies ist eine Gleitkommazahl von 0,1 bis 1. Die Werte stellen den Abstand als Faktor der Zeilengröße des Bildrahmens dar. Dies dient dazu, falsche Positive aufgrund von falschen Pixeln oder Hindernissen zu vermeiden, die durchquert werden können.
- MinObjectWidthFactor: Geben Sie die Mindestbreite des Hindernisses an, das als gültig betrachtet werden soll. Dies ist eine Gleitkommazahl von 0,1 bis 1. Die Werte stellen den Abstand als Faktor der Spaltengröße des Bildrahmens dar. Dies dient dazu, falsche Positive aufgrund von falschen Pixeln oder Hindernissen zu vermeiden, die durchquert werden können.
Die Ausgabe hat drei Parameter:
- BestDirectionAngle: Gibt den Winkel an, der die geringste Anzahl von Hindernissen aufweist. Dieser Wert kann zwischen -90 und +90 liegen. Der Winkel von 0 Grad entspricht keiner Richtungsänderung, der negative Winkel entspricht der besten Richtung links vom Rahmen und der positive Winkel entspricht der besten Richtung rechts vom Rahmen.
- MaxDistanceFactor: Gibt die maximale Entfernung an, die in der besten Richtung zum Hindernis gemessen wird. Dies ist eine Gleitkommazahl von 0 bis 1. Die Werte stellen den Abstand als Faktor der Zeilengröße des Bildrahmens dar.
- MaxPathWidthFactor: Gibt die maximal verfügbare Pfadbreite zwischen den Hindernissen in der besten Richtung an. Dies ist eine Gleitkommazahl von 0 bis 1. Die Werte stellen den Abstand als Faktor der Spaltengröße des Bildrahmens dar.
Wenn ein durchquerbarer Pfad, der mit allen festgelegten Schwellenwerten übereinstimmt, erfolgreich identifiziert wurde, gibt das 'StatusFlag' 1 zurück, andernfalls gibt es 0 zurück.
Beispiel-Input- und verarbeitete Output-Bilder werden unten als Referenz angezeigt
Die Bilder zeigen das Originalbild und das bearbeitete Bild zeigt den besten Weg. Im verarbeiteten Bild stellt ein grüner Kegel einen gültigen Pfad und ein roter Pfad einen Pfad dar, der nicht alle Bedingungen erfüllt.
Ein Beispielvideo dazu kann unten angesehen werden. Die Einstellungen hierfür sind
- MinSafeDistanceFactor = 0,5
- MinPathWidthFactor = 0,4
- MinObjectHeightFactor = 0,1
- MinObjectWidthFactor = 0,1
Bei dieser Implementierung gibt es einige zusätzliche Bedingungen, die geschaffen wurden, um Hindernisse zu vermeiden. Falls die beste Richtung über 45 Grad von der Mitte entfernt ist, ist es nicht möglich, alle Hindernisse sofort zu identifizieren, da das Sichtfeld eingeschränkt ist. In solchen Fällen wendet sich der Rover in die neue Richtung und wartet auf eine Bestätigung, wenn der Weg hindernisfrei ist. Wenn ja, bewegt es sich weiter in die neue Richtung, sonst wird es sich drehen und auf Bestätigung warten.
In unserem nächsten Blog zeigen wir, wie der Hindernisvermeidungsalgorithmus nachts mit IR funktioniert.