I am trying to write software that will be able to locate a robot in a known (but very noisy) environment. My robot has a 36 point point proximity sensor (10 degree separation), rotation sensors on the motors and a compass. The robot is in a field 1.25x2m with high walls.
So it would appear very easy to locate the robot, simply using the proximity sensors to detect the distance to the four walls and use the compass to find the heading. Unfortunately its not that easy... My problem is my robot will not be the only one in the field (max 4). In my algorithm i must assume that any (or all) of the proximity readings could be reporting invalid data due to a blockage and that wheels may slip, making rotation sensors not 100% reliable.
I looked at using a particle filter. However the conventional method works in this way: a command is sent to the motors to move 20cm, and once the action is completed the sensors are used to correct (via a weighting system) any inaccuracies in the motors. However particle filters work well only with small uncontrollable errors in observation. It doesn't react well to a very noisy environment, for example 6/36 proximity readings being way off (due to another robot blocking it) or a collision with another robot that creates wheel slip.
It seams bad, but I am confident I will be able to find a way to fuse all the observations using some sort of filter, and somehow determine which readings are currently not reliable, and determine the position of the robot. This kind of problem solving really interests me, but I just wonder if this is beyond my ability?
Does anyone have any experience with robot positioning? Does anyone have any ideas? (I dont want to add any other sensors if i can avoid it)