Robotik Erfahrungen Q1

 

Einleitung

Hallo liebe Leser,

Mein Name ist Alex und ich habe den Robotik Kurs, der in der Q1 angeboten wird, gewählt. Wir sollten mit Lego und einem Brick (quasi ein kleiner Computer mit je vier Anschlüssen für verschiede Sensoren und Motoren) einen Roboter Bauen. Trotz einiger Schwierigkeiten würde ich jedem der sich für Informatik oder Robotik interessiert ans Herz legen diesen Kurs zu wählen.

Unsere erste Idee kam als wir mitbekommen haben wie sich eine Gruppe für einen Schach Roboter entschieden hat und da haben wir die Chance ergriffen und diese Gruppe zu einem Roboter Schach Duell herausgefordert.

Zu diesem Zeitpunkt war ich für das Bauen unseres Roboters verantwortlich und meine Partnerin Josephine für das Programmieren. Als uns dann auffiel, dass ein Schachroboter eine unglaublich Komplexe Konstruktion erfordert, da er sich auf 3 Achsen bewegen muss und ein sehr Präziserer Greifarm benötigt wird, und dass ich was das Bauen eines Roboters angeht eine absolute Niete bin haben wir die Idee dann fallen gelassen.

Dann hatten wir eine ganze Zeit keine Idee gehabt, auf die wir uns einigen konnten, doch als wir dann Späße darüber machten, dass wir Roboter kämpfe veranstalten würden kam uns die Idee, und so forderten wir die Gruppe, die aus Joshua und Lukas bestand zu einem Roboterkampf heraus.

So, jetzt hatten wir eine Idee und die Rollenverteilung haben wir auch optimiert jetzt kann es losgehen, dachten wir zumindest, tja Falsch gedacht ab hier fingen die Probleme gerade erst so richtig an.

 

Komplikationen

Zuallererst werden die Bricks standardmäßig in Java programmiert, allerdings hatte ich sehr viel mehr Erfahrung mit Python (eine andere Programmiersprache, die ich mir schon vorher selbst beigebracht habe) also wollte ich einen Weg finden, wie ich Python anstatt von Java benutzen konnte und den gab es tatsächlich auch. Nach sehr langem Suchen hatten wir eine Möglichkeit gefunden, nämlich mit der Ev3 Extension von Visual Studio Code die Micro Python verwendet. Also haben wir versucht VSC (Visual Studio Code) auf den Schulcomputern zu installieren, schade nur dass das nicht funktioniert, da man auf diesen nichts installieren darf.  Unser nächster Plan war also, dass Josefine einen alten Laptop von zuhause mitbringt, damit wir VSC auf diesem installieren von dort aus programmieren konnten. Nach einigen weiteren Stunden der Verzweiflung haben wir auch das aufgegeben, da dieser Laptop so uralt war, dass die Doppelstunde fast schon vorbei war, bis dieser hochgefahren ist. Letztendlich haben wir uns dann dazu entschieden, VSC auf den Surface von Josefine zu installieren und von dort aus zu arbeiten. Dann gab es noch weitere Probleme auf die Meine Partnerin weiter eingegangen ist.

 

Strategie und weiteres

Als es dann endlich zum programmieren kam mussten wir uns erst einmal eine Strategie ausdenken an unseren Gegner heran zu kommen, also wollten ich mich anfangs an einem Staubsaugroboter orientieren und so lange fahren bis ich eine wand traf und falls ich in einer Ecke ankam einmal diagonal durch die Arena (die ein leerer Klassenraum werden sollte) bis in die nächste Ecke fahren und dabei mit der sogenannten „presence“ Funktion (gibt an ob ein anderer Ultrasonic Sensor in der Nähe ist) des Ultrasonic Sensors, der eigentlich nur die Entfernung zu etwas messen kann,  unsere Gegner ausfindig machen. Als mir dann (nach etwa 10 Sekunden Nachdenken) auffiel wie nachteilhaft diese Strategie aus zahlreichen gründen ist wie zum Beispiel, dass unsere Gegner in den meisten Fällen, nicht direkt von uns angefahren werden und wir ihre genaue Position nicht herausfinden werden gab ich diese Idee auf. Dann fiel mir unsere Endgültige Strategie ein, allerdings noch nicht ganz. Zuerst wollte ich zum nächsten Objekt an unserem Roboter fahren, so habe ich meine Partnerin darum gebeten etwas zu bauen mit dem wir unseren Sensor um 360 Grad drehen können. Mein Plan war es einmal gerade durch den Klassenraum zu fahren und dabei wieder mit der presence Funktion nach einem Ultrasonic Senor zu suchen und dann dorthin zu fahren, da wir dafür allerdings Multithreading (kurz gesagt zwei Dinge gleichzeitig ausführen) brauchten und das nicht von Micropython unterstützt wird mussten wir die Strategie nochmal ein wenig ändern. So kam ich darauf, dass wir zuerst einem halben Meter nach vorne fahren und dann zum nächsten Ultrasonic Sensor fahren, das haben ich gemacht, indem ich unseren Sensor einmal im Kreis drehen und währenddessen 100-mal die Entfernung und den Winkel, indem sich der Sensor befindet als eine Liste in einer Liste (also eine Liste aus Listen) gespeichert haben und dann nach der Liste mit dem geringsten 1. Wert (Entfernung) gesucht habe. Von da an musste ich nur noch den Roboter um denselben Winkel drehen indem wie der Sensor zum Zeitpunkt als die Entfernung am kleinsten war also, wenn sie bei 90 Grad am kleinsten war, habe ich den Senor um 90 Grad gedreht. Falls unser Sensor keinen anderen innerhalb von 2m55cm (maximale Reichweite) gefunden hat ist er nochmal einen halben Meter und das ganze dann so oft biss er etwas findet. Dann kam das Problem auf, dass sich unsere Gegner ja auch bewegen, also habe ich programmiert, dass sobald der Roboter an seinem Ziel angekommen ist, er weiterhin sucht, allerdings nur noch um 60 Grad nach links und Rechts also 120 Grad und immer nach 60 Grad zum nächsten Sensor fährt, geplant war auch noch einen Berührungssensor anzubauen, um herauszufinden wann er unsere Gegner trifft uns diese dann anheben allerdings fehlte uns dazu leider die zeit also kann er sie nur verfolgen. Um Probleme bei Tests zu vermeiden, bei denen unser Roboter auf ein Objekt zufahren sollte, habe ich auch eine Methode geschrieben, um herauszufinden, ob es sich um eine Wand handelt, das habe ich getan, indem ich den Wert kurz vor dem Minimum (600 Millisekunden) ermittelt habe und dann den Unterschied zwischen dieser Distanz und der kleinsten ausgerechnet, falls dieser nicht mindestens 10cm beträgt, wird das Objekt als wand erkannt. Zum Fahren habe ich mich für eine Drive Base entschieden, die mir das Leben um einiges leichter gemacht hat, bei einer Drive Base gibt man verschiedene Werte über den Roboter wie die Breite oder den Durchmesser der Reifen und weiters an und kann sich präzise um eine bestimmt Gradzahl drehen oder eine bestimmte Entfernung fahren.

 

Fazit

Auch wenn es sehr viele Probleme gab und wir uns oft von Herr Eschweiler anhören mussten, dass wir langsam wirklich ein festes Projekt brauchen und er uns auf Grund der Wahl unserer Programmiersprache nicht helfen kann, hat es wirklich sehr viel Spaß gemacht und ich kann es nur weiterempfehlen.