Here is the demonstration that ‘if you apply a series of rotation by decomposing the angle into a sequence of small rotations, what you get is a series of rotation than can be applied in any order"
let us say the desired angles are P ( pitch) and Y (yaw)
Let us say we take:
- Code: Select all
P = n * dp
Y = n * dy
This extends to three angles but for simplicity let just use two.
where n in a numbe is smal delta angle and the desire product matrix is
- Code: Select all
M = Pitch(P) * Yaw (Y)
Whet Pitch an dYaw are matrix function that calculate a rotation around X and Y axis
Substituting P and Y we get
- Code: Select all
M = Pitch[dp(0) + dp(1) + … dp(n)] * Yaw [dY(0) + dy(1) + … dy(n)]
M = Pitch(dp(0)) * Pitch(dp(1)) * … Pitch(dp(n))) * Yaw (dY(0)) * Pitch(dy(1)) * … Pitch(dy(n)))
This if not what we want, what need an serirus of angle like this
- Code: Select all
M = Pitch(dp(0)) * Yaw (dY(0)) * Pitch(dp(1)) * Yaw (dY(1)) * … Pitch(dp(n)) * Yaw (dY(n));
But this apperas to breaks the commutative laws of linear algebra of matrix mutiplication.
Let us see what the general turn Pitch(dp(n)) * Yaw (dY(n)) look like
- Code: Select all
1 0 0
Pich(dp) = 0 cos(dp) sin(dp)
0 -sin(dp) cos(dp)
cos (dy) 0 -sin(dy)
Yaw(dy) = 0 1 0
sin (dy) 0 cos(dy)
product of these matrix is given by
- Code: Select all
cos (dy) 0 -sin(dy)
Pich(dp) * Yaw(dy) = sin (dp) * sin (dy) cos(dp) sin (dp) * cos(dy)
cos (dp) * sin (dy) -sin(dp) cos (dp) * cos(dy)
cos (dy) sin (dy) * sin (dp) -sin(dy) * cos(dp)
Yaw(dy) * Pich(dp) = 0 cos(dp) sin(dp)
sin (dy) -cos (dy) * sin (dp) cos(dy) * cos(dp)
we can see that simbolically they are very different, but we know that if we select dy and dp not to be larger than some small value,
then we can make these approximations
- Code: Select all
cos (dp) ~= cos(dy) ~= 1.0;
sin (dp) ~= sin(dy) ~= dy ~= dp;
for example of dp = 2 degress of less (a large value)
- Code: Select all
cos (3.1416/180) = cos (0.0393) = 0.999 ~= 1.0
sin (3.1416/180) = sin (0.0393) = 0.035 ~= 0.0393
now if we make these substitutions, we get
- Code: Select all
1.0f 0.0 -dy
Pich(dp) * Yaw(dy) = dp * dy 1.0 dp
dy -dp 1.0
1.0 dy * dp -dy
Yaw(dy) * Pich(dp) = 0 1.0 dp
dy -dp 1.0
they still look different but we also know that of if if dp and dy are a small value, then dp * dy is a secund order smaller values
ex: dp = 0.0393 * 0.0393 = 0.0015
this suggest that we can neglect the secund order small values comimg from the product of the sin of two or more small deltas, and we now get
- Code: Select all
1.0f 0.0 -dy
Pich(dp) * Yaw(dy) = 0.0 1.0 dp
dy -dp 1.0
1.0 0.0 -dy
Yaw(dy) * Pich(dp) = 0 1.0 dp
dy -dp 1.0
and
wich proof that for a small angles, the product of tow rotaion matrices is comutative.
Pich(dp) * Yaw(dy) = Yaw(dy) * Pich(dp)
now going back to the product of two large angles, by using a sumantion of all teh small angles, we get
- Code: Select all
M = Pitch(dp(0)) * Yaw (dY(0)) * Pitch(dp(1)) * Yaw (dY(1)) * … Pitch(dp(n)) * Yaw (dY(n));
= Pitch(dp(0)) * Pitch(dp(1)) * … Pitch(dp(n))) * Yaw (dY(0)) * Pitch(dy(1)) * … Pitch(dy(n)))
~= Pitch(dp(0)) * Yaw (dY(0)) * Pitch(dp(1)) * Yaw (dY(1)) * … Pitch(dp(n)) * Yaw (dY(n));
and this is what make possible to make a general 3dof euler joint, if we accept that teh Error is limiet to a max angule velocity
you cna mix any combination of angle and they will work