Can the Kalman filter predict where an object will track after hitting a wall?

I track an object moving in a fixed-size frame using a standard 2D CV (constant velocity) dynamic model as it moves across the free space in the center of the box. But when it hits the edges of the box, it's harder to move. The billiard ball mechanism will work in a first approximation, but this model seems very different from the CV model and I'm not sure how to include it in the Kalman filter update step.

Is limited motion (object in a box) a good use case for Interacting Multiple Model (IMM) filters, combining both CV and billiard models? If so, will such a filter predict future collisions if I ask it to predict several dozen time steps into the future? Or is there a way to change the state variables of the CV filter when a collision occurs so that subsequent update and prediction steps continue to track the object's movement (albeit in its new reflected direction)?

+3


source to share


2 answers


The Kalman filter is optimal only when working on linear systems, but almost no systems are linear, and almost all Kalman filters are used in nonlinear systems using some approximation such as EKF (Extended Kalman Filter) or UCF (Unscented Kalman Filter).

So your intuition is good, but your particular case has a problem: when using KF with a nonlinear system, there is an assumption that in a very short amount of time (time between updates) you can approach your system as a bunch of straight lines.



EKF does this with the Jacobian. When you replace F

(linear matrix) with a f()

function (which accounts for your bounce), you can easily fix your update step. But the real heart of KF is error propagation. To make this work, EKF uses the Jacobian to find the slope of the line tangent to your nonlinear function f()

at your design point. So if your f()

curve is around because in the update step we are scaling waaay in and zooming in like a straight line (sort of like drawing a circle with many straight line segments). The catch in your case is thatf()

must be a continuously differentiable function. As you get closer to the bounce point, there is the inflection point where the ball changes direction. No matter how shorter your timestep is, no matter how close you get to the bounce point, any estimate of your movement as a straight line either continues into the bumper or "bounces" earlier by removing.

How will it fail? When you evaluate your measurements (via Hx

or h(x)

) and compare with real measurements z

, you will find that your subject is slightly off-position. Let's say the object is further away from the bumper than expected. Did he hit the bumper too quickly? Or is it over and too late? The filter doesn't know, it just assumes based on which linear approximation you chose for F

above. If your linearization point is before the bounce, the filter will move the object towards the bumper and increase the calculated speed. If the linearization is after (and the contribution of the velocity contribution to the position is inverted), it will move the ball closer and decrease the design velocity.

+2


source


The Kalman filter is only capable of handling linear process functions, so it probably would not be a good choice since billiard ball mechanics do not meet this criterion.



For a task like this, I'll probably try to use a particle filter (or recursive Monte Carlo) with a process variable (position, speed). This is the common model used for robot navigation for ex. He will be able to predict several steps in the future, adjusting uncertainty depending on collisions, etc.

+4


source







All Articles