Ich arbeite an einem Projekt, bei dem ich ein System modellieren muss, das im Wesentlichen aus einer Reihe von Kugelgelenken besteht, die an einer Basis befestigt sind, die wiederum an einer prismatischen Verbindung (Schiene) befestigt ist.
Ich habe Roy Featherstones Algorithmen für starre Körperdynamik von Anfang bis Ende gelesen und ich habe auch den Abschnitt Dynamik aus dem Springer-Handbuch für Robotik (ebenfalls von Featherstone geschrieben) gelesen .
Es hat lange gedauert, bis ich mich an die Verwendung seiner "räumlichen Vektor" - und "räumlichen Matrix" -Notation gewöhnt hatte, aber nachdem ich seine gesamte Notation als Übung von Hand neu erstellt hatte, erwies es sich als eine gute Möglichkeit, 3x3 und zu verketten 3x1-Matrizen und -Vektoren in 6x6- und 6x1-Matrizen und -Vektoren. Die Mathematik, die er erfindet, um Operationen auszuführen, kann etwas mühsam zu lesen sein, da er eine Standardnotation entführt, aber insgesamt ist alles sehr kompakt und sehr einfach in MATLAB zu implementieren.
Mein Problem ist folgendes: Wie füge ich dem Modell Aktuatoren hinzu? Er geht durch die explizite Konfiguration der gemeinsamen Definitionen, Verbindungsdefinitionen usw., aber wenn es um Aktuatoren oder angewendete Kräfte geht, sagt er etwas wie: " hier einfach ein und Bob ist dein Onkel!" - Es wird überhaupt nicht diskutiert. Im Handbuch der Robotik schlägt er vor, eine falsche Beschleunigung in die feste Basis einzuführen, um den Gravitationskraftterm hinzuzufügen, zeigt jedoch nicht, wie er in lokalen Koordinaten hinzugefügt wird, und er erwähnt auch nicht, wie der Aktuatoreingang hinzugefügt wird.
Jede Hilfe wäre sehr dankbar. Ich habe überlegt, mit einem anderen Buch von vorne zu beginnen, aber es wird einen großen Zeitaufwand bedeuten, mich wieder an eine andere Notation zu gewöhnen. Ich würde gerne weitermachen, aber ich fühle mich nur ein paar Zentimeter von der Ziellinie entfernt.
Wenn Sie nicht auf die Rigid Body Dynamics Library (RBDL) gestoßen sind, sollten Sie sich ansehen, wie sie implementiert wird, und / oder den Autor Martin Felis kontaktieren.
quelle
G.block(0,q_index,6,1) = base_to_body.apply(model.X_base[j].inverse().apply(model.S[j]));
. Was macht die Funktionapply
? Nun, ich muss für jede Klasse in die Header-Datei gehenbase_to_body
, aber ist das ein Gelenk oder ein Körper? Auch Dinge wiemodel.base[j].inverse().apply(model.S[j])
sind nicht besonders klar.