Repository 32bit  Forum
Repository 64bit  Wiki

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.

Matlab inversione matrice rototraslazione

Messaggioda odiusseus » mar apr 20, 2010 21: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 13: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 18: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: sab mag 14, 2005 23: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 2 ospiti

cron