R wie Robotik

Drei Schüler der Hohen Promenade nahmen als Team «Phoenix» an der Robotik-Olympiade (WRO) 2022 teil. Sie qualifizierten sich fürs Schweizer Finale und holten dort den vierten Rang.

Bericht von von Karim Freytag, Jan Wilhelm und Lucien Kissling

Der Roboter hatte nach dem Motto «The Care Robot» Aufgaben in einem Spital zu erfüllen. So musste er die Wäsche machen, Wasserflaschen auf den Tischen verteilen, Bälle in Körbe legen und dabei schauen, dass er weder die Möbel noch die Menschen im Spital verschiebt. Abstrakt gesehen, galt es für den Roboter, nur aus Lego-Teilen bestehend, verschiedene Gegenstände aufzunehmen, zu verstauen und abzulegen sowie er auch durch das Spielfeld navigieren können musste.

Ausserdem gab es noch Zusatzkomponenten, zufällig platzierte Markierungsblöcke entschieden, in welchen Zimmern wir welche Aufgabe erfüllen sollten. Für all diese Aufgaben hat der Roboter in einem Lauf zwei Minuten Zeit. Bei den regionalen Ausscheidungen durften wir nur die einzelnen Legoteile mitnehmen und mussten den Roboter vor Ort zusammenbauen. Danach gab es abwechslungsweise Bau-, Test- und Vorzeigephasen. Ans Finale durften wir den Roboter schon vorgebaut mitnehmen, dafür waren jedoch die Testphasen kürzer.

Roboter

Unser Roboter ist das Herzstück unseres Projekts. Er beinhalten das «Hirn», welches die verschiedenen Motoren basierend auf den Werten der Sensoren ansteuert. Diese Sensoren haben verschiedene Aufgaben: Die zwei vorderen erkennen die Farben der Markierungs- und Waschblöcke.

Aber die verschiedenen Lichtbedingungen erschweren die Erkennung sehr. Wenn wenig Umgebungslicht vorhanden ist, erscheinen die grünen und weissen Markierungsblöcke dunkler, dadurch riskiert der Roboter, die weissen Blöcke als schwarze erkennen. Wenn es jedoch viel Umbgebungslicht hat, verwechselt er manchmal Grün mit Weiss. Deshalb haben wir eine kleine «künstliche Intelligenz» entwickelt, welche bei unterschiedlichen Lichtbedingungen zuverlässig die Farben unterscheiden kann.

Die zwei etwas weiter hinten platzierten Farbsensoren sind nach unten auf die Matte gerichtet. Sie messen das Licht, das von der Matte reflektiert wird, ein Wert zwischen 0 und 100. Mit Hilfe dieser Werte und einem PID-Regler kann der Roboter elegant den Linien auf dem Spielfeld folgen.

Die zwei Motoren an der Unterseite können unabhängig voneinander angesteuert werden, was den Roboter sehr wendig macht. Jedoch sind sie nicht sehr genau, weshalb man sich immer wieder an Wänden und Linien orientieren muss.

Auf dem Roboter befindet sich ein Arm welcher mit einem grossen Motor hoch und runter bewegt werden kann. Jedoch ist dieser etwas eingeschränkt, denn er kann den Arm nicht auf einer vordefinierten Höhe halten. Der zweite Motor am Arm öffnet und schliesst die beiden Greifarme. Diese sind mit 18 Gummiteilen versehen, welche dazu beitragen, die Blöcke und Bälle fest zu halten und mit zu nehmen.

Ein gutes Design für den Roboter kann einem zwar viel Zeit und viele Linien Code sparen. Doch ganz ohne Software geht es dann doch wieder nicht. Unser Projekt ist grösstenteils in der Programiersprache C++ geschrieben. Wir kompilieren die Software lokal auf der WSL (Windows Subsytem for Linux) und schicken dann die ausführbare Datei auf den Debian-Linux basierten EV3-Brick rüber, wo wir es dann ausführten. Wir haben C++ gewählt, da C++ sehr schnell (low-level) und Objekt-orientiert ist. All unsere Objekte (Klassen) und was sie tun haben wir auf dem Padlet Software-Struktur aufgezeigt. Fast alle Posts auf dem Padlet sind einzelne Dateien. Durch den modularen, objektorientierten Ansatz schaffen wir Ordnung und vermeiden Code-Duplicationen. Beispiele sind Technologien wie die Drive-Synchronisation, der PID-Aligner, das Neural Network zur Farbenerkennung oder Implementationen der einzelnen Aufgaben wie der LaundryIn kombinert mit der BallTask oder dem LaundryDrop. Wir können aber nur einen Blick auf das Padlet empfehlen, bitte klicken.

Probleme gab es an allen Enden. So muss der Roboter in einen Würfel von 25x25x25cm reinpassen, aber trotzdem möglichst viele Blöcke aufs mal transportieren. Er soll so schnell wie möglich durch das Spielfeld fahren, aber trotzdem nicht vom Weg abkommen oder die Menschen auf dem Spielfeld verschieben. Der EV3-Brick hat sehr wenig Rechenleistung, soll aber in einem möglichst kurzen Intervall korrigieren. Die Motoren haben eine grosse Ungenauigkeit, die Sensoren messen die Farben ungenau, der Batteriestand beeinflusst das Verhalten der Motoren etc.

Das Wichtigste jedoch war, dass wir bei allen Problemen immer die kreativ blieben und die geeignetsten Lösungen suchten.

Qualifikation

Nachdem der Roboter erstmal lief, war der Fokus natürlicherweise die Qualifikation. Wir nahmen an der Qualifikation in Bern teil, da Sie in Zürich keine freien Plätze mehr hatten. Somit mussten wir, um weiterzukommen, entweder die beiden anderen Teams in Bern schlagen oder in der schweizweiten Tabelle hoch genug dabei sein.

Als der Tag kam, waren wir am Vortag noch bis spät am Arbeiten, Packen und Vorbereiten. Bei der Qualifikation musste alles funktionieren. Der Qualifikationstag selbst begann sehr früh am Morgen, da wir noch nach Bern fahren mussten. Der Tag in Bern begann dann damit, dass man den Roboter zusammenbauen musste. Erneut hilft es, wenn man etwas Simples hat.

Die Bauphase war Bestandteil der ersten zweistündigen Trainingsphase. Somit konnten die Teams, die schneller bauen konnten, früher trainieren. Dann kam der erste von vier offiziellen Läufen. Am Ende des Tages würden die Punktzahl und die Zeit der zwei besten Läufe zusammengezählt werden.

Unseren ersten Lauf jedoch haben wir ruiniert, indem wir einen unnötigen Restart gemacht haben. Dieser hat dazu geführt, dass die Sensoren für die ersten Messungen nicht mehr richtig gemessen haben. In der zweiten Trainingsphase haben wir uns darauf konzentriert, dass nichts mehr in dieser Art passiert, indem wir alles testeten, bevor wir losfuhren.

Wir beendeten mit grossem Frust den Tag auf dem zweiten Rang, wohlwissend, dass wir locker die Qualifikation hätten gewinnen können. Am Montag wurde dann die schweizweite Rangliste veröffentlicht – mit allen Resultaten und erfreulicherweise sind wir weitergekommen. Schweizweit waren wir die Fünftbesten; mit dem vierten Platz nur wenige Punkte weit entfernt.

Finale

Das Finale fing später an, da man nicht mehr den Roboter zusammenbauen musste. Als wir ankamen merkten wir sofort, dass eine andere Stimmung als in den Qualifikationen herrschte. Die Halle in der das Finale statt fand war riesig. Die Läufe der anderen Teams zu sehen war sehr beindruckend. Obwohl wir alle Konkurrenten waren, gaben wir uns gegenseitig Tipps. 

In der Zweiten Trainingsphase trafen wir auf ein Problem, dass nicht leicht zu beheben war. Uns wurde die Kommunikation zwischen den Laptops und dem Roboter unmöglich gemacht. Somit brauchten wir eine gesamte Stunde, um die Verbindung wieder herzustellen. Die restlichen Läufe am Vormittag waren zwar nicht exzellent, aber wir hatten auch keine sehr schlechten Läufe.

Das Mittagsessen war äusserst erfreulich. Dadurch, dass es nicht unendlich Tische gab, sassen wir mit anderen Teams am Tisch. Wir sind alle ungefähr gleich alt und haben deshalb ähnliche Interessen haben. Somit konnte man sehr einfach in ein Gespräch finden. Beim Mittagsessen merkte man auch, dass obwohl manche Teams echt keinen guten Tag hatten, jeder trotzdem Freude hatte und sehr motiviert war. Für den Nachmittag wurde uns dann die lächerlichste Aufgabe aller lächerlichen Aufgaben gestellt. Unser Roboter jedoch war sehr gut dafür geeignet. Trotz diesem Glück merkte man am Nachmittag ganz klar, welche Teams schon mehr Erfahrung hatten und welche weniger. Unser Roboter war zwar gut geeignet für die Aufgabe, aber trotzdem waren wir nur durchschnittlich. Wir konnten mit gutem Abstand Vierte werden. Auch wenn das ein gutes Ergebnis ist für eine erste Teilnahme, waren wir alle etwas frustriert. Wir wussten, dass wir mehr gekonnt hätten und dass mit ein wenig Glück ein Podestplatz sicher gewesen wäre.

Karim, Jan und Lucien