12,289,187 members (33,926 online)
Add your own
alternative version

29.9K views
2.5K downloads
33 bookmarked
Posted

# Kalman Filtering: Part 2

, 9 Oct 2012 CPOL
 Rate this:
Please Sign up or sign in to vote.
A simple example of Kalman filtering and merging data.

## Introduction

This is a sequel to the previous article on Kalman filtering, and can be thought of as a more elaborate and more useful example. Kalman filters do a particularly good job of adaptively removing noise from a signal with as little distortion as possible. This example is for 2D navigation using a GPS and an inexpensive accelerometer.

Suppose you wanted to mow the lawn, or have a robot drop off a letter, or navigate very accurately off road. GPS provides inaccurate position and velocities (2.5 m rms, 10 cm rms, respectively) and using position and velocity a 2D Kalman filter will improve things.

Using only GPS means at best the signal to noise improves by averaging (sqrt(1/n)) and at 5 to 10 Hz the accuracy degrades rapidly with course changes. GPS also will “jump” in location as different satellites are periodically chosen to be added / removed from the solution. This jump is sometimes 10-15 meters. The velocity from GPS (computed from Doppler) has less noise, and “jumps” less when the satellite constellation changes.

The solution is to add another data source. There are several accelerometers available that can measure the linear acceleration. Simply put, they provide the rate of change in velocity, and after a coordinate transform, an do so in the same coordinate space as the GPS. In addition to a linear accelerometer, an angular with a second GPS would provide the course and further refine the solution, but for this example a linear accelerometer should be sufficient for a dramatic improvement. Relying only on the accelerometer causes a drift as noise and round off integrate.

The ideal thing about the accelerometer is the noise is small (0.002 m rms), it can be measured rapidly (1Hz – 5kHz), the errors are Gaussian (average out) and the error sources are completely different than GPS. Because there is no connection in noise source, the accelerometer and GPS error sources tend to cancel out.

## Requirements

Assuming we can get decent HW (below are very available HW specs at reasonable prices).

```GPS                2.5 m rms, 10 Hz
Accelerometer      2 mm rms, 1 kHz```

Operational goal:

`Goal               <25 cm rms for low dynamic movements`

## Design

The source code could have used a 3D Kalman filter (position, velocity, acceleration) but there is no real correlation between the GPS and the acceleration. It is simpler to use two filters and optimize each separately. One filter computes the velocity as a 2D Kalman (velocity, acceleration) such that the GPS Doppler is smoothed / corrected by the acceleration measurements. A second filter takes the highly accurate velocity information and filters in position. To get this to work in the horizontal plane, two filters for X (position, velocity) and two for Y (position and velocity) were used.

The test scenario is accelerating from a stop, cruising, slowing down, rotating, slow to stop, then start up and cruise back.

## Conclusion

The stock coefficients provided yield good accuracy balanced with good responsiveness: once acceleration is detected it immediately helps shift the position, the GPS slowly corrects against drift. I’m hoping to use this for a robots project in the future, and I’m hoping it helps others out there.

## License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

## About the Author

 Software Developer (Senior) KMC Systems United States
Phil is a Principal Software developer focusing on weird yet practical algorithms that run the gamut of embedded and desktop (PID loops, Kalman filters, FFTs, client-server SOAP bindings, ASIC design, communication protocols, game engines, robotics).

In his personal life he is a part time mad scientist, full time dad, and studies small circle jujitsu, plays guitar and piano.

## Comments and Discussions

 First Prev Next
 Kalman in IMU/AHRS winx9-Sep-14 4:30 winx 9-Sep-14 4:30
 Best GPS based system example souce code kasun61810-Oct-13 22:29 kasun618 10-Oct-13 22:29
 My vote of 5 kainraz13-Aug-13 5:36 kainraz 13-Aug-13 5:36
 Awesome Article - Thankyou David Shields11-May-13 23:50 David Shields 11-May-13 23:50
 Re: Awesome Article - Thankyou HoshiKata12-May-13 4:10 HoshiKata 12-May-13 4:10
 Re: Awesome Article - Thankyou David Shields12-May-13 15:17 David Shields 12-May-13 15:17
 Re: Awesome Article - Thankyou HoshiKata12-May-13 16:39 HoshiKata 12-May-13 16:39
 Re: Awesome Article - Thankyou David Shields13-May-13 0:47 David Shields 13-May-13 0:47
 Re: Awesome Article - Thankyou David Shields14-May-13 23:58 David Shields 14-May-13 23:58
 Re: Awesome Article - Thankyou HoshiKata15-Feb-16 5:09 HoshiKata 15-Feb-16 5:09
 Filtering without accerelometer Member 260151319-Dec-12 6:30 Member 2601513 19-Dec-12 6:30
 Re: Filtering without accerelometer HoshiKata19-Dec-12 6:41 HoshiKata 19-Dec-12 6:41
 Re: Filtering without accerelometer HoshiKata22-Apr-13 11:49 HoshiKata 22-Apr-13 11:49
 please help eclipse20045-Dec-12 20:18 eclipse2004 5-Dec-12 20:18
 Re: please help HoshiKata22-Apr-13 11:52 HoshiKata 22-Apr-13 11:52
 real example Stephan Brunner20-Nov-12 9:19 Stephan Brunner 20-Nov-12 9:19
 Demo with Kalman3D ? x8935-Nov-12 0:02 x893 5-Nov-12 0:02
 Re: Demo with Kalman3D ? HoshiKata7-Nov-12 13:48 HoshiKata 7-Nov-12 13:48
 Re: Demo with Kalman3D ? HoshiKata22-Apr-13 11:50 HoshiKata 22-Apr-13 11:50
 Can't download the zip file either ? BigAlBuchanan8-Oct-12 14:23 BigAlBuchanan 8-Oct-12 14:23
 Re: Can't download the zip file either ? HoshiKata9-Oct-12 6:15 HoshiKata 9-Oct-12 6:15
 The zip file cannot be downloaded wvd_vegt3-Oct-12 0:41 wvd_vegt 3-Oct-12 0:41
 Re: The zip file cannot be downloaded HoshiKata9-Oct-12 6:15 HoshiKata 9-Oct-12 6:15
 Last Visit: 31-Dec-99 18:00     Last Update: 23-May-16 16:58 Refresh 1

General    News    Suggestion    Question    Bug    Answer    Joke    Praise    Rant    Admin

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160518.1 | Last Updated 9 Oct 2012
Article Copyright 2012 by HoshiKata
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid