2015-11-02 2 views
0

Je vais tourner d'une image à l'autre avec une matrice de rotation. Le but du programme est de rendre mon Gyro parallèle à la terre, cela signifie que le vecteur de sortie devrait avoir deux premiers chiffres zéro et un troisième -9.81. Codes:Matrice de rotation dans Matlab

vs1 = 1; 
vs2 = -0.003; 
vs3 = -9.808; 

vst = [vs1 vs2 vs3]'; 

alpha = (acosd(vs1/sqrt(vs1^2+vs2^2))); 

gama = (acosd(vs2/sqrt(vs1^2+vs2^2))); 

beta = (acosd(vs3/sqrt(vs1^2+vs2^2+vs3^2))); 
R1 = [(cosd(gama)*cosd(beta)*cosd(alpha))-(sind(gama)*sind(alpha)) (cosd(gama)*cosd(beta)*sind(al)+sind(gama)*cosd(al)) (-cosd(gama)*sind(beta));((-sind(gama)*cosd(beta)*cosd(alpha))-cosd(gama)*sind(alpha)) ((-sind(gama)*cosd(beta)*sind(alpha))+(cosd(gama)*cosd(alpha))) sind(gama)*sind(beta);sind(beta)*cosd(alpha) sind(beta)*sind(alpha) cosd(beta)]; 
disp (R1*vst) 

résultat pour vs1, et VS3 est vs2: -0,00599, 0.0000359 et 9.858845622079866. d'abord, je ne peux pas comprendre pourquoi le programme me donne Z positif et pourquoi il ne fait pas les deux premiers nombres zéro?

merci d'avance

+0

C'est soit un bug ou une idée fausse. Dans les deux cas, vous êtes la meilleure personne pour le résoudre. Essayez de décomposer votre code en petites parties et vérifiez-les soigneusement. La ligne définissant R1 est dangereusement trop longue par exemple. – Ratbert

Répondre

0

Vous avez un bug dans votre code. Il y a deux endroits où je pense que la variable "al" devrait être "alpha" si je suis votre code correctement.

Mais votre code génère également alpha = 90 et gama = 180 pour ces entrées. Tout ce que vous allez faire est de retourner les axes à l'intérieur de la précision de la machine avec ces entrées, de sorte qu'il ne va pas atteindre les résultats que vous recherchez.

1) Êtes-vous sûr que le vecteur d'entrée est correct? Pourquoi la gravité aurait-elle une valeur proche de X = 1 si vous êtes presque vertical (Z = -9.808)?

+0

vous avez complètement raison. il ne devrait pas être 1. mais de toute façon pour tout nombre pour vs1, si je mets un nombre négatif (pour vs2) le résultat n'est pas bon. –

+0

Étant donné les angles alpha et gama générés, je demanderais d'abord s'ils sont calculés correctement. Avez-vous essayé une entrée comme vst = [1,1,1] 'pour voir si elle génère un ensemble d'angles raisonnable? – txpaulm