So, erst mal zur Ansteuerung...hab mir folgendes Überlegt:
Aktuell sieht die Befehlstruktur so aus:
- CommandForward wird aufgerufen
- neue Position wird per IK aus der aktuellen Position berechnet
- Laufalgorithmus startet
- 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:
- CommandForward wird aufgerufen
- neue Position wird per IK aus der aktuellen Position berechnet
- befehl für Fuß1 wird geschickt
- es wird auf fertigstellung per Polling gewartet(in unserem Fall bekommen wir die Winkel zurück)
- die IST-Position wird mit der SOLL-Position verglichen,
- falls unterschiedlich oder neue wir bekommen einen neuen Befehl(z.b richtungsänderung) wird die Position neu berechnet,
- 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?]
- CommandForward wird aufgerufen
- neue Position wird per IK aus der aktuellen Position berechnet
- 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
- Polling auf Fuß1, Fuß2 und Fuß3 für Rückmeldung
- Sobald 1 Fuß rückmeldung gibt, wird die IST-Position wird mit der SOLL-Position verglichen,
- falls unterschiedlich oder wir bekommen einen neuen Befehl(z.b richtungsänderung) wird die Position neu berechnet,
- ansonsten wird der Laufalgorithmus abgearbeitet
Vorteil: keine Leerzeit, Feedback/Reaktionsfähigkeit sehr hoch
Nachteil: kompliziertere Implementierung?
Lesezeichen