Je travaille sur un projet où je dois modéliser un système qui est essentiellement composé d'une série de joints à rotule attachés à une base, qui est attachée à son tour à un joint prismatique (rail).
J'ai lu de bout en bout les algorithmes de dynamique du corps rigide de Roy Featherstone , et j'ai également lu la section Dynamics du Springer Handbook of Robotics (également écrit par Featherstone).
Il m'a fallu beaucoup de temps pour m'acclimater à l'utilisation de sa notation «vecteur spatial» et «matrice spatiale», mais après avoir recréé toute sa notation à la main comme un exercice, cela se révèle être une belle façon de concaténer 3x3 et Matrices et vecteurs 3x1 en matrices et vecteurs 6x6 et 6x1. Les calculs qu'il invente pour effectuer des opérations peuvent être un peu fastidieux à lire car il détourne une notation standard, mais dans l'ensemble, tout est très compact, très facile à implémenter dans MATLAB.
Mon problème est le suivant: comment ajouter des actionneurs au modèle? Il parcourt la configuration explicite des définitions des articulations, des définitions de liens, etc., mais en ce qui concerne les actionneurs ou les forces appliquées, il dit quelque chose comme: "Ajoutez simplement un ici et Bob est votre oncle!" - ce n'est pas du tout discuté. Dans le Handbook of Robotics, il suggère d'introduire une fausse accélération sur la base fixe pour ajouter le terme de force gravitationnelle, mais ne montre pas comment l'ajouter en coordonnées locales ni mentionner comment ajouter l'entrée de l'actionneur.
Toute aide serait grandement appréciée. J'ai envisagé de recommencer avec un livre différent, mais ça va être une grosse dépense de mon temps de m'acclimater à un ensemble différent de notation. J'aimerais aller de l'avant avec cela, mais j'ai l'impression que je suis à quelques centimètres de la ligne d'arrivée.
Si vous n'avez pas rencontré la bibliothèque Rigid Body Dynamics (RBDL), vous voudrez peut-être voir comment ils l'implémentent et / ou contacter l'auteur Martin Felis.
la source
G.block(0,q_index,6,1) = base_to_body.apply(model.X_base[j].inverse().apply(model.S[j]));
. Alors, que fait la fonctionapply
? Eh bien, je dois aller dans le fichier d'en-tête pour n'importe quelle classebase_to_body
, mais est-ce une articulation ou un corps? De plus, des choses commemodel.base[j].inverse().apply(model.S[j])
ne sont pas particulièrement claires non plus.