|
I'm working on a more realistic robot simulation in preparation for possibly building a robot that does localization. I'm having trouble adapting the measurement probability algorithm from the simple lecture/homework examples to more realistic ones. In the unit3 lecture we measured the distance to each landmark. In the homework 3.5 we measured bearing to each landmark. What I imagine is more realistic for a robot with a rotating distance sensor is to get pairs of bearing, distance measures. Writing code to take a number of bearing and distance measurements to each landmark that is in range is straight forward. I'm having trouble comparing the actual measurement from the robot with each of the particle's sense data. There are two problems 1) coming up with a single goodness measure or probability because angle and distance are very different quantities. My only guess here is that a geometric mean should be used rather than an arithmetic mean. 2) the bigger problem is deciding which angle distance pairs in the actual measurement to compare with which angle distance pairs in the particle measurement. The problem is that the landmarks have no known identity. In the lecture and homework in all cases we knew the identity of the landmark. I don't think that is very realistic at least not for the simple robot I'm thinking of building.
The robot sensed 3 landmarks and the particle sensed 2. Should I compare Robot and particle measurements as 0 - 0, 1 - 1, 2 - or 0 - , 1 - 0, 2 - 1 or ... Even in later material like SLAM we assume we can identify the landmarks. Identifying the landmarks seems to be a major problem that isn't covered. In general what is done?
I was thinking of building a robot without a camera to keep it simple but in either case I need more knowledge to get localization working. Any help or pointers would be appreciated. Thanks, -John |
|
I think the thing to realize is that you are never absolutely certain that you have correctly correlated your observations to actual landmarks. There will always be some potential for error in your correlation process (even if there there barcodes stamped on each landmark). Pick a method which incorporates these errors into your predictions. For graph slam the method I described in a prior post was to use a particle filter for your robot position, and include an Omega and Xi instance for each particle. Then you can choose the "best fit" mapping for the observations based on each particle's pose estimate. Yes, this dramatically increases the amount of work being done, but it allows you to grade and resample your particles based on the quality of the Omega matrix estimate (Omega^-1 is a covariance matrix). I was thinking of the same problem and came up with this idea (as posted in the office hour questions thread as well, but that is not a good place for discussion): Maybe it would be possible to branch the matrices when there are several landmarks that correspond to the same sensor data, (i.e. make a copy of the matrices for each probable landmark) later we can discard the ones that does not seem to add up with future sensor data. It is kind of like the particle filter idea but instead of having X randomly created particles (possibly a huge amount) we only make a new particle for each landmark with a likley match to the current sensor data (confidence over a certain treshold). That way the total number of X would be fairly low and we could generally identify and discard those that do not match future sensor data quickly. My previous description was here. I did describe (well, hint at is a better description) the possibility of holding some particles in reserve to use to represent two borderline cases in the particle field. I think you have to be careful about this since the branching factor can be enormous. How about creating a new landmark for borderline cases that we can independently track. The observation data that is ambiguous would be accounted to that new landmark. Then use the loop closure code (which is tasked with finding and collapsing duplicated landmarks) to combine the two landmarks which (eventually) can be seen to unambiguously overlap. Branching would be expensive, but I think it would be possible to keep to a minimum since the robot has an approximate idea of where it is (based on odometer data) it only has to consider landmarks within that area. I suspect an incorrect landmark identification would quickly increase the inconsistency in the matrices when it gets more sensor data, so the bad branches could be identified and discarded early. Creating a new landmark sounds like a great idea! Identifying overlap should be as trivial as checking for landmarks with the same coordinates (which also visually match each other). There might be a risk that adding another similar landmark would increase the ambiguity though, which might lead to the addition of yet another similar landmark and so on... but that should stop as soon as the robot become more certain of its position and can merge those landmarks. |
|
I have been working on a similar question, but I am planning on using a camera. I described my general approach here. |