In case anyone is reading this thread looking for driftless motion/rotation, the better method, not mentioned here so far, is to request a motion/rotation from the current, actual position/rotation, instead of from the currently-hoped-for position/rotation.
Old method:
Break a complete motion into a list of steps.
Ask object to move from one pre-calculated step to the next, expecting it to have landed exactly on each step perfectly
Suffer from accumulating drift.
Windy's method:
Break a complete motion into a list of steps.
Ask object to move from current position/rotation to the next step in a given time.
After waiting that given time, repeat until motion complete, allowing for small errors at each step but then ignoring them to determine change to next step.