User:Prashantserai

Monte Carlo localization or MCL is a very well known and popular technique for Localization of Mobile robots. The algorithm for the same Algorithm MCL is shown in figure below. It is well known that, in order to have MCL work well, the amount of uncertainty in the sensor model needs to be inflated, which may not be very satisfactory. There have been approaches proposed in literature to alleviate the above-mentioned problem like incorporating only a limited number of readings at a time, "Robust Monte Carlo localization for mobile robots", "Unscented Particle Filters", "Improved Likelihood Models for Probabilistic Localization based on Range Scans", "Adaptive Full Scan Model for Range Finders in Dynamic Environments", etc. which have their respective limitations.

It was felt that, apart from the discreteness in the sample representation of the particle filter, another reason that necessitates the inflation of the sensor noise is the linear proportionality of, the belief probability function represented by the particle filter to, the density of particles. For a non-inflated model, the dynamic range of probabilities of the plausible hypotheses can be quite significant, and thus the use of linearly proportional resampling creates a loss of particle diversity. Consequentially, a variation is proposed to the Monte Carlo localization technique described in Algorithm MCL2; wherein the weights $$w_t^{[m]} $$ are transformed by a sublinear function $$myfunc$$ for eg. cube-root, log, etc. The resampling is then carried out proportional to the transformed weights $$ v_t^{[m]} $$. After resampling, along with the particle pose, the remaining weight of the particle i.e. $$ \frac {w_t^{[m]}} {v_t^{[m]}} $$ is also retained. The transformation function $$myfunc$$ could also be chosen at run-time for each iteration, depending on the weight distribution across the particles,

It is felt that such a modification, might allow better accuracy than compared to use of inflated sensor noise or a subset of readings, while retaining the robustness. The performance of the proposed idea remains to be evaluated though.

EDIT: Algorithm MCL3 has been implemented and run in a certain scenario. The variance between pose estimates obtained with successive runs was in fact observed to be higher for Algorithm MCL3 as compared to the original Algorithm MCL. This might in fact be an indication of poorer accuracy of the proposed technique. The observations haven't yet been adequately probed, though.

I also intend to work out a similar way to avoid inflation of motion model parameters. If the motion noise is generated with sublinear proportionality to the probability in the motion model, a corresponding weight could be generated to account for the difference between the actual probability and the probability used for sampling.

Here is the existing Algorithm MCL: Algorithm MCL$$(X_{t-1}, u_t, z_t)$$: $$\bar{X_t} = X_t = \emptyset$$ for $$m = 1$$ to $$M$$: $$x_t^{[m]} = $$ motion_update$$(u_t, x_{t-1}^{[m]})$$ $$w_t^{[m]} = $$ sensor_update$$(z_t, x_t^{[m]})$$ $$\bar{X_t} = \bar{X_t} + \langle x_t^{[m]}, w_t^{[m]} \rangle$$ endfor for $$m = 1$$ to $$M$$: draw $$x_t^{[m]}$$ from $$\bar{X_t}$$ with probability $$\propto w_t^{[m]}$$ $$X_t = X_t + x_t^{[m]}$$ endfor return $$X_t$$

And, here is the modified Algorithm MCL2: Algorithm MCL2$$(X_{t-1}, u_t, z_t)$$: $$\bar{X_t} = X_t = \emptyset$$ for $$m = 1$$ to $$M$$: $$x_t^{[m]} = $$ motion_update$$(u_t, x_{t-1}^{[m]})$$ $$w_t^{[m]} = w_{t-1}^{[m]} \times$$  sensor_update$$(z_t, x_t^{[m]})$$ $$\bar{X_t} = \bar{X_t} + \langle x_t^{[m]}, w_t^{[m]}, v_t^{[m]} \rangle$$ endfor //the transformation function or its parameters can be decided here for $$m = 1$$ to $$M$$: $$ v_t^{[m]} = myfunc(w_t^{[m]} ) $$ $$ w_t^{[m]} = {w_t^{[m]}} \div$$ $$ {v_t^{[m]}} $$ draw $$\langle x_t^{[m]},w_t^{[m]} \rangle$$ from $$\bar{X_t}$$ with probability $$\propto v_t^{[m]}$$ $$X_t = X_t + \langle x_t^{[m]},w_t^{[m]} \rangle $$ endfor return $$X_t$$ $$ myfunc $$ could be a sub-linear function like nth-root, log, etc.

Another similar variation for Algorithm MCL, which might make it simpler to observe the effect, is Algorithm MCL3. Algorithm MCL3$$(X_{t-1}, u_t, z_t)$$: $$\bar{X_t} = X_t = \emptyset$$ for $$m = 1$$ to $$M$$: $$x_t^{[m]} = $$ motion_update$$(u_t, x_{t-1}^{[m]})$$ totalWeight $$= $$ sensor_update$$(z_t, x_t^{[m]})$$ $$ v_t^{[m]} = myfunc($$totalWeight$$) $$ $$w_t^{[m]} = w_{t-1}^{[m]} \times$$ totalWeight $$\div$$ $$ v_t^{[m]} $$ $$\bar{X_t} = \bar{X_t} + \langle x_t^{[m]}, w_t^{[m]}, v_t^{[m]} \rangle$$ endfor for $$m = 1$$ to $$M$$: draw $$\langle x_t^{[m]},w_t^{[m]} \rangle$$ from $$\bar{X_t}$$ with probability $$\propto v_t^{[m]}$$ $$X_t = X_t + \langle x_t^{[m]},w_t^{[m]} \rangle $$ endfor return $$X_t$$ 'totalWeight' is a temporary variable that stores the weight generated before it is split between $$w_t^{[m]} $$ and $$v_t^{[m]} $$