Ajout d'un actionneur ou d'une force à un modèle de corps rigide articulé (en pierre de plume)


9

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.τune

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.

Réponses:


3

Actionneurs Forces

Dois-je bien comprendre: vous avez un modèle théorique d'un système multicorps rigide et souhaitez effectuer des calculs de dynamique corporelle rigide. Vous avez implémenté le modèle et souhaitez maintenant calculer le comportement du modèle lorsqu'il est entraîné par un actionneur.

Mais qu'est-ce qu'un actionneur pour vous? S'agit-il simplement d'une force agissant sur cette articulation? Est-ce un modèle de moteur à courant continu? Est-ce un contrôleur PID?

Les algorithmes de dynamique du livre sont décrits en termes de positions généralisées , de vitesses généralisées ˙ q , de vitesses généralisées ¨ q et de forces généralisées τ . Si vous avez un joint prismatique dont la translation est décrite par q i, alors la force linéaire à ce joint est décrite par τ i . Si vous avez un joint tournant (charnière) dont la rotation est décrite par q j, alors τ j représente un couple au niveau de ce joint.qq˙q¨τqjeτjeqjτj

C'est à vous de comprendre comment un actionneur est calculé. Si vous souhaitez simplement appliquer des forces ou des couples, mettez les valeurs dans les valeurs correspondantes de τ . Une fois que vous les avez, ils servent d'entrée aux algorithmes de dynamique directe pour calculer la réponse des systèmes aux forces appliquées.ττ

Remarque à côté: Featherstone utilise pour désigner les forces actives de fermeture de boucle. D'après la description de votre modèle, il ne semble pas y avoir de boucles cinématiques et donc τ a ne s'applique pas.τuneτune

Accélération gravitationnelle:

Featherstone applique l'accélération gravitationnelle à la base et la laisse se propager par les algorithmes à travers l'arbre. Cela se fait dans le RNEA, tableau 5.1 dans la ligne

.une0=-uneg

Au lieu de cela, vous pouvez également modifier la ligne

FjeB=jejeuneje+vje×jejevje

à

FjeB=jeje(uneje-jeX0uneg)+vje×jejevje

d'appliquer les effets gravitationnels individuellement sur chaque corps. Cela introduit des calculs supplémentaires et je ne vois aucun avantage à le faire.

Algèbre spatiale vs concaténation de vecteurs 3D

L'algèbre spatiale n'est pas seulement la concaténation de vecteurs 3D. Le premier exprime des mouvements de corps rigides à un cadre de coordonnées fixe, tandis que le second est exprimé aux points qui se déplacent avec le corps. En conséquence, les accélérations spatiales sont les dérivées temporelles des vitesses spatiales. Dans la notation classique utilisant deux équations 3-D, ce n'est pas le cas (section 2.11 du livre de Featherstone):

ω

La vitesse spatiale décrit la vitesse linéaire et angulaire du point corporel qui coïncide actuellement avec l'origine du référentiel (fixe). Si cette trame est exprimée au centre de masse et orientée avec la trame de référence globale, alors elle semble être une simple concaténation de vitesse linéaire et angulaire en 3D, mais ce n'est le cas que pour ce choix spécifique de trame de référence. Exprimé à une image différente, vous obtenez des valeurs différentes, mais il représente toujours la même vitesse spatiale.

L'accélération spatiale décrit le flux de la vitesse linéaire et angulaire du point qui coïncide avec l'origine. «Débit» signifie ici comment les quantités vectorielles (vitesse linéaire et angulaire) changent au fil du temps.


J'ai travaillé dur pour implémenter cet algorithme, mais j'ai essayé d'être aussi méthodique que possible en cours de route, en veillant à ce que même les aspects les plus élémentaires fonctionnent exactement comme prévu à chaque fois. À cette fin, j'ai mis en place un certain nombre d'expériences où je peux calculer la solution exacte afin de pouvoir comparer la solution simulée.
Chuck

Le dernier aspect sur lequel j'ai travaillé a été l'articulation sphérique - obtenir la représentation et les accélérations du quaternion. Pour cette expérience, j'essaie de simuler un pendule de Foucault en modélisant la terre et en mettant un pendule avec un joint sphérique à la surface. Ce faisant, ma base fixe est le centre de la Terre, autour duquel la Terre tourne. Ensuite, à partir du centre de rotation de la Terre, je peux tourner vers le haut / vers le bas à n'importe quelle latitude, traduire à la surface, où je place mon pendule articulaire sphérique.
Chuck

J'avais besoin d'un moyen d'ajouter de la gravité parce que je ne pouvais pas simplement le mettre sur l'axe z sur ma base fixe; cela ne permettrait à la gravité de fonctionner correctement qu'au pôle Nord. Essentiellement, je ne me soucie pas des forces sous la surface de la terre, je me soucie juste de la précession du pendule.
Chuck

J'ai posé une question connexe sur la façon de traiter les joints fixes.
Chuck

2

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.


Barrett, j'ai trouvé le RBDL il y a quelques semaines et même si j'allais et venais parfois pour glaner des informations, il est écrit en C ++ avec des méthodes qui rendent difficile le suivi du code. Par exemple, il y a une ligne dans le code cinématique qui lit G.block(0,q_index,6,1) = base_to_body.apply(model.X_base[j].inverse().apply(model.S[j]));. Alors, que fait la fonction apply? Eh bien, je dois aller dans le fichier d'en-tête pour n'importe quelle classe base_to_body, mais est-ce une articulation ou un corps? De plus, des choses comme model.base[j].inverse().apply(model.S[j])ne sont pas particulièrement claires non plus.
Chuck

Ce qui ne veut pas dire que cela n'a pas été utile par moments, mais pour moi, la compréhension de la RBDL demande beaucoup d'efforts.
Chuck

Bienvenue à la robotique Barrett Ames, merci pour votre réponse mais nous préférons que les réponses soient autonomes si possible. Les liens ont tendance à pourrir, donc les réponses qui reposent sur un lien peuvent être rendues inutiles si le lien vers le contenu pourrit. Si vous ajoutez plus de contexte à partir du lien, il est plus probable que les gens trouveront votre réponse utile.
Mark Booth
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.