Repository 32bit  Forum
Repository 64bit  Wiki

Matlab inversione matrice rototraslazione

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Matlab inversione matrice rototraslazione

Messaggioda odiusseus » mar apr 20, 2010 22:03

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
odiusseus
Linux 2.4
Linux 2.4
 
Messaggi: 352
Iscritto il: sab giu 30, 2007 14:09
Località: roma/vibo valentia
Slackware: 13.0
Kernel: 2.6.32.2
Desktop: kde

Re: Matlab inversione matrice rototraslazione

Messaggioda absinthe » gio apr 22, 2010 19:09

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


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite