# AMCL Observation Model

Hi! I'm studding some localisation algorithms and now I'm focused in Particle Filters.

I'm using AMCL as a case study. To understand the algorithm and the meaning of the parameters, I had reviewed AMCL source code and read the book Probabilistic Robotics, by Thrun, Burgard, and Fox.

Analyzing the function: double AMCLLaser::LikelihoodFieldModel(AMCLLaserData data, pf_sample_set_t set)

I have some doubts and I like to hear other opinions. So it is here (amcl_laser.cpp):

      //       p *= pz;
// here we have an ad-hoc weighting scheme for combining beam probs
// works well, though...
p += pz *pz *pz;


In the book should be p * = pz but in the code p += pz*pz*pz; Someone understand this option?

And in this line we have:

sample->weight *= p;


And I think that should be (pag 98 of the book):

sample->weight = p;


By the way, can someone suggest another alternative to AMCL?

edit retag close merge delete

2

This was closed due to "question is not relevant or outdated". However, I just hit this same question, and this is I think specific to ROS (/Player) AMCL implementation (ie. this isn't a generic AMCL issue), so I've reopened it.

( 2016-05-22 18:46:29 -0500 )edit
1

I am also working on a project where i use AMCL, and am very curious about the changes in the algorithm. My theory is that the algorithm in the book assumes a completely correct and static map, where in the likelihood field, dynamic objects might result in a single beam scoring very low.

( 2016-05-24 14:28:48 -0500 )edit

When multiplying the probabilities this might "punish" an otherwise good scoring pose/scan. When adding the probabilities together a single "bad" beam doesn't punish the entire sample.

( 2016-05-24 14:30:16 -0500 )edit

Related pull request in navigation package.

( 2016-09-28 18:27:50 -0500 )edit