ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

How does the package handle multiple sensors of the same type (10 IMUs for instance) if one of the sensors is publishing a grossly erroneous value compared to the other sensors? Does it do some form of weighted averaging or is there some built in statistical analysis that assesses the data and detects outliers?

Kalman filters are just fancy weighted averaging. The weights are determined by the filter's estimate of the error in its state and the error reported by the sensor measurements. The pure Kalman filter math doesn't account for outliers as such (it assumes that outlier measurements would correctly report their increased error), but the robot_localization package does allow you to reject outliers via the rejection_threshold parameters. Those are given as Mahalanobis distances.

Is there a diagram of the control functionality for the EKF?

Not for this particular EKF, but most of the stuff you'd find online for EKFs would be accurate for this use case.

What I mean by this is, if you have a velocity sensor, do you derive its value to achieve an acceleration estimate to assist in EKF comparison between sensors or is it all flowing downward from a highest order down to a position estimate?

In the core EKF math, not explicitly, no. But that's not needed. The pose and velocity variables, for example, are correlated through the transition function and the transfer function jacobian matrix. The magic of matrix inversion is such that if you were to measure the pose at time A and again at time B, the filter output will produce a velocity in the state output.

Having said that, the filter allows you to use differential mode for a given sensor, which will differentiate the poses between two (temporally) adjacent measurements and pass the resulting velocity to the filter. This is handy when you have two sources of disagreeing pose data, but the relative motion in each of them is correct.

How does the package handle multiple sensors of the same type (10 IMUs for instance) if one of the sensors is publishing a grossly erroneous value compared to the other sensors? Does it do some form of weighted averaging or is there some built in statistical analysis that assesses the data and detects outliers?

Kalman filters are just fancy weighted averaging. The weights are determined by the filter's estimate of the error in its state and the error reported by the sensor measurements. The pure Kalman filter math doesn't account for outliers as such (it assumes that outlier measurements would correctly report their increased error), but the robot_localization package does allow you to reject outliers via the rejection_threshold parameters. Those are given as Mahalanobis distances.

Is there a diagram of the control functionality for the EKF?

Not for this particular EKF, but most of the stuff you'd find online for EKFs would be accurate for this use case.package.

What I mean by this is, if you have a velocity sensor, do you derive its value to achieve an acceleration estimate to assist in EKF comparison between sensors or is it all flowing downward from a highest order down to a position estimate?

In the core EKF math, not explicitly, no. But that's not needed. The pose and velocity variables, for example, are correlated through the transition function and the transfer function jacobian matrix. The magic of matrix inversion is such that if you were to measure the pose at time A and again at time B, the filter output will produce a velocity in the state output.

Having said that, the filter allows you to use differential mode for a given sensor, which will differentiate the poses between two (temporally) adjacent measurements and pass the resulting velocity to the filter. This is handy when you have two sources of disagreeing pose data, but the relative motion in each of them is correct.