CompAIR@Home Robo4you, Wettbewerb 2021 - Jahr 2020/21
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Robo4you, Wettbewerb 2021 compAIR@Home Joel Klimont, Konstantin Lampalzer, Florian Zachs Jahr 2020/21
0.1 Revisions • 08.01.2021 - Erstellen des Dokuments • 17.01.2021 - Zeitplan anpassen • 18.01.2021 - Bessere Definition der Zonen für das Parken und SimonSays. Code Review angepasst. Formel zur Berechnung der Gesamtpunkte ist jetzt vorhanden. Anpassen der Punkte für das Parken und für SimonSays. • 21.01.2021 - Mittellinie ist jetzt dünner • 22.01.2021 - Seeding Score geändert, Strafzeit ausgebessert • 28.01.2021 - Gameboard angepasst, Strafzeiten angepasst, kleine Änderungen im Code- Review, API-Definition für Seeding erstellt • 11.02.2021 - Gameboard angepasst, API-Definition für Double-Elimination erstellt, API- Definition für Seeding angepasst, Linien Regel angepasst, Uploadplattform beschrieben 2
Inhaltsverzeichnis Inhaltsverzeichnis 0.1 Revisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1 Wettbewerb 5 1.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2 Spielfeld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 Allgemeine Regeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 AruCo Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5 Trainings-Runden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.6 Code Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.7 Ablauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2 Seeding 11 2.1 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 Zonen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3 Regeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.4 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5 Seeding Score . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.6 Kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.7 API Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.7.1 Parken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.7.2 SimonSays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3 Double Elimination 18 3.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2 Ablauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.1 Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.2 Match . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.3 Ende . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.3 Power-Ups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.4 API Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.4.1 Positionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.4.2 Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4 Gesamtpunkte 23 4.1 Code-Review . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.2 Seeding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.3 Double Elimination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3
Inhaltsverzeichnis 4.4 Overall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5 Uploadplattform 24 4
1 Wettbewerb 1 Wettbewerb 1.1 Überblick Autonomes Fahren wird immer präsenter und, um mit Tesla konkurrieren zu können, plant der robo4you Verein sein eigenes voll-autonomes Auto. Die Aufgabe ist es einen Prototyp zu erstellen, der unter anderem von selbst einparken kann, Ampeln richtig erkennt. . . 5
1 Wettbewerb Abbildung 1.1: Seeding Spielfeld, Spielfeld mit Beschreibung Abbildung 1.2: Double Elimination Spielfeld, Spielfeld mit Beschreibung 6
1 Wettbewerb 1.2 Spielfeld Das Spielfeld wird durch eine bedruckte Matte dargestellt. Sie wird mit verschiedenen Far- ben und ArUco Tags bedruckt, die dem Roboter helfen, sich zu orientieren. Bei jedem der 2 Teilwettbewerbe besteht das Spielfeld aus jeweils einem unterschiedlichen Spielfeld. Definition 1.1: Spielfeld • Maße - 1.50m x 1.75m • Toleranz - Alle angegebenen Maße ±2.5% • Begrenzung - Das Spielfeld wird durch eine schwarze Linie am äußeren Rand begrenzt. Definition 1.2: Grundlagen • Team - Besteht aus maximal 5 Personen. • Roboter - Der Roboter darf nicht physisch modifiziert werden. • Programmiersprache - Beim Wettbewerb wird nur Python-Code ausgeführt. • Mentoren - Jedem Team wird mindestens ein Mentor zugewiesen, der Unterstüt- zung leistet. • Datum - Der Wettbewerb wird im April 2021 stattfinden. 7
1 Wettbewerb 1.3 Allgemeine Regeln Definition 1.3: Allgemeine Regeln §1 Kommunikation - Während des Turniers darf keine externe Kommunikation (z. B. IR, Bluetooth oder Wlan) verwendet werden, ausgenommen ist die Kommunikation mit dem Turnierserver. §2 Fair Play - Jedes Team, das gegen die Kommunikationsregeln verstößt, indem es die Roboter eines anderen Teams hackt oder Ausrüstung manipuliert, verstößt gegen das ”Fair Play” und kann für den Rest des Turniers disqualifiziert werden. §3 Mentoren - Jedem Team ist mindestens ein Mentor zugewiesen. Dieser darf Hilfe leisten und das Team unterstützen, aber nicht aktiv am Code mitarbeiten. Mentoren dürfen während dem Wettbewerb nicht Antritte ihres eigenen Teams als Juroren bewerten. §4 Reruns - Eine Wiederholung eines Antritts ohne extra Strafzeit ist immer dann erlaubt, wenn dieser durch einen Fehler der Juroren/ der Technik (Stream, API Server, Roboter Hardware) frühzeitig beendet werden muss. Wiederholungen können vom Team, oder dem Juror gefordert werden und müssen vom leitenden Juror abgesegnet werden. 1.4 AruCo Tag ArUco Tags dürfen mit der Kamera erkannt werden und können zur Positionsbestimmung des Roboters verwendet werden. Die ArUco Tags können auf der Webseite ArUco Tag Generator generiert und ausgedruckt werden. Dazu stellt man das Dictonary auf 6x6 und gibt die Marker-ID an. 1.5 Trainings-Runden Die Trainings-Runden starten eine Woche vor dem Wettbewerb. Teams bekommen eine gewisse Anzahl an Credits gutgeschrieben und können diese für Timeslots eintauschen. Die Teams können so ihren Code vor dem Wettbewerb testen und bekommen Feedback von den Juroren und Mentoren. 1.6 Code Review Ein Teil des finalen Punktestandes besteht aus einem Code-Review. Dabei wird den Teams Feedback zu ihrer Seeding-Implementation gegeben. Der Review-Prozess läuft folgendermaßen ab: 8
1 Wettbewerb 1. Es wird von Teams der Code eingereicht. 2. Alle Einreichungen werden jeweils mit allen anderen verglichen, es ergeben sich also insgesamt ∗ Vergleiche. 3. Diese Vergleiche werden dann zufällig auf die Mentoren aufgeteilt, wobei diese bestimmen, welche von beiden Einreichungen die ”bessere” Implementierung ist. 4. Am Schluss werden die Punkte wie folgt berechnet: Jedes Mal, wenn ein Code als ”besser” bewertet wurde, gibt es einen Punkt, und wenn ein Code als ”schlechter” bewertet wurde wird ein Punkt abgezogen. ( − ) ∗ 100 + 100 = (1.1) 2 Dadurch wird ein Score zwischen 0 und 100 berechnet, woraus ein Ranking gebildet wird. Aus der Platzierung im Ranking wird dann wiederum ein Score berechnet, der den Score des Code-Reviews darstellt (siehe Code-Review). 9
1 Wettbewerb Achtung, der Code wird sehr Subjektiv von allen Mentoren bewertet. Dabei wird ein besonderes Augenmerk auf folgende Punkte gelegt: • Lesbarkeit, Konsistenz; wie einfach ist es, Abschnitte des Codes zu lesen und zu ver- stehen; dies umfasst die Klarheit des Codes, die Einfachheit und die Dokumentation. • Vorhersagbarkeit, Zuverlässigkeit und Robustheit; das Verhalten der Software sollte vorhersagbar sein und nicht anfällig für versteckte Fehler. • Wartbarkeit und Erweiterbarkeit; das Reparieren, Aktualisieren und Verbessern von Software sollte so einfach wie möglich und nicht von Natur aus komplex sein. Der Code sollte vor allem simpel und lesbar sein. Wie viele Punkte mit dem Code im Seeding erzielt worden sind, ist für diese Bewertung irrelevant. Siehe DRY, KISS 1.7 Ablauf Zeitplan 1.1: Wettbewerb Plan • 29. Jänner 2021 Ausgabe der Roboter • ab 19. April 2021 Training • 23. April 2021 Seeding Wettbewerb • 24. April 2021 Double Elimination Wettbewerb 10
2 Seeding 2 Seeding 2.1 Übersicht Der Seeding-Teil des Wettbewerbs ist der Grundstein der Bewertung. Dabei fährt jeweils ein Roboter alleine auf dem Spielfeld um einen Parkour in möglichst geringer Zeit zu absolvieren. Sobald der Roboter die Startzone verlässt, startet automatisch die Zeit und läuft, bis die Zielzone erreicht wird. Durch das Lösen verschiedener Aufgaben wird dem Roboter Zeit gutgeschrieben, die am Ende von der Parkourzeit abgezogen wird. Das Ziel ist es, eine möglichst geringe Gesamtzeit zu erzielen. 2.2 Zonen Das Spielfeld ist im Seeding-Bewerb in mehrere Zonen unterteilt. Siehe Spielfeld mit Beschrei- bung. Es gibt eine Start- und eine Endzone. Am Anfang wird der Roboter von den Juroren in die Startzone gestellt und das Programm der Teams gestartet. Wenn nach mehr als 5 Minuten die Endzone nicht erreicht wurde, wird der Durchgang abgebrochen und mit 5 Minuten gewertet. Zum Abschließen eines Durchlaufs ist es also mindestens erforderlich der schwarzen Linie zu Folgen und so vom Start zum Ziel durch den Pakour zu navigieren. In allen Zonen, außer der Start- und Endzone, können im Seeding Wettbewerb Punkte gesammelt werden. 11
2 Seeding Abbildung 2.1: Spielfeld mit Beschreibung 2.3 Regeln Nachfolgende Regeln gelten während dem Antritt beim Seeding-Teil des Wettbewerbs. Sie definieren den genauen Spielverlauf, weshalb ihnen strikt zu folgen ist. Sind Regeln nicht genau genug definiert, ist stets nachzufragen. Werden Grauzonen ausgenutzt, liegt die Interpretation in den Händen des leitenden Juroren. 12
2 Seeding Definition 2.1: Seeding Regeln §5 Spielfeld - Das Spielfeld ist durch den Rand der Matte begrenzt und darf nicht verlassen werden. Wird der Rand der Matte mit einem Teil des Roboters überschrit- ten, ist der Antritt ungültig. Er darf beliebig oft wiederholt werden, wobei jeder Neuantritt mit einer zusätzlichen Strafzeit von 30 Sekunden startet. Wird nach mehreren Versuchen aufgegeben (oder beträgt die Strafzeit bereits 5 Minuten), wird der Antritt mit der Höchstzeit von 5 Minuten gewertet. §6 Begrenzungslinien - Der Parkour wird durch zwei Zentimeter dicke schwarze Linien getrennt. Ein grobes, absichtliches oder wiederholtes Überfahren dieser Linien wird wie in §5 gewertet und liegt im Ermessen des leitenden Juroren. Die Mittellinie, die sich durch den Parcours zieht, ist von dieser Regel ausgenommen und darf zur Orientierung genutzt werden. Auch ausgenommen sind breitere Linien welche die Mittellinie schneiden: Dazu zählt die Linie welche kurz vor der SimonSays Zone liegt und die Linie kurz vor der Ampel. Beide Linien sind nur soweit von der Regel ausgenommen bis sie eine andere schneiden, welche nicht die Mittellinie ist. §7 Zeitmessung - Die Zeitmessung startet automatisch, sobald der Mittelpunkt des Roboters die Startzone verlässt. Wenn der Mittelpunkt des Roboters in die Zielzone einfährt, wird die Zeitmessung wieder gestoppt. Wird der Zielbereich nicht innerhalb von 5 Minuten erreicht, wird der Run abgebrochen und mit der Höchstzeit von 5 Minuten bewertet. Der Roboter muss am Ende in der Zielzone stehen bleiben. §8 Roboter - Beim Antritt dürfen nur Teile aus dem Kit mit Ausnahme des Ladegerätes verwendet werden. Es darf keine physische Veränderung am Roboter oder an den Bauteilen vorgenommen werden. Beim Wettbewerb wird dem Team ein zufälliger Roboter zugewiesen. Das jeweils antretende Team muss bis zum Anfang der Runde den Code zur Verfügung stellen. Siehe: Uploadplattform §9 Zielzone - Sobald der Roboter die Zielzone erreicht muss dieser selbständig stehen- bleiben. Sollte der Roboter einfach weiter Fahren und eine Linie überschreiten wird dies wie in §5 gewertet. 2.4 Aufgaben Nachfolgende Aufgaben können freiwillig absolviert werden. Werden Aufgaben erfolgreich gelöst, wird dem Teilnehmer Bonuszeit aufgerechnet, die am Ende des Antritts von der Parkour- zeit abgezogen wird. Die dadurch gewonnene Zeit ist bei durchschnittlicher Programmierung größer als der Zeitaufwand für das Lösen der Aufgaben. Die Aufgaben können separat gelöst werden und haben keinerlei Zusammenhänge untereinander. Nur wenn die jeweilige Aufgabe vollständig gelöst wird, wird die Bonuszeit am Ende abgezogen. Aufgaben können jederzeit ver- lassen und abgebrochen werden, allerdings wird in diesem Fall keinerlei Bonuszeit angerechnet 13
2 Seeding (Ausnahme: SimonSays). Der Roboter startet schon mit zwei Minuten auf der Uhr. Aufgabe 2.1: Autonomes Parken Parkplätze - Die vier mit roten Linien begrenzten Boxen stellen Parkplätze dar, während die grün markierte Box einen Parkautomaten darstellt. Zur Lösung der Aufgabe muss der Roboter zuerst mit dem API-Aufruf /getPark ein Parkticket kaufen, wozu er vollständig innerhalb der Parkautomatenbox stehen muss. Steht er nicht vollständig in der Box, bekommt er einen HTTP Error 403 (Forbidden) als Antwort. Bei diesem API-Aufruf wird die Zeitmessung für die Aufgabe gestartet. Danach muss der Roboter in die ihm durch die API-Anfrage zugeteilte Parkbox fahren. Dazu muss unter Einhaltung aller anderen Regeln der Mittelpunkt des Roboters für mindestens 5 Sekunden innerhalb der Parkbox gehalten werden. Danach muss der Roboter wieder zurück zum Parkautomaten fahren und sein Ticket bezahlen. Dazu muss er wieder vollständig innerhalb der Parkautomatenbox stehen und mit der API-Anfrage /payPark sein Ticket bezahlen. Jetzt wird die Zeitmessung für diese Aufgabe wieder gestoppt und zur Bonuszeit gerechnet. Siehe Seeding Score. IDs - Die ID, welche von der API zurückgegeben wird bezieht sich auf folgende Zone: ID Zone 0 Obere Linke Zone 1 Obere Rechte Zone 2 Untere Linke Zone 3 Untere Rechte Zone 14
2 Seeding Aufgabe 2.2: SimonSays SimonSays - Die Aufgabe kann gestartet werden, indem sich der Roboter in einer der vier Zonen positioniert und danach den API Endpunkt /simonSays aufruft. Dieser gibt ein JSON Objekt der Form {”id”: 0} zurück. Die linke obere Zone hat die id=0, die rechte obere Zone die id=1, die rechte untere Zone die id=2 und die Linke untere Zone die id=3. Sobald die Aufgabe beendet wurde, wird nur noch die id=-1 vom Server zurückgegeben. Nachdem der Roboter die Aufgabe gestartet hat, muss er sich schnellstmöglich in die Zone bewegen, welche der Server ihm geschickt hat. Sobald er die Zone erreicht hat, muss er wieder den API Endpunkt /simonSays aufrufen um die nächste Zone zu erhalten. Die Zeit wird jeweils vom letzten API aufruft bis zum nächsten gemessen, dies wird als eine ”Iteration” bezeichnet. Maximal sind fünf Iterationen möglich, wobei beim zweiten API Aufruf der letzten Iteration -1 als ID von der API zurück gegeben wird. Für die Berechnung der Bonuszeit siehe Seeding Score. ArUco Tags - Die Zonen können erkannt werden, indem mit der Kamera die ArUco Tags getrackt werden. Die Tags haben jeweils die = + 10. Also hat zum Beispiel der ArUco Tag in der Zone mit der id=0 (obere linke Zone) die Id 10. Siehe AruCo Tag für mehr Informationen. ID Tag Zone 0 10 Obere Linke Zone 1 11 Obere Rechte Zone 2 12 Untere Linke Zone 3 13 Untere Rechte Zone Aufgabe 2.3: Ampel Ampel - Bei dieser Aufgabe muss der Roboter vor der blauen Linie stehen bleiben, solange die Ampel Rot zeigt. Die Ampel wird durch ein Smartphone dargestellt, welches auf eine vorbereitet Website zugreift. Je nach Status der Ampel zeigt dieses Handy rot oder grün an. Nach einer zufälligen Rotphase von 10 bis 15 Sekunden schaltet die Ampel um und nach einer Grünphase von 5 Sekunden schaltet sie wieder auf Rot. Befindet sich der Roboter auf der Linie, während die Ampel Rot zeigt, wird eine Strafzeit aufgerechnet. Die Strafzeiten sind in Abbildung 2.2 ersichtlich. Aufgabe 2.4: Slalom Slalom - Bei dieser Aufgabe muss der Roboter durch den Slalom fahren, ohne die gelben Streifen zu berühren. Wird ein gelber Streifen mit einem Reifen berührt, wird eine Strafzeit aufgerechnet. Die Strafzeiten sind in Abbildung 2.2 ersichtlich. 15
2 Seeding 2.5 Seeding Score Abbildung 2.2: Berechnung des Seeding Scores 2.6 Kit Das Kit beinhaltet alle benötigten Teile, um beim Bewerb teilzunehmen. Das Herzstück ist das ”Freenove 4WD Smart Car Kit” - es beinhaltet alle Bauteile des Roboters. Zusätzlich beinhaltet das Bewerbskit den dazu notwendigen Raspberry Pi 3B+, die Mikro-SD Karte, ein Ladegerät und die bedruckte Matte, die das Spielfeld darstellt. 2.7 API Definition 2.7.1 Parken API Aufruf: /api/getPark • Wenn der Roboter in der richtigen Zone steht und die Aufgabe nicht schon einmal abgeschlossen hat, wird eine ID zwischen 0. . . 3 zurückgegeben. 16
2 Seeding • Wenn der Roboter nicht in der richtigen Zone ist, wird die ID −1 mit dem Status Code 403 (Forbidden) zurückgegeben. Beispiele: Status Code Example Response 200 Json: {'' id '': 0} 403 Json: {'' id '': −1} API Aufruf: /api/payPark • Wenn der Roboter die Aufgabe richtig erfüllt hat und wieder in der richtigen Zone steht, wird ein leerer Body mit Status Code 204 zurückgegeben. • Wenn der Roboter nicht in der richtigen Zone steht, oder nicht in der richtigen Parkzone für 5 Sekunden gestanden ist, wird ein 402 Error mit leerem Body zurückgegeben. Beispiele: Status Code Example Response 204 402 2.7.2 SimonSays API Aufruf: /api/simonSays • Sobald der Roboter in einer richtigen Zone steht, wird die nächste ID, zu der er sich bewegen soll, mit einem Status Code von 200 zurückgegeben. • Sobald der Roboter 5 Mal einen gültigen Request geschickt hat, wird nur noch −1 als ID mit dem Status Code 200 zurückgegeben. • Wenn der Roboter nicht in der richtigen Zone steht, wird die ID −1 mit dem Status Code 403 zurückgegeben. Beispiele: Status Code Example Response 200 Json: {'' id '': 0} 200 Json: {'' id '': −1} 403 Json: {'' id '': −1} 17
3 Double Elimination 3 Double Elimination 3.1 Allgemeines Abbildung 3.1: Spielfeld mit Beschreibung Beim Double-Elimination-Teil des Bewerbs treten die Teilnehmer in einem Turnier gegeneinan- der an. Es spielen jeweils zwei Teams gegeneinander und arbeiten sich so im Turnier hoch. Die Startverteilung ist abhängig von den erreichten Zeiten im Seeding und wird vom Veranstalter festgelegt. Ein Team ist aus dem Double Elimination-Turnier ausgeschieden, wenn es zwei Spiele verloren hat. Im weiteren Verlauf des Turniers wird die Reihenfolge der Spiele für die konkurrierenden Teams mithilfe der Turniersoftware festgelegt. Siehe Double knock-out für eine genauere Beschreibung des Ablaufs. 18
3 Double Elimination 3.2 Ablauf 3.2.1 Start Bevor das Match gestartet ist, gibt der Server den Punkt (0, 0) mit dem Status Code 503 zurück. Die Roboter müssen dann so lange die Anfrage auf / api /getGoal wiederholen, bis der Server eine gültige Position mit dem Status Code 200 zurückgibt. Erst dann startet das Spiel. 3.2.2 Match Der Server generiert eine zufällige Zielposition, die von den Robotern so schnell wie möglich erreicht werden muss. Es fahren jeweils zwei Roboter gegeneinander. Der erste Zielpunkt wird in die Mitte des Spielfeldes gesetzt. Sobald der Mittelpunkt eines Roboters weniger als 25 Zentimeter vom Zielpunkt entfernt ist, bekommt er einen Punkt und ein neuer Zielpunkt wird generiert. Die Zielposition ist ein virtueller Punkt, der vom Server generiert wird und im Livestream für Zuschauer eingeblendet wird. Außerdem kann über Serveranfragen die Zielposition, sowie die eigene Position und die Position des Gegners abgefragt werden. Dieser Ablauf wird für zwei Minuten wiederholt, danach ist das Match zu Ende. 3.2.3 Ende Das Match wird nach zwei Minuten vom Server beendet, indem er die Zielposition (0, 0) mit dem Status Code 503 zurückgibt. Der Roboter, der am Ende der 2 Minuten mehr Punkte gesammelt hat, gewinnt das Match. Die Punkte haben keinerlei weiteren Einfluss. Definition 3.1: Gleichstand §10 Gleichstand - Sollte es nach 2 Minuten zu einem Gleichstand kommen kann es zu einer der folgenden zwei Situationen kommen: • Weniger als 5 Punkte im Durchgang: Der Roboter, dessen Stromschalter näher an der Mitte des Spielfelds ist gewinnt. • Mehr als 5 Punkte im Durchgang: Der Durchgang wird um 30 Sekunden verlängert. Sollte es wieder zu einem Gleichstand kommen kann die Zeit noch einmal erhöht werden. 3.3 Power-Ups Um das Spiel zu spannender zu gestalten, werden zu folgenden Zeiten im Durchlauf Power-Ups generiert: 10s, 30s, 60s, 90s. Diese Power-Ups bleiben so lange liegen, bis sie von einem Team eingesammelt werden, um sich einen Vorteil zu erspielen. Die Power-Ups werden sofort aktiviert. Jedes Power-Up kann nur einmal im Spiel vorkommen. 19
3 Double Elimination Hackerman - ID: 0 - Ihr Team konnte billigen Schrott von einem Hacker erweben. Der Gegner bekommt 5 Sekunden lang keine Antworten mehr vom Server. Radar - ID: 1 - Black Friday - Sie bekommen günstig ein Radar von amerikanischen Preppern. Somit können Sie für die nächsten 10 Sekunden alle Positionen durchgehend bestim- men. Copy and Paste - ID: 2 - Ups - Der Programmierer hat sich verklickt! Es wird ein weiterer Zielpunkt generiert. Cut - ID: 3 - Der Judge ist ausgerutscht und am Backspace angekommen. Das Ziel wird gelöscht und in 5 Sekunden neu generiert. Tardis - ID: 4 - Reise in die Zukunft und bekomme die Position des nächsten Zielpunktes frühzeitig. 3.4 API Definition 3.4.1 Positionen API Aufruf: /api/getPos • Gibt die eigene Position des Roboters in Zentimetern, relativ zur oberen Linken Spielfeld- kante, zurück. • Manchmal kann es vorkommen, dass die Position vom Server, für eine kurze Zeit lang nicht festgestellt werden kann, in diesem Fall wird die letzte bekannte Position des Roboters zurückgegeben. • Solange das Spiel nicht gestartet ist, wird die Position {'' x '': 0, '' y '': 0, '' degree '': 0} mit dem Status Code 503 zurückgegeben. Beispiele: Status Code Example Response 200 Json: {'' x '': 50, '' y '': 75, '' degree '': 90} 503 Json: {'' x '': 0, '' y '': 0, '' degree '': 0} API Aufruf: /api/getOp • Gibt die Position des gegnerischen Roboters in Zentimetern, relativ zum eigenen Roboter, zurück. 20
3 Double Elimination • Manchmal kann es vorkommen, dass die Position vom Server, für eine kurze Zeit lang nicht festgestellt werden kann, in diesem Fall wird die letzte bekannte Position des gegnerischen Roboters zurückgegeben. • Solange das Spiel nicht gestartet ist, wird die Position {'' x '': 0, '' y '': 0, '' degree '': 0} mit dem Status Code 503 zurückgegeben. Beispiele: Status Code Example Response 200 Json: {'' x '': 50, '' y '': 75, '' degree '': 90} 503 Json: {'' x '': 0, '' y '': 0, '' degree '': 0} API Aufruf: /api/getGoal • Gibt die aktuelle Position des Spielfelds relativ zum Roboter zurück. • Wenn es derzeit keinen Zielpunkt gibt, wird ein Punkt mit den Koordinaten von (0, 0) mit dem Status Code 200 zurückgegeben. (z.B. durch das Item welches einen Zielpunkt entfernt) • Wenn das Match noch nicht gestartet ist und es keinen Zielpunkt gibt, wird ein Punkt mit den Koordinaten (0, 0) und dem Status Code 503 zurückgegeben. • Wenn das Match zu Ende ist, wird ein Punkt mit den Koordinaten (0, 0) und dem Status Code 503 zurückgegeben. Beispiele: Status Code Example Response 200 Json: {'' x '': 50, '' y '': 75} 200 Json: {'' x '': 0, '' y '': 0} 503 Json: {'' x '': 0, '' y '': 0} 3.4.2 Items API Aufruf: /api/getItems • Gibt eine Liste aller Items zurück, die derzeit am Spielfeld liegen. Jedes Item besteht aus einer ID und seinen Koordinaten relativ zum Spieler in Zentimeter. Die Item ID ist unter Power-Ups definiert. Der Status Code ist 200. • Wenn es keine Items gibt, wird ein leeres Array mit dem Status Code 200 zurückgegeben. • Wenn das Match noch nicht gestartet ist, wird ein leeres Array mit dem Status Code 503 zurückgegeben. • Wenn das Item ”Copy and Paste” eingesammelt wurde, wird der neue Zielpunkt im Items Array zurückgegeben. Das Item hat dann die Form: Json: {" id ": 12, "x ": 50, "y ": 75} 21
3 Double Elimination • Wenn das Item ”Tardis” eingesammelt wurde, wird der nächste Zielpunkt im Items Array zurückgegeben. Das Item hat dann die Form: Json: {" id ": 14, "x ": 50, "y ": 75} und ist nur für den Spieler sichtbar, der das Item eingesammelt hat. Beispiele: Status Code Example Response 200 Json: [{" id ": 1, "x ": 50, "y ": 75}] 200 Json: [] 503 Json: [] 200 Json: [{" id ": 1, "x ": 50, "y ": 75}, {" id ": 14, "x ": 125, "y ": −50}] 22
4 Gesamtpunkte 4 Gesamtpunkte Die Gesamtpunktzahl eines Teams ergibt sich aus der Summe der Punkte für Seeding, Double Elimination und Codebewertung. 4.1 Code-Review 1 − + 1 = ∗ (4.1) 2 4.2 Seeding 3 − + 1 1 = ∗ + ∗ (4.2) 4 4 4.3 Double Elimination − + 1 = (4.3) 4.4 Overall = + + (4.4) Hinweis für alle Formeln: n = Anzahl der Teams beim Turnier 23
5 Uploadplattform 5 Uploadplattform Die Uploadplattform wird kurz vor dem Wettbewerb freigeschaltet. Die Teams können dort vor jedem Run ihren Code Hochladen und dieser wird vor jedem Antritt automatisch auf die Roboter übertragen. 24
Sie können auch lesen