필터 지우기
필터 지우기

From Euler Angle to Angle between 2 vectors

조회 수: 13 (최근 30일)
Simona Pernischova
Simona Pernischova 2019년 8월 20일
편집: James Tursa 2019년 8월 20일
Hi
I need the angle between two rigid bodies. Each has a local right handed 3D coordinate system, while the z axis is pointing at the direction of the body (bones in my case).
So I want the angle between the z axes. I don't know the length of the vectors but what my software is giving me are the euler angles.
I used acos(cos(alpha)*cos(betha)) to get to the angle, which is fine but does not work for small angles.
Now i have a task where i expect the angle to go from 0 to + 60 and then again to 0 and -60. But what happens is that the angles does not get smaller then 5°/-5° and then makes a jump. I have read that the issue is how acos & cos is computed and that i should use atan2d(norm(cross(u,v)),dot(u,v)); But i don't know how to apply that since i dont have the vectors, I only got the angles. To get to the vectors will take me a lot more computation time and I really don't want to do that. Is there another way?
Thanks,
Simona
  댓글 수: 1
James Tursa
James Tursa 2019년 8월 20일
편집: James Tursa 2019년 8월 20일
We need more precise definitions of your Euler Angles in order to help you. There are 12 different possible sets, and we don't know which set you are working with. Is it roll-pitch-yaw, or pitch-yaw-roll, or ...??? Once we have that sequence defined, it is a simple matter to form the z-axis of each and then find the angle between them (e.g., with that atan2 formulation).
Your statement that a formula works for big angles but not small angles is dubious ... a correct formula should work regardless of the size of the angle. Something is wrong.

댓글을 달려면 로그인하십시오.

답변 (1개)

Jan
Jan 2019년 8월 20일
There is no mathematical definition of "one angle between 2 3D-bodies". There is more than 1 degeree of freedom. An angle between 2 axes is possible. What is "alpha" and "beta" in acos(cos(alpha)*cos(betha)) ? Why do you assume, that the formula "does not work" for small angles? How are the Euler angles defined in your case?
The ACOS is instable near to 0, but you get deviations in the result by up to SQRT(EPS), about 1-e8. This is no explanation for your observation, that you get +-5 deg, while you expect +-60 deg.
Of course you need the vectors to determine the angle between them. There is no magic abbreviation to determine angles between axes based on Euler angles without computations.
If your Euler Angles are defined in the order XYZ, the Z-axis points to:
M.Z = [sin(E2), -cos(E2).*sin(E1), cos(E2).*cos(E1)];
where E1, E2, E3 are the corresponding Euler angles. For other orders, other formulas are needed. There are 12 different sets of orders, so please post, which one you are using.
After the two Z axes have been calculated, this is a stable method to determine the angle:
atan2(norm(cross(Z1,Z2)), dot(Z1,Z2))

카테고리

Help CenterFile Exchange에서 Matrix Computations에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by