Il problema con le rotazioni è che la maggior parte delle persone lo pensa in termini di angoli di Eulero, poiché sono facili da capire.
Eppure la maggior parte delle persone dimentica il punto che gli angoli di Eulero sono tre angoli sequenziali . Ciò significa che la rotazione attorno al primo asse renderà la rotazione successiva relativa alla prima rotazione originale, quindi non è possibile ruotare in modo indipendente un vettore attorno a ciascuno dei 3 assi usando gli angoli di Eulero.
Questo si traduce direttamente in matrici quando moltiplichi due matrici, puoi pensare a questa moltiplicazione come trasformazione di una matrice nello spazio dell'altra matrice.
Questo dovrebbe accadere con 3 rotazioni sequenziali anche quando si usano i quaternioni.
Voglio sottolineare il fatto che i quaternioni non sono una soluzione per il blocco dei gimble. In realtà il blocco della gimble avverrà sempre se rappresentassi gli angoli di Eulero usando i quaternioni. Il problema non è la rappresentazione, il problema sono i 3 passaggi sequenziali.
La soluzione?
La soluzione per ruotare un vettore attorno a 3 assi in modo indipendente è quella di combinare in un singolo asse e un singolo angolo, in questo modo è possibile eliminare il passaggio in cui è necessario eseguire una moltiplicazione sequenziale. Questo si tradurrà efficacemente in:
La mia matrice di rotazione rappresenta il risultato della rotazione attorno a X, Y e Z.
piuttosto che l'interpretazione di Eulero di
La mia matrice di rotazione rappresenta la rotazione attorno a X, quindi a Y e poi a Z.
Per chiarire questo citerò dal teorema di rotazione di Eulero di Wikipedia:
Secondo il teorema di rotazione di Eulero, qualsiasi rotazione o sequenza di rotazioni di un corpo rigido o di un sistema di coordinate attorno a un punto fisso equivale a una singola rotazione di un dato angolo θ attorno ad un asse fisso (chiamato asse di Eulero) che attraversa il punto fisso. L'asse di Eulero è in genere rappresentato da un vettore unitario u →. Pertanto, qualsiasi rotazione in tre dimensioni può essere rappresentata come una combinazione di un vettore u → e uno scalare θ. I quaternioni forniscono un modo semplice per codificare questa rappresentazione dell'asse-asse in quattro numeri e applicare la rotazione corrispondente a un vettore di posizione che rappresenta un punto relativo all'origine in R3.
Notare che la moltiplicazione di 3 matrici rappresenterà sempre 3 rotazioni sequenziali.
Ora in ordine per combinare rotazioni attorno a 3 assi, è necessario ottenere un singolo asse e singoli angoli che rappresentano la rotazione attorno a X, Y, Z. In altre parole, è necessario utilizzare una rappresentazione Asse / Angolo o Quaternione per eliminare le rotazioni sequenziali.
Questo di solito viene fatto, iniziando con un orientamento iniziale (l'orientamento può essere pensato come un angolo dell'asse), solitamente rappresentato come un quaternione o un angolo dell'asse, e quindi modificando quell'orazione per rappresentare l'orientamento della destinazione. Ad esempio, si inizia con il quaterion identità e quindi si ruota dalla differenza per raggiungere l'orientamento della destinazione. In questo modo non perdi alcun grado di libertà.