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?
Chears!!! And thanks in advance!
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.
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.
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.
Related pull request in
navigation
package.