Orientazione di un corpo rigido da [tex]\omega(t)[/tex]

Lorra1
Salve a tutti, da ormai un po' di tempo sono su un problema che non capisco se ho risolto o no. Ora mi spiego. Vorrei integrare numericamente (con MATLAB® o con un programma C++) l'orientazione di un corpo rigido di cui ho la velocità angolare per un insieme discreto di istanti temporali. Ho un modo, ma non capisco se è "solo" il mio programma che ha qualche errore oppure se è proprio sbagliato il ragionamento su cui si basa. Lo trovate esposto nel pdf allegato perché tutto il discorso è lungo 2 paginette, ma probabilmente è solo un po' "sbrodolato".
Potete anche leggerlo come pdf qua https://drive.google.com/file/d/0B30MSTg7R9x6ZndsaGYwR1hTbkE/edit?usp=sharing.

Risposte
hamilton2
Già l'equazione (1) è assurda. Comunque non capisco per quale motivo dovresti fare computazionale con gli angoli di Eulero o varianti (Tait-Bryan), sono pessimi. Usa i quaternioni, o, al massimo, matrici ortogonali.

Lorra1
Grazie per aver letto il mio pdf o dvi.

L'equazione (1) è analoga a quella della slide 10 ad esempio di queste note http://users.physics.harvard.edu/~morii ... ture09.pdf , ma per un set di angoli di Eulero differente. È riportata anche sul mio libro di meccanica razionale (Bampi-Zordan, Meccanica razionale con elementi di probabilità e variabili aleatorie) e qui http://copernico.dm.unipi.it/~milani/di ... html#23430, sempre per il set di angoli di Eulero z-x-z. Perché la mia versione per un set di angoli z-y-x non va bene?

Sono restìo ad usare i quaternioni perché risulta difficile leggerne uno (per esempio dall'output del programma) e capire quale orientazione rappresenta.
Per le matrici di rotazione ti riferisci ad usare la relazione $\dot{R} = \hat{\omega}R$*? Va bene dal punto di vista numerico?
Come si procede? Prendo $R$, la moltiplico a sx per $\hat{\omega}$, poi moltiplico per $\Delta t$ e poi la nuova rotazione è $R \cdot \Delta (R)$, $\Delta (R) = \hat{\omega} R \Delta t$?

*con $\hat{\omega}$ ho denotato la matrice antisimmetrica tale che $\hat{\omega}x = \omega \times x, x,\omega \in \mathbb{R}^3, \hat{\omega} \in \mathbb{R}^{3 \times 3}$

hamilton2
era più un giudizio su quanto mostruosamente complicati siano questi calcoli. In retrospettiva credo che la (1) potrebbe anche essere giusta ma dovresti fare una dimostrazione.

I quaternioni sono relativamente facili da maneggiare, più di quanto pensi. Sono lo standard per la computazione sulle rotazioni.

Ma se ti rimane più intuitivo puoi usare le matrici di rotazione. Quello che hai scritto è corretto (almeno come metodo al prim'ordine alla Eulero, ma volendo puoi estendere ad ordini superiori tipo Runge-Kutta), ma le matrici contengono delle info ridondanti (6 componenti per descrivere una 3-varietà) e quindi sono computazionalmente instabili. Cioè, in conseguenza di errori di precisione, non è detto che la matrice rimanga perfettamente ortogonale. Devi trovare un modo di riaggiustarla senza introdurre drift sistematici. Sono questioni sottili, potresti ritrovarti il corpo che inizia a girare come una trottola quando $\omega = 0$.

I quaternioni sono più stabili. Sono meno ridondanti (4 componenti per una 3-varietà) e tutto ciò che devi fare è rinormalizzarli. Hanno lo svantaggio di essere ambigui: per ogni rotazione esistono due quaternioni. Ma questo è raramente un problema.

Invece calcolare con una carta di angoli è disastroso, hai fenomeni orrendi come il gimbal lock e risoluzioni violentemente variabili (quindi: errori di precisione amplificati al massimo). Per non parlare di ambiguità/discontinuità.

Lorra1
A questo punto immagino che la dimostrazione si possa fare prendendo la definizione di [tex]\omega[/tex], [tex]\omega \colon = \sum\limits_{h=1}^3 \boldsymbol{\hat{e}}_h \times \frac{d_a \boldsymbol{\hat{e}}_h}{dt}[/tex], scrivendo [tex]\boldsymbol{\hat{e}}_h[/tex] in termini di [tex]\boldsymbol{e}_h[/tex], fare le derivate e trovare che sono uguali a quelle che ho buttato lì io pensando che fossero corrette, giusto?

[tex]\boldsymbol{e}_h, h =1,2,3[/tex] sono i versori della base fissa, mentre [tex]\boldsymbol{\hat{e}}_h, h =1,2,3[/tex] e [tex]\frac{d_a}{dt}[/tex] é la derivata rispetto alla base fissa.

Lorra1
UP

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.