Replies: 8 comments 7 replies
-
Another, possibly related point of interest -- this is running with all the OPENGL code replaced with a simple polar -> cartesian map. Polar scaling and grid scaling are completely decoupled. Everything is pushed to my fork, with the ROS code in a separate project. Take care. |
Beta Was this translation helpful? Give feedback.
-
One more data point -- recompiled everything into release mode and voila, no more tracks. Odd.... I still have rotations coded in, but they are too inaccurate and messy -- they're getting tossed in favour of keeping everything in world reference/axis. So, no crisis, working mostly as designed... |
Beta Was this translation helpful? Give feedback.
-
Sure thing -- I still see the artifacts crop up, just not as common as that first example. Interestingly enough, they don't move when the car does... I'm going to check first that in removing OpenGL I didn't shoot myself in the foot. |
Beta Was this translation helpful? Give feedback.
-
Here are debug and release libraries based on my fork with most of the @ShepelIlya changes -- had to skip the parallel resampling as that seemed to have a resource contention in paralle_ns()). If you'r going to pull the source, grab the perf-test branch. Both seem to leave artifacts that build over time when the car is still, just need to run for long enough. (note that this version of the lib is using OpenGL) |
Beta Was this translation helpful? Give feedback.
-
For the ROS node, use the main branch. There is a ros launch file you need to run to convert the pointcloud to a laser scan
and you'll need Carla, and the Carla ros bridge to get the demo working. Here are the debug/release nodes: |
Beta Was this translation helpful? Give feedback.
-
So I had some more time to look at this and have figured out a workaround of sorts. Basically, what seems to be happening is some cells build up an occupancy mass and never correct it when the map moves. Here's what that looks like in the gazebo env using the clearpath jackal/velodyne artifact1-left-behind-.2.mp4You can see those occupied cells in the middle of the field never clear, even though the measurement data says to do so. This is partly related to the movement code -- specifically, if the robot doesn't move enough to trigger a motion update, then measurements are applied from a slightly wrong position (by up to a grid cell). However, if I always perform the motion update, regardless of the robot's change in status, then I get the following: artifact1-workaround.mp4And the reason this clears up the artifacts? Because this line was added: So, when the old cell was valid or when we measure something in the the old cell's location, then we copy. Otherwise, the new location is zeroed. The result: no artifacts. I'm not saying this is the proper solution. It effectively obliterates our priors for the probabilistic calculations, so everything is only based on the most recent scan. And, a little more subtle, we're checking the old location on the new measurement grid -- that can't be good either. So, if you have a suggestion of how to tone down the permanence, I'm open to suggestions. Thanks for reading. |
Beta Was this translation helpful? Give feedback.
-
So if I understand correctly, adding I’m planning on handling the ego motion compensation by implementing it using a 2d ring buffer. That way we don’t have to move the whole map and performance should get a whole lot better. |
Beta Was this translation helpful? Give feedback.
-
So I understand part of what's going on with the artifacts now -- it appears to be a result of how masses are updated when there are no particles in a cell. New particles are only born where there is an existing particle weight, so new weights/occupancies aren't properly updated. This is a result of the check for -1 here: dynamic-occupancy-grid-map/dogm/src/kernel/mass_update.cu Lines 72 to 97 in 839b137 Any cell that doesn't have a particle, has no predicted weight leading to some interesting effects. The most notable being that no particles will ever be born there, no matter what the measurement information is. the born_masses_array[j] is set to 0. Note that if a newly measured occupancy mass is near one with particles, then the motion of the particles can cause the born masses to migrate. If the code is changed to
the behaviour is better. At least new particles are born where new measurements show up. I haven't tried to work through all of the consequences of this change (hence, not a pull request), but wanted see if you had a better fix. If this isn't clear, I can post some video to demo the issue. I'm out of time for now, but will return to this later. |
Beta Was this translation helpful? Give feedback.
-
Hi all -- finally have time to get back to this and have run into an interesting issue. Dynamic objects that pass over the same location (like cars following lanes might) tend to leave tracks that build over time -- much like snails... Here's what it looks like when running against carla. On the far left is the LaserScan input, the parallel tracks are the snail markings that build over time. The actual views are on the right.
dogm-ros-carla-.2.mp4
Initially the field is white, but seems to build these long lived blocks over time. They can eventually fade, but take a long time -- non-ideal when attempting to use the field for navigation.
Any thoughts?
Beta Was this translation helpful? Give feedback.
All reactions