# 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):

`~odom_alpha1`

Expected noise in odometry's rotation estimate from the rotational component`~odom_alpha2`

Expected noise in odometry's rotation estimate from translational component`~odom_alpha3`

Expected noise in odometry's translation estimate from the translational component`~odom_alpha4`

Expected noise in odometry's translation estimate from the rotational component

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:

`alpha1`

is**translation**noise from rotation, not rotation from rotation`alpha4`

is**rotation**noise from rotation, not translation from rotation

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.