OMower mit ROS, die ersten Schritte

OMower wurde ursprünglich für die einfachen Steuerschnittstellen pfodApp und Modbus entwickelt. Das erste ist ein übergeordnetes Textprotokoll, in dem Menüs und Steuerbefehle übertragen werden, und das zweite ist eine bekannte, aber nicht sehr praktische Sache in dieser Anwendung, da das Steuerprogramm den Status aller verwendeten Sensoren ständig „manuell“ abfragen muss. Daher wurde beschlossen, schrittweise auf ROS (Robot OS) umzusteigen, ein weit verbreitetes Framework zur Steuerung verschiedener Roboter.





Derzeit befindet sich die ROS-Unterstützung in einem Anfangsstadium, einschließlich der Übertragung von Informationen von Sensoren in Form einfacher Arrays (ohne Verwendung spezieller Nachrichtenformate, die von vielen ROS-Bibliotheken angeboten werden), Debug-Protokollen und der Steuerung des Befehlsflusses im pfodApp / Modbus-Format, ohne die Möglichkeit Steuern Sie den Roboter wirklich mit Standard-ROS-Werkzeugen. Das heißt, um den Roboter von seinem Platz zu bewegen oder eine interne Einstellung des Roboters zu ändern, müssen Sie einen Textbefehl im pfodApp-Format an ihn senden. Aber auch in solch einer abgeschnittenen Form können Sie einfach senden und aufzeichnen, was mit dem Roboter passiert, seine Bewegungen in Standard-ROS-Tools (rviz) visualisieren und Dienste für zusätzliche Funktionen hinzufügen. Dies ist beispielsweise die Möglichkeit, in Richtung der von omower_seeker.py bereitgestellten visuellen Vorlage (Schachbrett) zu fahren, um eine genaue Ankunft an der Parkstation zu erreichen.

Das Bild zeigt Datenströme im Roboter. Die wichtigsten ROS-Dienste werden auf Orange PI Zero ausgeführt, das in einem speziellen Steckplatz auf der Roboterplatine steckt (auf einem Testgerät wird hierfür Raspberry PI3 verwendet, das auf ähnliche Weise verbunden ist - über die serielle Schnittstelle). Über die Rosserial-Schnittstelle sendet der Roboter Nachrichten von Sensoren (wie / imu / Orientierung oder / motors / PWM), sein Debug-Protokoll im Textformat und die Ausgabe von Menüs / Nachrichten im pfodApp- oder Modbus-Format an den ROS-Kernel und empfängt einen Strom von Textbefehlen oder Modbus -Anfragen. Zwei zusätzliche Raspberry PI Zero werden mit Bildströmen von Kameras geliefert. Wie die Praxis gezeigt hat, ist es jedoch unmöglich, mit diesem Schema eine normale Synchronisation für die Verarbeitung von Stereobildern zu erzielen (die Qualität ist im Bild unten zu sehen), sodass eine normale Stereokamera bald ersetzt wird.

Der Grad der ROS-Integration in OMower wird schrittweise erweitert, bis der vollständige Zugriff auf alle internen Variablen des Roboters und die Verwaltung über Standard-ROS-Tools (z. B. cmd_vel-Nachrichten, die die erforderliche Geschwindigkeit angeben) möglich sind.



Ich werde Ihnen etwas mehr über das Modul omower_seeker.py erzählen, als Beispiel für die Verwendung von ROS zum Hinzufügen von Funktionen zu OMower. Der Zweck ist ganz einfach: Gehen Sie in Richtung Schachbrett und passen Sie Ihre Route in Echtzeit an. Diese Funktion wird verwendet, um den Mäher zur Parkstation zu fahren, wo er seine Batterien schnell aufladen kann. Das Modul analysiert das Bild von einer der Kameras und berechnet zwei Winkel (den Abweichungswinkel der Karte von der Mitte der Kamera und den Drehwinkel der Karte selbst relativ zur Senkrechten) und überträgt sie als Textbefehl an das interne Suchermodul (omower-seeker.h / cpp im OMower SDK).



Äußerlich sieht dies nach einer ziemlich einfachen Aufgabe aus, aber im wirklichen Leben gibt es ein ernstes Problem - die Geschwindigkeit der Bildverarbeitung auf einem im Roboter eingebauten Mikrocomputer. Wie die Praxis zeigt, ist die Geschwindigkeit der Suche nach Mustern in OpenCV im Bild bei Verwendung von Orange PI und Raspberry Pi mit relativ geringem Stromverbrauch sehr gering und instabil. Sie dauert zehn bis Hunderte von Millisekunden bei einer Auflösung von 640 x 480, was sich während der Fahrt in Abweichungen von der erforderlichen Route seit dem Roboter niederschlägt schafft es trotz seiner geringen Geschwindigkeit, während dieser Zeit einen beträchtlichen Winkel zu drehen oder eine relativ große Strecke zurückzulegen. Aus diesem Grund wurde ein Schachbrett mit einem Minimum an Zellen ausgewählt, da andere Vorlagen noch mehr Zeit in Anspruch nehmen.

Um die lange Suchzeit für die visuelle Vorlage zu kompensieren, wird ein Kompassschema verwendet - der Roboter-Mikrocontroller speichert seine Werte alle 100 Millisekunden und speichert fünf Proben in der letzten halben Sekunde (längere Analysen werden einfach verworfen, da sie für eine genaue Navigation wenig nützlich sind). Die berechneten Winkel aus omower_seeker.py (das auch die Vorlagensuchzeit an den Mikrocontroller überträgt) werden unter Verwendung des gespeicherten Kompasswerts, der nicht mehr als 100 Millisekunden von der Suchzeit entfernt ist, auf den tatsächlichen Drehwinkel neu berechnet, und der Roboter fährt entlang dieses Winkels. Auf diese Weise können Sie in einer geraden Linie mehr oder weniger genau in Richtung Schachbrett gehen. Oder wenn es relativ zur Senkrechten leicht gedreht ist - entlang eines Bogens, der den Anflugwinkel so korrigiert, dass er so nah wie möglich an der Achse der Schablone liegt, da wir nicht nur bis zur Platine fahren müssen, sondern auch in die Führungsschienen gelangen und uns mit den Ladekontakten verbinden müssen.

Der vollständige Algorithmus der Ankunft an der Station wird in drei Stufen implementiert. Auf dem GPS-Feld werden zwei Punkte festgelegt - der Startpunkt (irgendwo in der Mitte des Arbeitsbereichs) und der Punkt vor der Station sowie der Drehwinkel zur Station. Nachdem der Roboter vom Startpunkt zum zweiten angekommen ist und sich an der Station in den gewünschten Winkel zum Schachbrett dreht, tritt das Suchermodul in Aktion und stellt die Drehzahl der Motoren über den PID-Regler ein. Wenn einer der Schritte fehlschlägt oder die Abweichungswinkel die eingestellten Werte überschreiten, bricht der Roboter das Rennen ab und kehrt wieder zum Startpunkt zurück.

Links und Video:

OMower SDK, Bibliothek für Arduino IDE und Leiterplattenlayout
Fertige Firmware mit dem SDK, das sowohl pfodApp / Modbus als auch die Verbindung zu ROS implementiert
omower_gateway-Paket für ROS



Source: https://habr.com/ru/post/de434952/


All Articles