Robotics StackExchange | Archived questions

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, pfsampleset_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?

Chears!!! And thanks in advance!

Asked by heber on 2012-03-28 08:50:22 UTC

Comments

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.

Asked by 130s on 2016-05-22 18:46:29 UTC

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.

Asked by FOXTER on 2016-05-24 14:28:48 UTC

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.

Asked by FOXTER on 2016-05-24 14:30:16 UTC

Related pull request in navigation package.

Asked by 130s on 2016-09-28 18:27:50 UTC

Answers