My first try at correcting for this was to simply put in an adjustment factor for the motors. This helped but to make things interesting it seems that the 'bot motors behave differently at different battery charge levels (and speeds). So, I said to myself, why not write a routine that detects the drift of our heading and then tweaks the adjustment factor? I then said to myself, it should probably be sensitive to the amount of variation and raise or lower the amount of each adjustment based on the deviation in our heading. Finally, and this was turning into a long conversation with myself, I said to myself, you should probably put in a quiesce for a number of cycles to let the adjustment take effect before trying again, and, you should also make these different factors tunable as startup arguments.
So we (me, myself, and I) get all this coded and try it out. Does not work. Not even close. It appears to be doing all the right things but the 'bot is veering radically to the left. We put in all kinds of debug statements and can not figure out why it would be acting this way.
Finally it dawns on us. In an earlier post I mentioned that we are renting a place (moving out in a couple of weeks now that we have finally bought a place) that sits just about underneath Brunei's famous Sounding Arches railroad bridge in Maidenhead. This has to be one of the busiest train lines in the world as it is the major east west line into and out of the centre of London. I knew that we get a lot of electro magnetic interference from the trains but thought that was only the occasional variation in bearing as a train passes (also plays havoc with TV reception via an ariel). As you can see from the two compass readins we are getting a lot more than just an occasional glitch. These two readings are taken long a five foot divider between our kitchen and lounge. In that five feet we get a variation in bearing of almost 20 degrees!
It is NOT my code that has an issue here! The 'bot is chasing a compass bearing that is far from constant to the magnetic north pole!