http://64.46.156.80/robot/ Over the weekend I did some major re-design of the software.(A frustrating and time consuming process.)
Originally, the PID system was a velocity based control, which was good for manual control, but wasn't very flexable. Aside from re-organizing the class heirarchy, I implemented a "PathPlanner" object that controls the PID algorithm targets. (Most of the code is fairly generic at this point as well, requiring only minor changes for different applications.)
Now, to alter the motion of the robot, one only needs to create a "pathplanner" object.
There are currently two planners, "manual" and "line," the manual planner provides keyboard control, the line planner provides forward, backward, rotate left, and rotate right, with distance and speed. The line planner has a controlled acceleration, but the deceleration is a bit more tricky and is a little sudden at the very end of the motion, will work out the math on that problem this week -- probably.
It isn't hard to imagine that higher level functionality can be implemented simply as a new type of planner.