After killing bugs with angle calculation earlier, I found a stupid mistake in the steering angle calculation and problems with the lag compensation. Surely there's two or three more lurking, waiting to make a fool of me.
Anyway, the robot successfully completed three short runs outside the house, ending with a track variation of about 2' and a heading variation of about 10 degrees. While this is a big improvement over previous runs, there's still more to do than I'd like. Here's the analysis.
Heading estimation looks considerably better now, with the lag pretty well dialed. It looks like the uBlox heading is pretty solid, and the gyro isn't drifting too badly. For example, here's a section of one of the runs. you can see the close agreement between gyro-computed heading, estimated heading, lag estimated heading, and GPS course. The latter two are time-shifted to overlay the former two.
|Pretty close agreement between the various measurements and estimates|
The position estimation isn't quite there yet. The actual path the robot followed included riding up on the curb for two of the three runs. The ending position was further south by about 3m. At least it's relatively consistent. There's probably some residual heading error to eliminate.
I also don't know why the robot insists on steering to the left of the first waypoint; it's been doing this on every single one of the last dozen test runs. With the path following algorithm I'm using it should make a beeline for that first waypoint, bearing due east.
|Position estimation: close, but not quite.|