Closed xaru8145 closed 3 months ago
the robot will have an empty costmap and could report that there are no obstacles while in reality there are, which is a dangerous behavior.
That's the key problem in which you need to move to ROS 2 or fix ROS 1 costmap 2D to solve. This is a long-since solved problem in ROS 2. I wouldn't be trying to make hacks on a bug.
Thanks a lot @SteveMacenski for such a quick response. I totally agree that ROS2 is the way to go and we have several projects going on in ROS2. However, this particular one is stuck in ROS1 for now and there are no plans to port it soon. In this context, is there any way to set up a laserscan observation source that can clear Pointcloud marking sources from an rgbd camera? Or mixing the two types won't work?
laserscan observation source that can clear Pointcloud marking sources from an rgbd camera
Of course! A source can both mark and clear, you set all of your layers to have 1 mark and 1 clear. All marking happens after all clearing, though.
I have developed a simple collision checker library in ROS melodic for an application where I use rgbd cameras to mark and clear the costmap using STVL. In this way, I can determine if there are obstacles within the robot footprint.
With fast and aggressive movements of the robot, we can have a situation where some obstacles are marked that cannot be cleared by any of the layers (note that I use a persistent decay model).
In order to deal with this, I have a ROS service to clear the costmap. However, for the period of time between making the service call and receiving a new observation, the robot will have an empty costmap and could report that there are no obstacles while in reality there are, which is a dangerous behavior.
As solution suggested in this ROS issue is to publish a fake message that would clear out observations that are not actively being asserted by the marking observation sources.
I have made some tests and the clear_costmap observation source is not clearing anything. I am faking a Laserscan in frame _baselink of 1081 points covering from -PI to PI and using a fix range of 10.0m.
This is the python node I use to publish a fake laserscan to clear the costmap:
Is there any issues with mixing PointCloud2 and LaserScan data types? Is it better to fake a PointCloud2 specifying an "infinite" frustrum so that we can clear all space that we are not asserting? Which would be the best way?
Thanks in advance!