I made a simpler version of my problem but basically the cross is parented to the cylinder and should spin along its local z axis whilst the parent cylinger also turns around, but the cross rotates all over the place instead of just its z axis, the final position is correct but the movement inbetween makes no sense? here is the file and thanks in advance: https://we.tl/t-9S6WRXeQFt
1 Answer
Thoose kind of problem arise from how Euler rotations are evaluated: if XYZ Euler is choosen, Z is evaluated first, then Y, then X.
Every rot that comes after gets influenced by the formers, so that start and end orientations will be in place, while the inbetween interpolation becomes nearly unpredicatble (and this is the reason why such a complicated concept like Quaternion rotations has been created).
In the example you uploaded, to solve, go to frame 1, go to graph editor (or Dopesheet), select the cross and delete its X and Y animation channels; then set its rotation mode to Euler ZYX.
Another way to solve is to animate the cross while in horizontal orientation (i.e. facing the sky and using its Z rot channel only), then set it child of an empty, then rotate the empty to set its final orientation and set the empty child of the Cylinder. In this way the whole coordinate system of the cross is rotated and the Euler interference is avoided.
Check some tutorials about Euler vs Quaternion rotations and Gimbal lock problems for a better understanding of the issue.