Inhaltsverzeichnis:

Ereignisgesteuerte Programmierung in FTC - Gunook
Ereignisgesteuerte Programmierung in FTC - Gunook

Video: Ereignisgesteuerte Programmierung in FTC - Gunook

Video: Ereignisgesteuerte Programmierung in FTC - Gunook
Video: Vorlesung Betriebssysteme und Sicherheit – 05.1 Schedulingstrategien für Echtzeitsysteme 2024, November
Anonim
Ereignisgesteuerte Programmierung in FTC
Ereignisgesteuerte Programmierung in FTC

In diesem Jahr hat unser Team viel Arbeit mit der ereignisgesteuerten Softwareentwicklung für unseren Roboter geleistet. Diese Programme haben es dem Team ermöglicht, autonome Programme und sogar wiederholbare Tele-Op-Ereignisse genau zu entwickeln. Da die erforderliche Softwarearbeit komplex ist, haben wir uns entschieden, unser Wissen über die Entwicklung von ereignisgesteuertem Code für FTC-Roboter zu teilen.

Schritt 1: Was ist ereignisgesteuerte Programmierung?

Im Allgemeinen ist ereignisgesteuerte Programmierung laut Techopedia die Entwicklung von Programmen, die auf Benutzereingaben reagieren. In diesem Sinne gelten viele Programme als ereignisgesteuert, einschließlich des Tele-Op-Programms eines Teams, das auf Eingaben von einem von Menschenhand gesteuerten Controller angewiesen ist, um eine Aktion auszuführen. In Bezug auf die Arbeit, die unser Team geleistet hat, geht es bei der ereignisgesteuerten Programmierung jedoch darum, Software aus verschiedenen Eingaben zu erstellen; mit anderen Worten, wir dokumentieren Ereignisse basierend auf den Eingaben von Controllern und Sensoren, dann können wir diese Ereignisse in die Warteschlange stellen und die Datei verwenden, um das aufgezeichnete Ereignis erneut auszuführen.

Diese Methode zur Entwicklung von Programmen für unseren Roboter hat mehrere Vorteile:

  • Es ermöglicht uns, genaue autonome Programme zu erstellen. Da wir die Software während der Veranstaltung in Echtzeit erstellen, sind die gesammelten und verwendeten Sensorwerte sehr genau, da sie direkt aus der ursprünglichen Veranstaltung stammen.
  • Es ermöglicht uns, schnell autonome Programme zu erstellen. Das Erstellen autonomer Programme ist so einfach wie das Aufzeichnen einer Reihe von Ereignissen und das Anpassen des Ereignisses nach Bedarf.
  • Es ermöglicht uns, automatische Prozesse für Tele-Op zu erstellen. Bei wiederholten Aktionen im Tele-Op ermöglicht uns die ereignisgesteuerte Programmierung, diese Aktionen aufzuzeichnen und das Ereignis während der fahrergesteuerten Spielperioden einer Taste zuzuordnen. Diese automatisierten Ereignisse können durch Sensoren beeinflusst werden, um ihre genaue Ausführung zu ermöglichen.

Schritt 2: Logischer Fluss der ereignisgesteuerten Programmierung

Logischer Fluss der ereignisgesteuerten Programmierung
Logischer Fluss der ereignisgesteuerten Programmierung

Im Folgenden wird der logische Ablauf eines ereignisgesteuerten Programms dargestellt: Rot steht für das Anlegen eines Ereignisses und Blau für den Aufruf des Ereignisses. Um ein Ereignis zu erzeugen, wird eine Folge von Eingaben durch Roboteraktionen aufgenommen und als Ereignisse aufgezeichnet; diese Ereignisse werden in eine Datei geschrieben. Zum Aufrufen eines Ereignisses wird diese Datei gelesen und die Eingaben werden an einen Ereignisprozessor gesendet, um den Dateicode in eine Roboteraktion umzuwandeln.

Schritt 3: Ereignis-Ersteller

Event-Ersteller
Event-Ersteller
Event-Ersteller
Event-Ersteller

Ereignisersteller werden verwendet, um Aktionen oder „Ereignisse“basierend auf einer Vielzahl von Sensoren und Schaltflächen zu dokumentieren. Während der Roboter Aktionen auf dem Feld ausführt, erstellt eine Ereigniserstellerklasse parallel Ereignisse für jede dieser Aktionen und verweist auf das in einer Ereignisklasse klassifizierte Ereignis. Nach der Erstellung wird das Ereignis in eine Warteschlange von Ereignissen in der Ereignisklasse gestellt: Das erste Ereignis nimmt den ersten Platz ein, dann nimmt das zweite Ereignis den ersten Platz ein und schiebt alle Ereignisse darunter nach unten, und dies wird fortgesetzt, bis das Programm stoppt. Wenn das Programm gestoppt wird, werden die Ereignisse in eine für Menschen lesbare Formatdatei ausgegeben, z. B. eine JSON-Datei. Diese Datei kann verwendet werden, um autonome Routinen besser zu verbessern.

Der obige Beispielcode richtet die Parameter für das Ereignis ein, das in diesem Fall ein Abbiegen mit einem IMU-Sensor ist. Wir stellen das Ereignis dann in die Ereigniswarteschlange ein. Schließlich kürzen wir das Ereignis, das im Wesentlichen das Ereignis zurücksetzt, damit wir es verwenden können, um zukünftige Ereignisse in die Warteschlange zu stellen.

Schritt 4: Ereignisprozessor

Ereignisprozessor
Ereignisprozessor
Ereignisprozessor
Ereignisprozessor

Ereignisklassen nehmen die von Menschen lesbare Datei, die in der Ereigniserstellerklasse erstellt wurde, und führt aus, was jedes Ereignis in der Warteschlange vorgibt, indem sie Methoden aufrufen, die in einer Ereignisprozessorklasse beschrieben sind. Die Ereignisprozessorklasse teilt dem Roboter dann mit, welches Ereignis wiedergegeben werden soll. Egal, ob es sich um ein einfaches "Vorwärtsfahren"-Ereignis oder um ein komplexes Ereignis voller Entfernungen, Wendungen und Strafen handelt, der Prozessor wird jedes ihm zugewiesene Ereignis wiederholen. Dieser Prozess ist während der Autonomie sehr nützlich, da ein Team Sensoren und Tele-Op-Aktionen vor dem Abgleich aufzeichnen und dann die Ereignisse in Autonomie einfach wiederholen kann. Dieser Vorgang wird Memory Replay genannt. Dies ermöglicht, dass ein autonomes Programm über eine einzige Datei zu 100 % konfigurierbar ist. Sobald der Ereignisersteller und -prozessor eingerichtet ist, kann ein Team einfach autonome Routinen über die menschenlesbare Datei ändern.

Das obige Beispiel beginnt zunächst damit, die JSON-Datei auf ein Ereignis zu überprüfen und dann dieses Ereignis mithilfe einer case-Anweisung zu überprüfen, um zu sehen, um welche Art von Ereignis es sich handelt, in diesem Fall eine Abbiegung mithilfe eines IMU-Sensors. Sobald es anhand des IMU-Ereignisses erkennt, dass es an der Reihe ist, befasst es sich mit der Verarbeitung des Ereignisses, was normalerweise das Ausführen des Codes umfasst, von dem das Ereignis stammt, indem Variablen des Ereignisses verwendet werden, um das zuvor ausgeführte Ereignis zu replizieren.

Empfohlen: