So, erst mal zur Ansteuerung...hab mir folgendes Überlegt:

Aktuell sieht die Befehlstruktur so aus:

  1. CommandForward wird aufgerufen
  2. neue Position wird per IK aus der aktuellen Position berechnet
  3. Laufalgorithmus startet
  4. bei fertigstellung des kompletten wird auf den nächsten Befehl gewartet.


Vorteil: einfach implementiertung
Nachteil: Feedback der Servos kann nicht verarbeitet werden, neue Befehle werden erst nach Abschluss des Algos neu verarbeitet-->sehr langsame Reaktionszeit


Neuer Ansatz:

  1. CommandForward wird aufgerufen
  2. neue Position wird per IK aus der aktuellen Position berechnet
  3. befehl für Fuß1 wird geschickt
  4. es wird auf fertigstellung per Polling gewartet(in unserem Fall bekommen wir die Winkel zurück)
  5. die IST-Position wird mit der SOLL-Position verglichen,
  6. falls unterschiedlich oder neue wir bekommen einen neuen Befehl(z.b richtungsänderung) wird die Position neu berechnet,
  7. ansonsten wird der Laufalgorithmus abgearbeitet-->befehl für Fuß2 wird geschickt

Vorteil: Nach jedem Schritt kann reagiert werden, ob nun auf Unebenheiten, Blockierungen oder neue Befehle.
Nachteil: Es kann immer nur ein Fuß bewegt werden-->Geschwindikeits defizit


Kompromiss[beste Lösung?]

  1. CommandForward wird aufgerufen
  2. neue Position wird per IK aus der aktuellen Position berechnet
  3. Befehl für Fuß1, Fuß3, und Fuß6 werden geschickt, abhängig vom Laufalgorithmus können sowieso nur eine gewisse Anzahl an Füßen in Bewegung sein(dirty bit)-->kein Zeitverlust
  4. Polling auf Fuß1, Fuß2 und Fuß3 für Rückmeldung
  5. Sobald 1 Fuß rückmeldung gibt, wird die IST-Position wird mit der SOLL-Position verglichen,
  6. falls unterschiedlich oder wir bekommen einen neuen Befehl(z.b richtungsänderung) wird die Position neu berechnet,
  7. ansonsten wird der Laufalgorithmus abgearbeitet


Vorteil: keine Leerzeit, Feedback/Reaktionsfähigkeit sehr hoch
Nachteil: kompliziertere Implementierung?