ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
So I have yet to run your test package, and I can't speak at all to the amcl
issues, but re: the EKF covariance, for any given time step, there are three covariance matrices that matter:
At every time step, we make a prediction about where we should be, given the motion model, and the also make a prediction about what the estimate error covariance matrix will be. The equation for prediction is this:
P = JPJ' + Q
Q
is the process noise covariance matrix. In general, if your pose covariance is growing too quickly, you'll want to check the values for your pose AND twist variables in the process_noise_covariance
parameter for the EKF. The odometry twist covariances are also important, so you can tune those as well.
2 | No.2 Revision |
So I have yet to run your test package, and I can't speak at all to the amcl
issues, but re: the EKF covariance, for any given time step, there are three covariance matrices that matter:
At every time step, we make a prediction about where we should be, given the motion model, and the also make a prediction about what the estimate error covariance matrix will be. The equation for prediction is this:
P = JPJ' + Q
Q
is the process noise covariance matrix. In general, if your pose covariance is growing too quickly, you'll want to check the values for your pose AND twist variables in the process_noise_covariance
parameter for the EKF. The odometry twist covariances are also important, so you can tune those as well.
EDIT 1 in response to comment question:
In many Kalman Filter formulations, I believe the time step is assumed to be constant, so Q
is also constant. In the state estimation nodes in r_l
, Q
gets multiplied by the time delta, so the process_noise_covariance
parameter is how much process noise you'd accumulate per second. This is necessary in order to cope with the measurements arriving at uncertain intervals. Tuning the values for Q
is not easy, and, from what I've seen, is typically done by watching the error growth and determining if it's reasonable (i.e., hand tuning).