I am using ROS on a remotly operated Ground Vehicule. This robot produce a SLAM Map nav_msg/OccupancyGrid. This map is displayed on a control station. Link between rob ot and control station could be for example WiFi. Maps could be quite big 4 kilometers squared with 0.1 meter of resolution. When the robot is building the map, I want this map to be shown in live on the control station. Of course, I can't transfer the full map every time my SLAM loop update the map. On a previous midleware I developped an object "OccupancyGrid" on wich I was able to define a Region Of Interest, and only a patch was transfered from the robot to the control station. Only the patch was refreshed on the control station and I was able to work with Big OccupancyGrid without saturate neither the control station processor, nor the Wireless link. I am looking for a tool in ROS wich allow to extract an ROI of an occupancy grid, and update an ROI of an occupancy grid. I tried to find in the 2000+ softwares wich already exists and I can't find it.
Does it exists some where ?
If that doesn't exist, I will do it my self because it's quite easy to develop. If you think other persons may be interested, I will publish it somewhere on the ROS website.
answered 2012-02-21 03:40:50 -0500Stefan Kohlbrecher
I'm pretty sure there isn't a map ROI package available yet. (See edit at end of this post)
I have a half-finished node that converts the map to an image and publishes it using image_transport. This has the advantage that one can use the compressed (jpg) or theora compression options which save huge amounts of bandwidth. Of course these compression schemes are lossy, but for visualization they're ok. For additional bandwidth saving, the node publishes a full and/or a tile based image, the latter showing only the victinty of the robot pose. This way, the map around the robot can be visualized using only a few kb/s of bandwidth. Another node running on the GUI side could reassemble the image to maps, so they can be visualized in rviz as usual. Haven't done this yet, but should only take time :) Let me know if you want to take a look at it (it's not in our public repo for a reason though :) ).
Of course, the "right way" would probably be to use RLE encoding for the transmission of occupancy maps, as they (at least at this time) only have the three discrete states "free","occupied" and "unknown", which makes it possible to get huge bandwidth saving using the lossless RLE compression scheme. We already use this to share maps between our humanoid robots in real time (video), but due to time constraints no one ported that to the ROS ecosystem yet.
Asked: 2012-02-21 02:37:26 -0500
Seen: 308 times
Last updated: Feb 21 '12