Hallo Hanno,
diesen Artikel [1] finde ich sehr nützlich und verständlich.
Gruß
Georg
[1] http://freespace.virgin.net/hugo.elias/models/m_ik.htm
Druckbare Version
Hallo Hanno,
diesen Artikel [1] finde ich sehr nützlich und verständlich.
Gruß
Georg
[1] http://freespace.virgin.net/hugo.elias/models/m_ik.htm
Interessanter Ansatz, das ganze mit Kräften zu berechnen, statt mit Position.
Allerdings bin ich schon ein bischen weiter. Im Moment geht es mir darum die Target Positionen zu finden. Hier habe ich heute sehr viel gerechnet und in excel getestet jetzt habe ich die Berechnungen für die einzelnen Fusskurven-Segemente soweit fertig. Morgen muss daraus noch eine Abfolge werden. Ich bin noch nicht sicher ob es dann so funktioniert wie geplant, aber das werde ich erst sehen, wenn ich alles im Spin implementiert habe.
So die Berechnung ist nun erst mal fertig und komplett im Excel programmiert als erster Test, denn dort kann ich mir die Positionen in einem Diagramm anzeigen lassen und meine Formeln prüfen.
Nächster Schritt ist es die ganze Mathematik die dabei entstanden ist in Spin zu programmieren und dann hoffe ich, dass die ersten Tests erfolgreich sein werden.
Gerade habe ich noch heraus gefunden, dass ich zwischen den Geschwindigkeiten 3:3, 4:2, 5:1 relativ leicht durch das Ändern eines Parameters umschalten kann, damit kann der Roboter in allen Geschwindigkeiten laufen :cool:
Also wenn schon jeweils ein Bewegungsschema für reine Geradeaus- bzw. Drehbewegung vorhanden ist, würde ich für eine geschmeidige Fortbewegung eine einfache Überlagerung versuchen:
Für die Drehung bewegen sich vermutlich die einen Beine vorwärts und die anderen Rückwärts - es gibt also quasi eine Differenz in den Bewegungsvorgaben für die Beine. Da zur Fortbewegung die Vorwärtsbewegung evtl. schon ausgeschöpft ist, kann man diese Differenz bei Überlagerung also nur durch Verlangsamung der "Kurveninneren" Beine erreichen. Der erzielbare Betrag verringert (halbiert?) sich dadurch also.
Wenn man jetzt eine Bahnplanung hat, sollten die auszuführenden translatorischen und rotatorischen Operationen bekannt sein. Dann die Bewegungsvorgaben einzeln berechnen, die für die Rotation noch durch Faktor 2 (?; s.o.) oder etwas höher, für glatteren Ablauf, Teilen, zur Translation addieren und das ganze ausführen lassen.
Hier scheinen sich für mich auch wieder (übergeordnete) Bahnplanung und "konkrete" Bewegungsplanung des Bots (Schrittfolge) zu vermischen. Die Berechnung über Kreissegmente dürfte außerdem recht aufwendig werden, oder?
Das dürfte die einfachste und flexibelste Umsetzung sein.
Ähnelt wohl auch meinem oben beschriebenen Ansatz. Nur würd ichs nach der getrennten Berechnung, dann aber überlagern.
Das Türproblem ist allerdings auch schon recht speziell ist finde ich. Dadurch das zu der geraden Hauptrichtung der Bewegung trotzdem eine Drehung kommen soll hast Du ja unterwegs zwischen "straightforward" und "90° seitlich" quasi beliebige "Strafing-Winkel" zu bewältigen, um in der Hauptrichtung auch noch vorwärts zu kommen. Die müssten wahrscheinlich vorher erstmal "eintrainiert" werden.
Zitat:
Für die Drehung bewegen sich vermutlich die einen Beine vorwärts und die anderen Rückwärts
Gilt nur für Drehungen bei denen der Drehpunkt innerhalb des Roboters liegt. Für Drehpunkt außerhalb bewegen sich die Beine in die gleiche Richtung. Der Radius bzw. die Länge der Bogensehne ändert sich. Das hatte ich schon bei meinem Phoenix² implementiert. Lässt sich allerdings sehr leicht errechnen, wenn man für die Drehung die Vorgaben v,w (die x und y Koordinaten des Drehpunkts) und den Winkel teta angibt um wie viel Grad der Roboter sich um den Punkt drehen soll. Bei v,w = 0, gilt was du sagst, dann bewegt sich eine Seite nach vorn und die Andere zurück. Bei v = 20 und w = 0, wäre es eben eine Bewegung auf dem Kreisradius. Für jedes Bein wird dann ein eigenes Bogensegment berechnet mit der dazugehörigen Tangente und einer spezifische Länge (berücksichtigen des Abstands vom Drehpunkt).
Mittlerweile habe ich die Aufgabenstellung sehr weit lösen können. Die Rotatorische Bewegung wird wie oben berechnet und durch die Translatorische überlagert. Daraus wird die Schrittlänge und die Bahnkurve berechnet für jedes Bein berechnet. Am Ende der Bahnkurve erfolgt die Rückführung zur Startposition, mit einer kleinen Trajektorie damit es sanfter aussieht. Wenn sich alle Beine einmal über die Schrittlänge bewegt haben ist ein Voll_Schritt fertig. Aus Teta und dem maximal möglichen Winkel der pro VollSchritt gedreht werden kann ergibt sich die Anzahl der Voll-Schritte für drehen und bei translation nehme ich einfach x²+y² = Distanz² und Teile die Distanz durch die kleinste Schrittlänge.
Weitere Features die bereits implementiert sind: Ich kann drei Geschwindigkeiten wählen ob ich nun 3:3, 4:2, oder 5:1 bewegen möchte (Anzahl der Beine am Boden : Beine in der Luft) die Berechnung ermittelt dann automatisch die korrekten Punkte auf der Bahnkurve und natürlich wie schnell sich die Motoren generell drehen sollen. Natürlich auch kippen und neigen wird berücksichtigt.
Das lässt sich alles mit genügend Mathematik erschlagen und aktuell bin ich dabei die Formeln im Code darzustellen und dann wird es vermutlich ziemlich viel debugging geben.
Ob diese Berechnung schon für mein Tür-Problem reicht kann ich schwer sagen, im Prinzip ja, aber vielleicht muss ich auch noch eine übergeordnete Ebene programmieren.
So der Code ist geschrieben, aber funktioniert natürlich noch nicht, gestern habe ich es nur noch geschafft die Translation zu debuggen.
Anderes Thema: Servos
Leider ist ein weiterer Servo (BMS-705MG) ausgefallen und ich vermute einer steht kurz davor, aber der Reihe nach.
1) Servo lässt sich gar nicht mehr ansteuern, wenn er manuell bewegt wird, geht er sehr schwergängig.
2) Servo wird noch angesteuert aber dreht sich auch schon deutlich schwerer als die übrigen.
Der letzte Servo (BMS660 DMG + HS 52) der ausgefallen ist hatte deutliche Brandspuren auf der Steuerplatine. Motor und Getriebe haben noch wunderbar funktioniert.
Leider habe ich noch keine Ahnung was diesen "Tod" verursacht, denn noch bewegen sich die Beine nur in der Luft, d.h. ohne Belastung.
Kann es einfach an der Chinaproduktion liegen?
EDIT: Gerade bei Hobbykin.com gelesen: "Der gute erste Eindruck (Getriebespiel, Rueckstellgenauigkeit usw.) steht einer sehr geringen Lebensdauer gegenber. Die Motorbuersten sind stark unterdimensioniert und brennen schnell ab, was zum Ausfall des Servos führt. ... Betroffen sind auch BMS 706, 760, 761 mit identischem Motor !!"Frage ist nun, kann man das irgendwie verbessern/optimieren?
Dummerweise ist meine ganze Konstruktion auf diese beiden Abmessungen abgestimmt, so dass ich die Servos nicht einfach mit einer anderen Marke austauschen kann.
Ds klingt nicht gut, da bleibt dir ja fast nur die möglichkeit einen ersatzmotor zu suchen. Die frage ist dann aber ob der dann auch die gleiche kraft/Geschwindigkeit liefern wird.
Hast du mal die Maße der Motoren? Vllt. findet man ja was.
BMS-705MG: Dimensions: 42 x 21.5 x 22 mm
Bild hier
BMS660 DMG: Dimensions: 40.5 x 20 x 42mm
Anhang 26458
Hab eigentlich die internen motoren gemeint, nicht die Servos an sich ;)
Pu da muss ich erst kucken, hab den letzten Ausfall zerlegt da kann ich ein Bild von machen.