So now that I've worked with Matrices and Vectors quite a bit I'm going to tackle something I read about when I first started rigging. Rhino's procedurally animated hamster ball from Disney's Bolt. They talk about how it was made in the paper entitled "Rhino-Palooza: Procedural Animation and Mesh Smoothing". But rather than jumping right into it and trying a ball I wanted to start with something easier and automate a wheel. Hopefully some techniques that I used in this rig will transfer over to the ball.
I have to give credit to Andrew Christophersen for his technique of storing previous positions on other transform nodes in order to calculate vectors between frames. The frame cache technique I planned on using did not work in this case.
In his setup he ignores the twisting of the wheel along the Y-axis and only worries about the rolling and opts to rely on the rotations of the car control to orient the wheel along the motion path (not an actual motion path node just the path of motion the wheel takes).
My setup is a little more modular because the wheels rotations in all 3 axis are determined only using the world space translation of the wheel itself. This system works for a wheel of any radius, turning any direction and properly handles rolling both forward and backward. Here is the wheel in action:
I'm not going to explain the system in full because it is very similar to Andrew Christophersen's system. My addition was using a four-by-four matrix node and a decompose matrix node to align the wheel to it's motion vector by rotating it in the y-axis.
Eventually I may turn this system into a more compact and reusable form created with a script, but since this is really only a step towards rigging a ball that won't come until later.