Handling sensors and smoothing input

I haven’t had time to put up more photos or instructions, but have made a little progress with adding sensors to my Arduino (aka Freeduino) board. I now have a range of code and devices working including:

  • my GPS receiver (Garmin eTrex Legend) – parsing coordinates and, for example, positioning the camera in ossimPlanet
  • a Wii Nunchuk game controller (no, I don’t own a Wii… who has time for games!? :). I can use the accelerometer readings to turn the camera in ossimPlanet using 2-3 axes.
  • more recently I’m now taking readings from this digital compass chip/module.

I haven’t combined these yet, but that is the plan. The next challenge, however is to try to smooth the inputs to manageable levels. Of course the 1 sec rate of the GPS isn’t too bad, but the jitter of the compass and the accelerometers is quite high. So now I’m investigating the various techniques for making these readings more usable.

I’ve looked so far at some basic methods, like weighted or running averages, but also at application specific ones – such as ones used in open source projects for navigation via Kalman filtering (Autopilot uses it and so does the Paparazzi platform), designed for reducing fuzzy input into more manageable vectors.

So without going cross-eyed and learning more about partial derivatives.. what do you think is the right way to go? A few moving averages might be enough, but in the end I basically want similar functionality to an IMU. Is that biting off too much?


© Tyler Mitchell / Spatialguru.com