Inhoudsopgave:

Gebeurtenisgestuurd programmeren in FTC: 4 stappen
Gebeurtenisgestuurd programmeren in FTC: 4 stappen

Video: Gebeurtenisgestuurd programmeren in FTC: 4 stappen

Video: Gebeurtenisgestuurd programmeren in FTC: 4 stappen
Video: 009 gebeurtenissen programmeren 2024, Juli-
Anonim
Gebeurtenisgestuurd programmeren in FTC
Gebeurtenisgestuurd programmeren in FTC

Dit jaar heeft ons team veel werk verzet met event-driven softwareontwikkeling voor onze robot. Dankzij deze programma's kon het team nauwkeurig autonome programma's en zelfs herhaalbare tele-op-evenementen ontwikkelen. Omdat het softwarewerk dat het vereist complex is, hebben we besloten om de kennis die we hebben opgedaan over het ontwikkelen van gebeurtenisgestuurde code voor FTC-robots te delen.

Stap 1: Wat is gebeurtenisgestuurd programmeren?

In algemene termen is gebeurtenisgestuurd programmeren volgens Techopedia de ontwikkeling van programma's die reageren op gebruikersinvoer. In die zin worden veel programma's als gebeurtenisgestuurd beschouwd, waaronder het tele-op-programma van een team, dat afhankelijk is van de input van een door mensen bestuurde controller om elke actie uit te voeren. In termen van het werk dat ons team heeft gedaan, gaat het bij gebeurtenisgestuurd programmeren echter om het creëren van software op basis van verschillende inputs; met andere woorden, we documenteren gebeurtenissen op basis van de invoer van controllers en sensoren, dan kunnen we deze gebeurtenissen in de wachtrij plaatsen en het bestand gebruiken om de opgenomen gebeurtenis opnieuw uit te voeren.

Deze methode om programma's voor onze robot te ontwikkelen heeft verschillende voordelen:

  • Het stelt ons in staat om nauwkeurige autonome programma's te maken. Omdat we de software in realtime maken terwijl we het evenement ondergaan, zullen de sensorwaarden die worden verzameld en gebruikt zeer nauwkeurig zijn, omdat ze rechtstreeks afkomstig zijn van het oorspronkelijke evenement.
  • Het stelt ons in staat om snel autonome programma's te maken. Het maken van autonome programma's is net zo eenvoudig als het opnemen van een reeks gebeurtenissen en het zo nodig aanpassen van de gebeurtenis.
  • Het stelt ons in staat om automatische processen voor tele-op te creëren. Voor herhaalde acties in tele-op stelt gebeurtenisgestuurde programmering ons in staat om deze acties op te nemen en de gebeurtenis aan een knop toe te wijzen tijdens de door de bestuurder bestuurde perioden van wedstrijden. Deze geautomatiseerde gebeurtenissen kunnen worden beïnvloed door sensoren om een nauwkeurige uitvoering mogelijk te maken.

Stap 2: Logische stroom van gebeurtenisgestuurde programmering

Logische stroom van gebeurtenisgestuurde programmering
Logische stroom van gebeurtenisgestuurde programmering

Het volgende geeft de logische stroom weer van een evenementgestuurd programma: rood geeft de creatie van een evenement weer, en blauw geeft het aanroepen van het evenement weer. Voor het maken van een gebeurtenis wordt een reeks invoer via robotactie opgenomen en als gebeurtenissen geregistreerd; deze gebeurtenissen worden naar een bestand geschreven. Voor het oproepen van een gebeurtenis wordt dat bestand gelezen en de invoer wordt naar een gebeurtenisprocessor gestuurd om de bestandscode om te zetten in robotactie.

Stap 3: Evenementmaker

Evenementmaker
Evenementmaker
Evenementmaker
Evenementmaker

Makers van evenementen worden gebruikt om acties of 'evenementen' te documenteren op basis van verschillende sensoren en knoppen. Terwijl de robot acties uitvoert op het veld, maakt een klasse voor het maken van evenementen parallel evenementen voor elk van die acties, waarbij wordt verwezen naar de gebeurtenis die is geclassificeerd in een gebeurtenisklasse. Nadat het evenement is gemaakt, wordt het in een wachtrij van evenementen in de evenementenklasse geplaatst: het eerste evenement neemt de eerste plaats in, dan neemt het tweede evenement de eerste plaats in en duwt alle evenementen eronder naar beneden, en dit gaat door totdat het programma stopt. Wanneer het programma wordt gestopt, gaan de gebeurtenissen naar een door mensen leesbaar formaatbestand, zoals een JSON-bestand. Dit bestand kan worden gebruikt om autonome routines beter te verbeteren.

De bovenstaande voorbeeldcode stelt de parameters in voor de gebeurtenis, in dit geval een bocht met een IMU-sensor. Vervolgens zetten we het evenement in de wachtrij voor het evenement. Ten slotte kappen we de gebeurtenis af, die in wezen de gebeurtenis opnieuw instelt, zodat we deze kunnen gebruiken om toekomstige gebeurtenissen in de wachtrij te plaatsen.

Stap 4: Gebeurtenisverwerker

Gebeurtenisverwerker
Gebeurtenisverwerker
Gebeurtenisverwerker
Gebeurtenisverwerker

Gebeurtenisklassen nemen het door mensen leesbare bestand dat is geproduceerd in de klasse voor het maken van gebeurtenissen en doet wat elke gebeurtenis in de wachtrij zegt te doen door methoden aan te roepen die zijn beschreven in een gebeurtenisprocessorklasse. De gebeurtenisprocessorklasse vertelt de robot vervolgens welke gebeurtenis opnieuw moet worden afgespeeld. Of het nu een eenvoudig "vooruitrijden"-evenement is of een complex evenement vol afstanden, bochten en strafschoppen, de processor speelt elke gebeurtenis opnieuw af. Dit proces is erg handig tijdens autonoom rijden, omdat een team sensoren en Tele-Op-acties kan opnemen voordat ze overeenkomen en de gebeurtenissen vervolgens eenvoudig autonoom kunnen herhalen. Dit proces wordt Memory Replay genoemd. Hierdoor kan een autonoom programma 100% configureerbaar zijn via een enkel bestand. Zodra de maker en verwerker van het evenement is vastgesteld, kan een team eenvoudig autonome routines wijzigen via het voor mensen leesbare bestand.

Het bovenstaande voorbeeld begint met het controleren van het JSON-bestand op een gebeurtenis en vervolgens die gebeurtenis te controleren met behulp van een case-statement om te zien wat voor soort gebeurtenis het is, in dit geval een beurt met behulp van een IMU-sensor. Zodra het kan zien dat het een beurt is met behulp van de IMU-gebeurtenis, behandelt het vervolgens de verwerking van de gebeurtenis, wat meestal inhoudt dat de code wordt uitgevoerd waar de gebeurtenis vandaan kwam met behulp van variabelen van de gebeurtenis, doorgegeven om de gebeurtenis te repliceren die eerder werd gedaan.

Aanbevolen: