Transformation matrix using Rotation Matrix producing identity
10 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Good Afternoon All,
I am trying to find a transformation matrix from a local coordinate system to a global system using Euler angles (goal is to transform the local stiffness to global stiffness). The matrix is simply the rotational matrix, i.e. euler to DCM (rotation in xyz). According to all the published articles in regards to the mount transformation its DCM*K*DCM'. Easy enough to code but my logic may be faulty in this aspect....isn't DCM*DCM' the identity matrix? I am sure I am missing something here because the same thing has been published in multiple articles (<http://www.mecheng.osu.edu/adl/files/adl/conference_papers/C07-8.pdf)>. Everything works wonderful when I have zero degrees for the Euler angles but when I start applying the rotational (transformation) matrix the DCM cancel one another out. Anyone have any suggestions on how to resolve this issue? Should I just use DCM*K?
Here is my code:
K=[100 100 400]; Angles=[30,0,0];
%K_mi Mount Stiffness Matrix Caclulation
%Note: K_mi is the static input stiffness by user
%Obtaining Initial Individual Stiffness Values (Initial Input)
Kx=K(1);Ky=K(2); Kz=K(3);
%Setting up initial matrix
K_mi=zeros(3,3);
K_mi(1,1)=Kz;
K_mi(2,2)=Ky;
K_mi(3,3)=Kx;
%R_gmi: Rotational Transformation Matrix of K_mi
%Obtaining the Initial Orientation Value of Mounts
Theta=Angles(1); Rho=Angles(2); Phi=Angles(3);
Theta=Theta*pi/180; Rho=Rho*pi/180; Phi=Phi*pi/180;
%Rotational Matrix using Euler Angles
% Mathetmatical Representation XYZ Rotation
%[ cy*cz, sz*cx+sy*sx*cz, sz*sx-sy*cx*cz]
%[-cy*sz, cz*cx-sy*sx*sz, cz*sx+sy*cx*sz]
%[ sy, -cy*sx, cy*cx]
Rot_gmi=zeros(3,3);
Rot_gmi(1,1)=cos(Rho)*cos(Phi);
Rot_gmi(1,2)=cos(Theta)*sin(Phi)+sin(Theta)*sin(Rho)*cos(Phi);
Rot_gmi(1,3)=sin(Theta)*sin(Phi)-cos(Theta)*sin(Rho)*cos(Phi);
Rot_gmi(2,1)=-cos(Rho)*sin(Phi);
Rot_gmi(2,2)=cos(Theta)*cos(Phi)-sin(Theta)*sin(Rho)*sin(Phi);
Rot_gmi(2,3)=sin(Theta)*cos(Phi)+cos(Theta)*sin(Rho)*sin(Phi);
Rot_gmi(3,1)=sin(Rho);
Rot_gmi(3,2)=-sin(Theta)*cos(Rho);
Rot_gmi(3,3)=cos(Theta)*cos(Rho);
Rot_gmi;
%K_gmi: Local Stiffness Matrix transformed to Global coordinates
K_gmi=Rot_gmi*K_mi*Rot_gmi';
0 comentarios
Respuestas (1)
Matt J
el 11 de Jul. de 2013
Editada: Matt J
el 11 de Jul. de 2013
Everything works wonderful when I have zero degrees for the Euler angles but when I start applying the rotational (transformation) matrix the DCM cancel one another out.
Only because of the fortuitous combination of data that you've chosen. Try using
K=[200 300 400];
and you will see that you get K_gmi~=K_mi
>> K_gmi, K_mi
K_gmi =
400.0000 0 0
0 275.0000 -43.3013
0 -43.3013 225.0000
K_mi =
400 0 0
0 300 0
0 0 200
3 comentarios
Matt J
el 12 de Jul. de 2013
Editada: Matt J
el 12 de Jul. de 2013
I should mention that I have no background in the physics of your problem. Nor, I would assume, do most people on this board. However, your equations are behaving as the math predicts they should.
But if two spring values are the same K_gmi=K_mi
No, not always. Try this combination of input data
K=[100 100 400]; Angles=[30,20,10];
and you will get
K_mi =
400 0 0
0 100 0
0 0 100
K_gmi =
356.9188 -45.3017 94.9533
-45.3017 107.9879 -16.7428
94.9533 -16.7428 135.0933
It is true that if all three of the spring values are the same, then you will get K_gmi=K_mi independently of the rotation angles. I don't know if that's what you expect physically, but it is the expected mathematical behavior of the equations you've presented. In that case, K_mi is just a multiple of the identity matrix c*I and so
K_gmi = DCM*c*I*DCM.'
= c*(DCM*DCM.')
= c*I
= K_mi
If your rotation is purely about the z-axis, then something similar happens when Kx=Ky, which is what you were observing before.
Iain
el 12 de Jul. de 2013
I think I figured it out:
Reactive force = K * Displacement
If we have a matrix "K" defined in axis "A", and the displacement measured in axis "B", with a set of euler angles or a DCM (DCM, the way I'm using it transfers B to A):
K * DCM * Displacement = reactive force in axis A (not wanted)
DCM' * K * DCM * Displacement = reactive force in axis B (wanted)
Thats why its got both.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!