Matlab inversione matrice rototraslazione

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
odiusseus
Linux 2.x
Linux 2.x
Messaggi: 352
Iscritto il: sab 30 giu 2007, 14:09
Slackware: 13.0
Kernel: 2.6.32.2
Desktop: kde
Località: roma/vibo valentia
Contatta:

Matlab inversione matrice rototraslazione

Messaggio da odiusseus »

Salve ragazzi lo so che qui si mastica meglio il C ma ho uno stramaledetto problema con un progetto di biomeccanica!!! Non so se vuoi usate matlab o similari ma forse il mio più che un problema di sintassi è un problema di concetto!!! ora posto la parte di programma che mi sta facendo diventare scemo!!!

Codice: Seleziona tutto

lasi2rasi=diff(pelvis(:,:,[1,2]),1,3)

opl_0=point2line(pelvis(:,:,1),pelvis(:,:,2),sacr); 
xpl_0=opl_0-sacr;
[temp,xpl_0]=mvarray(xpl_0);

ypl_0=cross(lasi2rasi,xpl_0);
[temp,ypl_0]=mvarray(ypl_0); %rende ypl_0 di modulo unitario

zpl_0=cross(xpl_0,ypl_0);
[temp,zpl_0]=mvarray(zpl_0);

R0pl=cat(3,xpl_0,ypl_0,zpl_0);

R0pl=permute(R0pl,[2,3,1]);

T0pl=[R0pl permute(opl_0,[2,3,1])]

T0pl(4,4,:)=1;
allora questa parte di codice dice che opl_0 è il centro del bacino calcolato attraverso un vettore che proietta un punto sull'osso sacro (più o meno) su un segmento che si trova tra due marker posti anteriormente al bacino (uno a destra ed uno a sinistra). Questa è l'origne del sistema di riferimento visto da una telecamera. xpl_0 ypl_0 e zpl_0 sono i versori del sistema di riferimento della telecamera. R0pl è la matrice di rotazione e T0pl è la matrice di rototraslazione

Codice: Seleziona tutto

T0pl=[R0pl   opl_0;0 0 0 0 1]
il numero di zeri è pari al numero di elementi sull'ultima riga meno l'ultimo che è 1. Ora devo invertire la matrice T0pl in Tpl0 sioè devo passare dal sistema di riferimento della telecamera al sistema di riferimento del bacino!!! Questa operazione si fa algebricamente come

Codice: Seleziona tutto

T0pl=[R0pl^T -R0pl^T*opl_0; 0 0 0 0 1]
il mio problema è che non posso trasporre semplicemte la matrice T0pl ma devo trovare una strada alternativa proprio come ho fatto per la sua costruzione. Questo è una problema di trasformazioni omogenee molto usato in robotica...ma io di robotica ne so un po' pochina...
Se vi serve mi vetto a disposizione tutto il codice del "programma"..grazie

Avatar utente
absinthe
Iper Master
Iper Master
Messaggi: 2354
Iscritto il: dom 15 mag 2005, 0:00
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze
Località: Prato
Contatta:

Re: Matlab inversione matrice rototraslazione

Messaggio da absinthe »

abbi pazienza ma non ci ho capito un tubo. potresti chiarire il problema?! il concetto è chiaro tu hai una matrice di rototraslazione o se preferisci - io preferiso- un vettore di traslazione e una matrice di rotazione. ma cosa è che non funziona?!

se i dati in tuo possesso sono in un sistema di riferimento A e li vuoi portare in un sistema B, detta Xa la matrice dei dati, Rab quella di rotazione da A a B e Tab il vettore di traslazione si ha che:

Xb=Rab * (Xa + Tab);

ciò detto non capisco dove sia il problema...


ciao,
M

Rispondi