It's easiest to see if we take the extreme example of going from the
default orientation q1 = [1,0,0,0] to a rotation of pi radians around
the x axis: q2 = [0,1,0,0]. If you use the linear method, you get w_s
= [2,0,0]/dt. If you use the slerp method, you get w_s = [pi,0,0]/
dt. Clearly the second one is correct. We want to rotate pi radians
around the x axis in dt time. If you then use the FiniteRotation flag
on the body, w_s will produce the desired result. w_l will not.
Using infinitesimal rotation, w_l results in a final orientation q_l=[.
707,.707,0,0] which is half of the desired change; w_s produces a
final orientation of q_s=[.537,.844,0,0]. I suppose that under the
infinitesimal method, we would need infinite velocity to makes such a
drastic change in a single time step. It looks like the slerp method
with FiniteRotation is the one to use if you need a kinematic body to
get to the right orientation at each time step while still pushing
dynamic things out of the way. This seems a bit intensive, but
shouldn't be a big problem for a small number of bodies. It's not
ideal, but I hope it'll do.
jc