I decided to throw my little bit of experience into the mix and hope nobody minds.
First I have to say that I am in complete agreement with everything the experts have said here, particularly the bit about it not being easy to do this at all. Getting the tracks to move properly is penance enough without having to get the track pads to stay distortion-free as they wind their merry way around the curve…
But one thing occurs to me, why not break it down to a mathematical problem, in in that I see three basic scenarios - the tank is moving in a straight line, the tank is rotating about its centre, the tank is rotating about a point to the left, or right of the tank. Each one has a mathematical solution to how much the tracks should move. Possibly the two rotations could be made into one scenario, needs more work here.
So lets take any solution, the tracks have an array mod, then a curve mod and move in one deformation axis. So let’s line the tank up along the Y axis, for no reason at all and let’s parent the curves to the hull and also the tracks to the hull - madness in most eyes I know, but bear with me.
So, scenario 1; the tank moves along the Y axis - if the tank moves 10 units, the tracks move back 10 units, so the bottom tracks stay still on the ground. Now lets move to the X axis, just rotate the tank 90 degrees and move the tank 10 units in X and the tracks move back 10 units in Y, this is still the curve mod deformation axis. Maths is easy, just reverse the tanks movement. Now lets turn it and move it 60 degrees to the Y axis - this time we can use an Empty at the start of the movement and measure the distance away from the empty as we move the tank, then move the tracks back the same amount - maths is easy still, if we know the distance, or it’s vector maths for us…
Next, scenario 2; the tank rotates around its centre - if the tanks tracks are 2 units away from the centre of the tank they will move rotated_angle * 2 units backwards on the inside track and the same forwards on the outside track, or the other way around depending on which way the tank turns.
Then, scenario 3; the tank turns around a remote point, the centre of the tank will travel rotated_angle * radius of turn - so the next step is that the tracks are spaced from the tank hull, so the inside track travels at rotated_angle * radius of turn - half track width and the outside track travels at rotated_angle * radius of turn + half track width, maths is still quite simple. All we need to do is to know which side the centre of rotation is so we know which track to slow down and which to speed up. Both turn scenarios rely on using Radians for angles, not degrees, degrees just make the maths more complex.
Here is the first image:
@norvman will recognise the tracks, why re-invent the wheel? The best way I know to implement the maths easily, well relatively, is to use Animation Nodes, here is the node tree I threw together:
There are some fairly complex expression nodes in there, these are used to control the various scenarios, including one that is used when you switch from left to right turns - this is either 1, or -1 so the differential on the track movements is correct., there is a little number node on the left to set this, we could measure which track is closest and make this automatic, is it worth it? probably not.
Now we come to using the setup, the “hull” empty is moved in a straight line and the tracks turn, this is calculated by the distance from the “start” empty. When you want to execute another manoeuvre simply move the “start” empty up to the tank over 1 frame - no-one will ever notice…
Next, you want to do a quick centre spin - just rotate the “hull” empty and the tracks turn one forwards, one backwards at the same rate.
Then you want to turn about a remote centre - move the “centre-turn” empty to level with the “hull” empty at the required distance away, parent the hull empty to it, or use a Child Of constraint, then rotate this empty and the tracks move proportionally to their distance from the centre of rotation.
AN takes care of it all, here is the tank on a curve showing how much each track has moved in the boxes in the Node Editor window:
Or you have to keyframe the whole bloody thing bit at a time, the maths certainly helps, but as the wise sages have said - “There is no easy solution”.
Let me know what you think, I could then discuss making the project available.
Curiously enough, the reason why the maths works is because the tracks are parented to the hull as well as the curves, then I move them afterwards with mathematical operators.
Cheers, Clock.
BTW, wheels on the tank have been covered perfectly well by Richard and others, just use the distance moved divided by the wheel radius to rotate it the correct amount.