-
Notifications
You must be signed in to change notification settings - Fork 73
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Discussion] Mapping with Moving Obstacles #8
Comments
Hi, The distance function is used to calculate the matching error (or residual) and create the gradient that will attract the scan (or surface as I call it in the code) to the walls. Moving obstacles introduce outliers to the scan and that is a potential problem to the non linear least squares (nlls) optimization process. A single outlier can have enough energy to influence the outcome of the optimization. This is known problem of least squares. To address this issue I have 2 mechanism:
During mapping, a moving person is not a problem. It may originate a false object with the respective distance function, but (hopefully) it will be erase by new scans. There as some situation where the scan matching will fail:
And sometime !love 😉 |
I'm going to break this down a little bit to make sure I understand and ask a few follow ups. You (obviously) know more about distance function mapping techniques than me. Plus its rare to find an academic who not only writes good software but also makes it open source 🥇
Mhm, this sounds very different on the get-go from the talks and papers I read at IROS. So we have some mask on the map who's value at (x, y) is D(x,y) where D(a, b) is the distance between the cell and its closest occupied cell.
Got it, I know Ceres very well. I think the question in my last comment may help make clear to me what the measurements are going into the optimization problem and what's considered an "outlier" a continuous obstacle, a feature, etc).
Ah that's nice. Computing a distance mask on the map for a large map sounds computational, but might still come out ahead than other methods, remains to be seen. So if I'm intepreting this correctly, you're only computing the distance mask for cells within 0.5m of an obstacle, and the rest are unvisited and set to 0 (null)? This could be comparable to the inflation layer.
So dynamic obstacles in your environment being marked in the map I'm not concerned about. For the exact reasons you mention and this is a common artifact in all mapping techniques. Go over an old space again to wipe it out if you care (or use gimp later). I'm more concerned by the potential that dynamic obstacles mess with the distance mask because now there's a new object in the map at some position where the mask is now being computed or messing with the gradients from the walls. That then in turn messing with the scan matching and making the problem "blow up" as I showed in the video. I see it moving around for a rew cycles without a problem but its possible that starts to mess up on the first optimization run (not sure, would need to check) because something was inserted from a moving person in free space (or near a wall to really mess up the gradients needed).
I can say it happened so early and so consistently in the map, its not from poor odometry, that bag I've run with every 2D SLAM algorithm around and hasn't had an issue at that spot (10 seconds into the bag). They'll fail at scale later on, but not processing the first hallway. |
The scan matcher is coded in
The unvisited are assumed to be at maximum distance (e.g. 0.5m). It can be compared to the reverse inflation layer.
Scan points that fall in the flat plane of the distance function will not be attracted, it is as if they do not exist. I see this happening in datasets with wide open areas. And the behavior of failing the scan matching when something passes through is a possible symptom. Note that this is just my educated guess. |
So if you're just in a long fairly homogenous aisle, really its just taking the word of god of the odometry for the lengthwise shift and only fitting the widthwise latteral offsets? There are many cases in industrial applications where the laser doesn't reach to the end of the aisle-way to have a second ppt. surface to have both lengthwise and widthwise fitting around. Is the gradient method sensitive enough to match small changes in this kind of situation so unique, but small changes, in the aisle shelving gets matched against? This is something a formal scan matcher would handle quite well after using the odometry as an initial guess but the "attraction" method I wouldn't think would handle it. I'm starting to understand why this method is so much lower processing power than other alternatives. Very useful for unique spaces or areas with high visibility of surfaces in multiple principle axes. Removing the scan matcher and formulating your optimization problem in this way is a fast alternative.
But what about points that are close to the walls to non-wall new obstacles that are moving? |
In theory yes. In practice, there is always? something in the environment that provide information for the remaining principal axis. You provide a good example for this:
The shelf should provide enough changes for the gradient method to work. I did some testing with this in mind. I set the laser scan max range to a low value (e.g. 5m) and run it in a dataset composed of corridors.
This was my hypothesis when I started working on it, could an "attraction" method work?
Not a problem. Unless the scan detects more moving obstacles than walls. But I guess this is true for most solution. (I hope to have finally answer your question) |
That makes sense, I'm still suspicious of the small-changes in aisles but I need to play around with some robots now, no more use in talking about it. Thanks for the explanations, that makes sense. I'm not sure about what these issues are then and I think I need to get a robot out with this running to figure out the issues. Its hard with a dataset to really get a feel for things |
@eupedrosa I think the question I have might be fitting this issue well, so I decided to describe it here. If you'd like me to create another one please let me know! I'm running the iris_lama ROS node with default settings (I have only changed names of frames to match my setup). Let's say that in my setup I have a box marked in green: I noticed that if I move the box it takes the map quite some time to update the change in the environment. Here is the real time gif (I've left the laser scans to show the box being moved): By the end of the gif you can see that the old box is starting being wiped out from the map and the new position is not appearing on the map (in fact the box didn't appear in the new position at all). Is there any parameter that would allow to change this behaviour? |
Thank you for your comments @msadowski. Would you be kind to reproduce those gifs with a top down orthogonal view? It helps with the troubleshooting.
It should, unless the number of occupied hits are much higher than the free hits.
Yes and no. Yes there is a parameter that changes the behaviour, but right now it is hard coded here:
I will change this in the future. edit: I did not notice that the box was not appearing in the new position. |
Let me jump in here. This might be a long shot, but have a look if the computer running the algorithm is running low on memory or CPU — most likely CPU since RViz was still able to show the data properly. |
Fix semantics of sampling variance factors: srr, stt, srt, str.
Hi,
I did some reading on distance function mapping and localization methods and I wondered if this has a problem with moving obstacles for feature/scan/(surface by your code?) matching.
A talk I was at at IROS explaining visually how their technique works showed that the features generated by free space are very sensitive to changes, which makes sense. So if you have something moving in free space while mapping, will that trip this up? For example people walking around while mapping.
If this is a problem, would it make sense the problem is worse in narrow passage ways than in larger open spaces?
I appreciate how clean and clear your code is, thank you for that. This was clearly built with love and it shows.
The text was updated successfully, but these errors were encountered: