Something that we've been doing quite successfully is something to this effect:
Code:
double start = GetTime();
while (IsAutonomous())
{
double time_elapsed = GetTime() - start;
if (time_elaped < 0.5)
{
// time period of 0-0.5 seconds
speed = .25;
angle = some_N;
rotation = some_N;
}
else if (time_elapsed < 1)
{
// time period of 0.5 to 1 seconds
speed = .5;
angle = some_N;
rotation = some_N;
}
// ... and so on until 15 seconds
myDrive.Drive( speed, rotation );
}
Doing it this way allows you to manually say what speed you want it to go at any given point, and as long as you ramp it up slowly you should be good. Clearly having real traction control would be better, but this works well enough for us and gets us out of the reach of the human player.
As a bonus, we use the gyro to get the angle of the robot, and some things that can set the rotation parameter of our bot based on our current angle relative to the field so we can say "point the nose in this direction". Of course we have swerve/crab drive the so rotation stuff is a bit easier to implement since we can specify a heading and a rotation value.