Robotics StackExchange | Archived questions

Inconsistent odom_alpha1 and odom_alpha4 parameters between AMCL's diff and omni models?

I've been working on AMCL's source code lately and noticed the following inconsistency. I was gonna open a GitHub ticket, but thought I'd get a second opinion here first.

Update: I ended up opening the issue: navigation/issues/499


Here goes:

The amcl wiki page says (abbreviated):

In the source code (amcl_odom.cpp), we see the following for the diff and omni models:

For diff:

delta_rot1_hat = angle_diff(delta_rot1,
          pf_ran_gaussian(this->alpha1*delta_rot1_noise*delta_rot1_noise +
                          this->alpha2*delta_trans*delta_trans));
delta_trans_hat = delta_trans - 
          pf_ran_gaussian(this->alpha3*delta_trans*delta_trans +
                          this->alpha4*delta_rot1_noise*delta_rot1_noise +
                          this->alpha4*delta_rot2_noise*delta_rot2_noise);
delta_rot2_hat = angle_diff(delta_rot2,
          pf_ran_gaussian(this->alpha1*delta_rot2_noise*delta_rot2_noise +
                          this->alpha2*delta_trans*delta_trans));

This is consistent with the wiki page's explanation.

However, for omni:

double trans_hat_stddev = (alpha3 * (delta_trans*delta_trans) +
                           alpha1 * (delta_rot*delta_rot));
double rot_hat_stddev = (alpha4 * (delta_rot*delta_rot) +
                         alpha2 * (delta_trans*delta_trans));
double strafe_hat_stddev = (alpha1 * (delta_rot*delta_rot) +
                            alpha5 * (delta_trans*delta_trans));

This seems to imply that:

In other words, alpha1 and alpha4 look flipped in the omni model (compared to diff and the wiki page). The other two common params, alpha2 and alpha3, are OK. The inconsistency also appears in the corrected versions of the two odom models btw.

What do people think? Seems inconsistent to me.

Asked by spmaniato on 2016-07-11 11:14:02 UTC

Comments

Answers