Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<blockquote> <p>"what are the advantages and disadvantages of Kalman Filter and Exponential Filter? I think, Kalman filter is more computationally complicated but it has a more detailed model of the system so it is more accurate(?) in multi-sensor fusion."</p> </blockquote> <p>That's basically it, in general the better your model the system is, the better your filter will be, regardless of whether you're using a Kalman filter. </p> <blockquote> <p>"The Exponential filter is more useful in noise cancellation, when there is jitter etc. whereas the Kalman filter is useful for the actual multi-sensor fusion. Is this correct?"</p> </blockquote> <p>I would disagree with this statement. The Kalman filter is being smart about the noise cancellation. It's a lot smarter than a low pass filter can be because it takes full advantage of all the information stored in the covariance matrix. If the performance measure you're looking at is "How closely does the filtered value match the true value?" I think the best a simple low pass filter can hope to do is match it's performance, and that is only in the simplest case of a <a href="http://en.wikipedia.org/wiki/Random_walk" rel="nofollow">random walk</a> . As soon as you have an interesting state-transition matrix I think the low pass filter has no chance, because it can't see how velocity uncertainty leaks into position uncertainty, for example.</p> <blockquote> <p>"I am trying to combine a magnetic compass and gyroscope for estimating true orientation."</p> </blockquote> <p>This is exactly the sort of thing a Kalman filter is designed for.</p> <p>But if you're worried about the complexity of implementing a kalman filter, start by implementing the low pass filter version:</p> <p>1) Start with a simple simulation </p> <pre><code> predictedAngle = oldAngle+rotationRate*dt </code></pre> <p>2) Update the simulation state based on your measurements</p> <pre><code> rotationRate = alpha1*rotationRate +(1-alpha1)*gyro.rotationRate filteredAngle = alpha2*predictedAngle+(1-alpha2)*compass.angle </code></pre> <p>That is basically the framework for the kalman (simplest) filter for this system. All that's missing is to:</p> <ul> <li>Write everything in matrix format</li> <li>Add "process noise" during the simulation step</li> <li>Add a step to Calculate the "optimal kalman gains" instead of using fixed values for the <code>alpha</code>'s</li> <li>Add a step to <a href="http://en.wikipedia.org/wiki/Kalman_filter#Update" rel="nofollow">update the filter's covariance</a>.</li> </ul> <blockquote> <p>"Also, how useful is the Genetic Algorithm for sensor fusion?"</p> </blockquote> <p>I don't see where they would fit in. Can you elaborate?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload