Weil wir das Projekt als Gruppe bearbeiten wollten, war es sehr wichtig ein gemeinsames Konzept zu entwickeln nach dem sich alle später beim Programmieren richten können.
Bewegungen: (Movements)
Dazu war es auch vorerst von Bedeutung, dass die Bewegungen des Roboters bei allen gleich ausfallen. In unserem Fall konnten wir die Bewegungen der einzelnen Motoren durch Gradzahlen bestimmen.
Beispielsweise, wird das vertikale Drehen des Zauberwürfels durch eine Bewegung des Greifarms um 270° zum Cube (damit dieser gegriffen wird) und um 270° zurück (dabei wird eine Kante mitgerissen, sodass sich der Cube dreht) ermöglicht. Die Anzahl an Drehungen kann man der Methode einfach übergeben.
Dieses vertikale drehen des Zauberwürfels nennt sich “next”. Auf diese Art habe ich dann alle anderen Bewegungen, wie die der Plattform, des Sensors usw. programmiert.
Danach haben wir die einzelnen Bewegungen in Methoden zusammengeführt um komplexere Bewegungen ausführen zu lassen.
So sah der Move “up ” dann als Quelltet aus:
Also 2-mal den Cube vertikal drehen. Die nun untere Seite linksrum drehen. Den Cube wieder 2-mal umdrehen damit er auf der Anfangsposition steht. Es war hierbei interessant festzustellen, dass zwischen den Motoren verschiedener Roboter deutlich feststellbare Leistungsdifferenzen bestanden. Diese hängen mit der Abnutzung zusammen. Die Motoren von unserem 2. Roboter konnten zum Beispiel den Greifarm nach Vollendung seiner Bewegungen nicht an Position halten, sodass dieser immer nach vorne wieder abgedriftet ist. Somit musste ich Gewichte am Ende des Greifarms befestigen um diesen am Platz zu halten. Sonst würde dieser immer auf dem Cube hängen
Darstellung des Zauberwürfels in Java:
Anfangs wollten wir den Würfel als 3x3x3 Array darstellen, da es so der Realität am nächsten
kommen würde. Es wäre auch einfach ihn sich so vorzustellen.
Jedoch, wäre es durch so eine Art der Darstellung schwieriger die Drehungen der Seiten virtuell zu etablieren. Es überschneiden sich nämlich mehrere Seiten beim Drehen von nur einer. Zum Beispiel werden die grünen und roten Steine beim Drehen der weißen Seite mitgedreht, obwohl sie eigentlich nicht zur weißen Seite gehören.
Deshalb haben wir uns für eine 2d Darstellung als Würfelnetz entschieden, wobei die einzelnen kleinen Würfel (Cubies) jeweils eine feste Nummer abhängig von deren Position erhalten haben.
Die Farben haben danach auch jeweils eine Nummer zugewiesen bekommen:
Diese haben wir dann bevor wir den Farbsensor programmiert haben immer per Hand für den ganzen Würfel eingetippt.
Im nächsten Schritt wurde aus dem Würfelnetz ein Array mit der Länge 54. Die Position im Array verrät um welchen Cubie es geht und der gespeicherte Wert deutet auf die Farbe an der Position hin. Ein gelöster Würfel würde also folgend dargestellt werden.
Und so als Array Form:
Abhängig von seiner Position hat auch jeder Stein einen eindeutigen Namen bekommen.
Der Name eines Kantensteins (Grün umkreist) wäre in dem Fall UP_FRONT (obere Seite, vorne).
Der Aquamarin umkreiste Eckstein würde UP_RIGHT_FRONT heißen.