Aggiunta di un attuatore o di una forza a un modello di corpo rigido articolato (di base)


9

Sto lavorando a un progetto in cui ho bisogno di modellare un sistema che è essenzialmente costituito da una serie di giunti a sfera attaccati a una base, che a sua volta è collegata a un giunto prismatico (binario).

Ho letto gli copertina rigidi di Dynamics Algorithms di Roy Featherstone da copertina a copertina e ho anche letto la sezione Dynamics dal Manuale Springer of Robotics (scritto anche da Featherstone).

Mi ci è voluto molto tempo per abituarmi all'utilizzo del suo "vettore spaziale" e della notazione "matrice spaziale", ma dopo aver ricreato a mano tutta la sua notazione come esercizio, si rivela un bel modo di concatenare 3x3 e Matrici e vettori 3x1 in matrici e vettori 6x6 e 6x1. La matematica che inventa per eseguire operazioni può essere un po 'noiosa da leggere mentre dirotta una notazione standard, ma nel complesso tutto è molto compatto, molto facile da implementare in MATLAB.

Il mio problema è questo: come posso aggiungere attuatori al modello? Segue la configurazione esplicita delle definizioni dei giunti, delle definizioni dei collegamenti, ecc., Ma quando si tratta di attuatori o forze applicate dice qualcosa del tipo: "Basta aggiungere un qui e Bob è tuo zio!" - non è affatto discusso. Nel Manuale di Robotica suggerisce di introdurre una falsa accelerazione sulla base fissa per aggiungere il termine della forza gravitazionale, ma non mostra come aggiungerlo nelle coordinate locali né menziona come aggiungere l'ingresso dell'attuatore.τun'

Qualsiasi aiuto sarebbe molto apprezzato. Ho pensato di ricominciare da capo con un altro libro, ma sarà una grande spesa del mio tempo ri-acclimatarmi a una diversa serie di notazioni. Mi piacerebbe andare avanti con questo, ma mi sento a pochi centimetri dal traguardo.

Risposte:


3

Forze attuatori

Ho capito bene: hai un modello teorico di un sistema multicorpo rigido e vorresti eseguire calcoli dinamici del corpo rigido. Hai implementato il modello e ora desideri calcolare il comportamento del modello quando guidato da un attuatore.

Tuttavia, cos'è un attuatore per te? È semplicemente una forza che agisce in quel comune? È un modello di motore CC? È un controller PID?

Gli algoritmi di dinamica nel libro sono descritti in termini di posizioni generalizzate , velocità generalizzate ˙ q , velocità generalizzate ¨ q e forze generalizzate τ . Se si dispone di un giunto prismatico la cui traduzione è descritta da q i, la forza lineare in quel giunto è descritta da τ i . Se si dispone di un giunto rotante (cerniera) la cui rotazione è descritta da q j, allora τ j rappresenta una coppia a quel giunto.qq˙q¨τqioτioqjτj

ττ

τun'τun'

Accellerazione Gravitazionale:

Featherstone applica l'accelerazione gravitazionale alla base e la fa propagare dagli algoritmi attraverso l'albero. Questo viene fatto in RNEA, Tabella 5.1 nella riga

un'0=-un'g

Invece di farlo puoi anche modificare la linea

fioB=ioioun'io+vio×*ioiovio

per

fioB=ioio(un'io-ioX0un'g)+vio×*ioiovio

applicare gli effetti gravitazionali individualmente su ciascun corpo. Questo introduce ulteriori calcoli e non vedo alcun beneficio nel farlo.

Algebra spaziale vs. concatenazione di vettori 3D

L'algebra spaziale non è solo la concatenazione di vettori 3D. Il primo esprime movimenti del corpo rigidi in una cornice di coordinate fissa, mentre il secondo è espresso in punti che si muovono con il corpo. Di conseguenza, le accelerazioni spaziali sono le derivate temporali delle velocità spaziali. Nella notazione classica che usa due equazioni 3D non è così (Sezione 2.11 del libro di Featherstone):

ω

La velocità spaziale descrive la velocità lineare e angolare del punto del corpo che attualmente coincide con l'origine del frame di riferimento (fisso). Se quel fotogramma viene espresso al centro della massa e orientato con il fotogramma di riferimento globale, allora sembra essere una concatenazione semplice della velocità lineare e angolare 3D, tuttavia questo è solo il caso per questa specifica scelta del fotogramma di riferimento. Espresso in una cornice diversa ottieni valori diversi ma rappresenta comunque la stessa velocità spaziale.

L'accelerazione spaziale descrive il flusso della velocità lineare e angolare del punto che coincide con l'origine. "Flusso" qui indica come le quantità vettoriali (velocità lineare e angolare) cambiano nel tempo.


Ho lavorato duramente per implementare questo algoritmo, ma ho cercato di essere il più metodico possibile lungo la strada, assicurandomi che anche gli aspetti più elementari funzionino esattamente come previsto ogni volta. A tal fine, ho impostato una serie di esperimenti in cui posso calcolare la soluzione esatta in modo da poter confrontare la soluzione simulata.
Chuck

L'ultimo aspetto su cui ho lavorato è stato l'articolazione sferica: ottenere la rappresentazione e le accelerazioni del quaternione. Per questo esperimento sto tentando di simulare un pendolo di Foucault modellando la terra e mettendo un pendolo con un giunto sferico sulla superficie. Nel fare ciò, la mia base fissa è il centro della terra, attorno al quale ruota la Terra. Quindi, dal centro rotante della Terra, posso ruotare su / giù a qualsiasi latitudine, tradurre in superficie, dove posiziono il mio pendolo sferico articolare.
Chuck

Avevo bisogno di un modo per aggiungere gravità perché non potevo semplicemente metterlo sull'asse z sulla mia base fissa; questo farebbe funzionare la gravità correttamente solo al Polo Nord. In sostanza, non mi importa delle forze sotto la superficie della terra, mi interessa solo la precessione del pendolo.
Chuck

Ho posto una domanda correlata su come dovrei maneggiare i giunti fissi.
Chuck

2

Se non ti sei imbattuto nella Rigid Body Dynamics Library (RBDL) , potresti voler esaminare come la implementano e / o contattare l'autore Martin Felis.


Barrett, ho trovato l'RBDL alcune settimane fa e mentre a volte cercavo di raccogliere informazioni, è scritto in C ++ con metodi che rendono difficile seguire il codice. Ad esempio, c'è una riga nel codice cinematico che legge G.block(0,q_index,6,1) = base_to_body.apply(model.X_base[j].inverse().apply(model.S[j]));. Quindi, cosa fa la funzione apply? Bene, devo andare al file header per qualunque classe base_to_bodysia, ma è un giunto o un corpo? Inoltre, cose del genere model.base[j].inverse().apply(model.S[j])non sono particolarmente chiare.
Chuck

Ciò non significa che a volte non sia stato utile, ma per me capire l'RBDL richiede molto sforzo.
Chuck

Benvenuto nella robotica Barrett Ames, grazie per la tua risposta, ma preferiamo che le risposte siano autosufficienti ove possibile. I collegamenti tendono a marcire, quindi le risposte che si basano su un collegamento possono essere rese inutili se il collegamento al contenuto marcisce. Se aggiungi più contesto dal link, è più probabile che le persone troveranno la tua risposta utile.
Mark Booth
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.