Nun, da wir das Grundkonzept der Cozmo-Roboter kennengelernt haben, durften wir uns nun daran machen, uns eigene Projekte auszudenken und umzusetzen, wobei wir dabei größtenteils auf uns gestellt waren, da Herr Eschweiler, unser Projektkursleiter, sich auch erst seit kurzem mit den Robotern befasst hat und uns nun alles wesentliche beigebracht hatte, was er bis jetzt über die Cozmos wusste. Ich hatte mir überlegt, meine alten Lego-Straßenplatten zu benutzten, um daraus ein individuell gestaltbares Straßensystem zu erstellen, in dem Cozmo dann frei umherfahren kann.
Es gibt vier verschiedene Lego-Platten:
die Kurve,
die Gerade,
die Kreuzung mit drei Mündungen
und die Kreuzung mit vier Mündungen.
Um mit dem Programmieren überhaupt anzufangen, habe ich erst einmal die Platten ausgemessen, und dieses Hilfsbild erstellt:
Dabei hab ich die Grünen Linien als Fahrbahnbegrenzung angesehen, und wollte überall außerhalb der Linien virtuelle Objekte platzieren, sodass Cozmo nur innerhalb der Linien fahren kann. Die Maße sind für alle Platten gleich, da sie ja auch aneinander passen müssen. Als ich Probleme hatte, die Kurve auszumessen, hat mich Herr Eschweiler auf eine Idee gebracht, mit der ich die Kurve nicht ausmessen muss: Indem man den Satz des Pythagoras, welcher „a²+b²=c²“ lautet, an den sogenannten Einheitskreis, ein Kreis mit dem Radius eins, anwendet, kann man die y-Koordinate in Abhängigkeit von der x-Koordinate berechnen. Dabei muss man aber davon ausgehen, dass die Kurven kreisförmig sind, was sich mithilfe eines Zirkels bestätigt hat. Also habe ich den Satz des Pythagoras einfach umgestellt: c steht für die Hypotenuse, die längste Seite eines rechtwinkligen Dreiecks. Diese ist beim Einheitskreis die Strecke zwischen dem Mittelpunkt und einem beliebigen Punkt auf dem Kreis, also der Radius, und somit eins. Außerdem können wir für a und b einfach x und y einsetzen. Damit erhalten wir die Formel „x²+y²=1²“. Diese muss dann nur noch auf y aufgelöst werden, sodass man „y=die Wurzel aus (1-x²)“ erhält. Ein Problem gab es jedoch noch an der Formel: man konnte nur Werte von -1 bis 1 einsetzen und da ich eine for-Schleife verwenden wollte, um die Objekte in Kurvenform zu kreieren, brauchte ich gerade Zahlen. Das konnte ich aber lösen, indem ich ein Paar weitere Konstanten hinzufüge, sodass die Formel zu „y=k*Wurzel(1-(x/k)²)“ erweitert wird. „k“ steht dabei für die Häufigkeit, mit der die Schleife wiederholt wird.
Hier habe ich dann noch die Befehle Math.sqrt für die Wurzel und **2, um das Quadrat zu bilden, verwendet. Zuerst wollte ich auch noch die Objekte in Ausrichtung zur Kurve durch den angle_z drehen lassen, aber dass habe ich dann doch gelassen und die Objekte einfach in Breite und Länge gleich groß erstellt.
Bei der Programmierung der einzelnen Platten musste ich auch noch beachten, dass es verschiedene mögliche Ausrichtungen der Platten in Bezug zu Cozmo gibt. Daher habe ich bei der Methode der Kurve, der Gerade und der dreifach-Kreuzung eine Variable hinzugefügt, welche beim Aufruf der Plattenmethoden mit angegeben werden muss und durch die bestimmt wird, welche Ausrichtung die Platte hat, also wie die Platte gedreht ist. So habe ich bei der Gerade die Variable waagerecht eingefügt, die bestimmt, ob die Platte in Relation zu Cozmos Blickrichtung waagerecht oder senkrecht verläuft. Außerdem habe ich bei jeder Plattenmethode die anzugebenden Variablen x und y hinzugefügt. Diese bestimmen, auf welcher Position die Platte ist. So ist zum Beispiel die Platte mit den Variablen x=0 und y=0, die Platte, auf der Cozmo in der Mitte draufsteht. Die Platte x= 1, y=1 wäre dann die Platte, welche um eins höher und eins weiter nach links liegt.
Die Methode für die Gerade sah dann so aus:
Bei der Kurve und der dreifach-Kreuzung habe ich eine integer-Variable mit vier verschiedene Zahlen für die vier verschiedenen Ausrichtungen hinzugefügt.
Dreifach-Kreuzung:
1 -> | sperre unten | |
---|---|---|
2 -> | sperre links | |
3 -> | sperre oben | |
4 -> | sperre rechts |
Kurve:
1 -> | Rechtskurve vorwärts | |
---|---|---|
2 -> | Rechtskurve rückwärts | |
3 -> | Linkskurve rückwärts | |
4 -> | Linkskurve vorwärts |
Damit hatte ich das Gerüst für mein Projekt gelegt, worauf ich aufbauen und experimentieren konnte.