In Pursuit of a Simple, COTS GPS/INS

GPS/INS (Global Position Systems / Inertial Navigation Systems) are used for a variety of applications (UAVs, robots, or even your more aggressive propulsive devices) which basically tell you where you are and how you are oriented (i.e. 3-dimensional position, velocity, and attitude). Anyone who’s taken a graduate course in estimation or filtering has probably written a version of a Kalman filter for GPS/INS applications. But I’ve never actually made one, so I decided to put together a few COTS components into the following:

10371477_10104927279958344_7244770016283685194_n

The unit is composed of :

  1. ITG3200 rate gyro (red breakout board on the top right)
  2. ADXL345 accelerometer (red breakout board on the top right)
  3. ADXL335 accelerometer (red breakout board on the top middle)
  4. MTK3339 GPS operating at 10Hz (top left)
  5. HMC5883L magnetometer (bottom left)
  6. nRF24L01+ wireless transceiver (bottom right)
  7. Arduino Nano

Note that there’s a redundancy in the sense that I have two accelerometers, one that came as a part of the IMU breakout board. All of these components are mounted on a 6cm x 8cm PCB which is powered by a 5V supply. At some point I’m going to try and shrink it further. The individual chipsets themselves can be removed from the breakout boards. The ATMega328 microcontroller itself is a much smaller component than the Arduino Nano. And it would be nice to actually have a small form-factor PCB custom-made for this.

Anyway, that’s a secondary problem. The first problem is to get some meaningful data out of this board. I’m in the process of coding an extended Kalman filter in AVR, but the real challenge is getting it to fit on the 32kB of memory that the Arduino Nano provides.

I’ve experimented with assessing the GPS errors themselves. I left it switched on for an entire day, and was able to plot the reported latitude and longitude on a Google Map tile below:

dum

GPSDrift

Of course, one sees the usual features of drift over time. Converted to actual distances based on the reference latitude and longitude, the error can be as large as 60m! However, the statistically it seems to make sense; the RMS error in position is approximately the same as the published value.

GPSDistanceError

Leave a comment