CompAIR@Home Robo4you, Wettbewerb 2021 - Jahr 2020/21

Die Seite wird erstellt Finn-Luca Linke
 
WEITER LESEN
CompAIR@Home Robo4you, Wettbewerb 2021 - Jahr 2020/21
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