In den letzten Tagen haben sich folgende Neuerungen eingeschlichen:
- Die Entgegennahme von Steuerbefehlen erfolgt nun kabellos per WLAN
- Es wurde ein Algorithmus implementiert, der bei Bedarf ein Bein anhebt und an eine neue Position setzt
Wer mehr über die Hintergründe erfahren möchte, klickt auf weiterlesen ;)
Bei der Entwicklung des Algorithmus muss man sich mit 2 grundlegennden Fragen auseinander setzten.
- Welches Bein/welche Beine dürfen angehoben werden, um auf geeignete Art und Weise sicherzustellen, das der Roboter stets sicher steht?
- Wenn entschieden wurde, das sich ein Bein bewegen soll, wie wird dann die neue Position festgelegt?
Um Punkt 1 sinnvoll erklären zu können, bedarf es zu wissen, wie Punkt 2 realisiert wird, also fangen wir damit an. Man stelle sich den Roboter aus der Draufsicht vor. Die Z- Achse spielt für die folgenden Überlegungen keine Rolle. Durch den Anwender wird vorgegeben, in welchem Winkel, und in welchem Abstand von Körper ein Bodenpunkt im Optimalfall zu liegen hat. (Der Punkt, an dem ein Bein den Boden berührt) Die Koordinaten dieser Optimalen Punkte werden bei jedem Durchlauf der IK neu berechnet, und richten sich hierbei nach der Position des Körpers im Raum. Relativ zum Roboter bewegen sich diese Punkte also in aller Regel nicht (es sei denn, die Optimalstellung wird vom Anwender anders vorgegeben). Beim Start der IK werden diese Punkte einmalig als tatsächliche Bodenpunkte gesetzt - der Bot fährt diese also an.
Wird nun die Position des Körpers im Raum verändert, sei es durch Neigung um eine Achse, oder durch eine translatorische Bewegung in X- oder Y-Richtung, so bleibt der Bodenpunkt aller Beine zunächst der selbe - schließlich haben wir bislang noch keinen neuen vorgegeben. Die Optimalen Bodenpunkte wandern jeder auf eben beschriebene Weise mit dem Bot mit. Wird entschieden, das ein Bein gehoben werden soll (wie dies geschieht, sehen wir gleich), gilt aktueller Bodenpunkt = optimaler Bodenpunkt.
Wir wissen nun also wo wir ein Bein absetzen wollen. Aber welches Bein als erstes heben? Und wie dann weiter? Eine feste Reihenfolge vorzugeben führt früher oder später zu verknoteten Beinen, das haben die ersten schnell Versuche gezeigt. Es musste also eine Möglichkeit gefunden werden, die "Dringlichkeit" eines Schrittes zu bewerten. Dies erfolgt anhand der Abstände zwischen dem Punkt, an dem ein Bein gerade steht, und den Positionen, die als optimal angesehen wird. Dieser Abstand lässt sich durch Differenz- und Betragsbildung der beiden Ortsvektoren der Punkte errechnen.
Diese Abstände werden in einer Liste absteigend sortiert. Das Bein mit der größten Dringlichkeit steht ganz oben in dieser Liste. Dieses Bein bildet die Grundlage für alle weiteren Überlegungen.
Als nächstes erfolgt eine Prüfung dieses Abstands. Liegt er unter einem bestimmten Grenzwert (im Video sind 20mm eingestellt) so ist es nicht sinnvoll, das Bein zu bewegen. Da alle anderen Beine durch die sortierung einen Abstand < erster Listeneintrag haben müssen, und somit keines diesen Grenzwert übersteigt, wird die Routine für diesen Durchlauf beendet.
Ist er erste Listeneintrag eiin Bein mit >20mm Abstand, ist als nächstes entscheidend, wie viele Beine gleichzeitig bewegt werden dürfen. Dies kann vorgegeben werden (im Video immer 3), ein Wert > 3 macht jedoch wenig Sinn, ein sicherer Stand wäre nicht gewährleistet. Darf nur ein Bein gehoben werden ist der Fall klar. Dieses Bein wird bewegt, und bevor es seinen neuen Punkt erreicht hat, jede weitere Beinbewegung gesperrt.
Bei 2 oder drei Beinen stehen wir nun vor der Qual der Wahl, es stehen neben dem ersten Bein, welches auf jeden Fall bewegt wird, 5 weitere zur Verfügung. Es gibt jedoch gewisse Kombinationen, die niemals auftreten dürfen. So dürfen z.B. auf keinen Fall 2 direkt benachbarte Beine gehoben werden. Diese Kombinationen werden in einer Statemachine abgebildet. Zusätzlich bewegt werden dann die Beine, die durch die Statemachine in frage kommen, und deren Dringlichkeit - sprich deren Abstand - am größten ist. Auch bei diesen Beinen wird jedoch geprüft, ob der Mindestabstand erreicht ist. Das heißt, es wird nicht immer automatisch die maximale Beinzahl bewegt, sondern immer nur so viele wie tatsächlich momentan nötig bzw. sinnvoll ist.