[ros-users] Standardization of mapping interfaces

Stéphane Magnenat stephane.magnenat at mavt.ethz.ch
Fri Oct 26 20:37:02 UTC 2012


Hi all,

(indeed do not feel shy to join our conversation)

> I thought to only have one field "size" in the message, not one for
> each point. Sorry if that wasn't clear.

Ok that makes sense, although this precludes the use of bare PointCloud2
messages, which implies some minor changes to rviz for supporting an
extended message.

> OK, maybe we should backtrack one step. My point of view was from a
> mapping perspective, while I think yours was in the SLAM perspective.
> I was thinking more in terms of a consumer of the point clouds
> directly after alignment, while I now understand you were thinking
> about the first part that should, of course, provide the full point
> clouds and registered poses.
>
> So why not making that clearer and moving the 3D map building into
> its own part, or into map_dispatcher? The output of the SLAM node
> should then be defined as tf and registered point clouds. Occupancy
> map building can then happen on top of that e.g. in octomap_server.
> For memory reasons, the map building part should not need to keep
> another copy of all the point clouds after they were already
> integrated. The occupancy mapping can happen in the same node or in a
> separate node that consumes the point clouds.

OK to backtrack one step, there is probably an architecture discussion 
here, with things that have different semantics in the minds of 
different people. If I understand correctly, your suggestion is to have 
the localization node publishing tf from map->odom and point clouds 
registered in the map frame, right?

Although I find this suggestion interesting, I am not convinced that 
this architecture would be clearer/simpler/faster, because localization 
and mapping are often intertwined in a complex way. For instance, in 
RBPF SLAM such as FastSlam, the SLAM node (even if used only for 
localization) holds a map (one per particle). Moreover, even for 
ICP-based localization with no particle, upon loop closure the 
localization node must communicate a list of updated poses for the 
different scans to the mapper node, which requires a mechanism to 
bookkeep these scans. In the case of visual SLAM with bundle adjustment, 
the problem is similar.

Making the split you propose is not impossible to do, but I do not see 
the advantage compared to a SLAM node. That said, maybe you were 
thinking of a map at a different level of size, like a persistent world 
map or something like this? If so, this is a very interesting problem 
and I have some ideas that would be great to discuss with the community, 
including the unification of multi-robot map reconciliation with 
robot-to-existing-map re-localisation, but this might be the subject of 
another thread (that we can start as well if there is interest).

> In that case I would skip defining the voxel output completely,
> since that now depends on the actual occupancy mapping
> implementation. In the case of octomap_server, the output is an
> octomap_msgs/Octomap (binary - only free & occupied or full
> probabilities) that can already be directly used for collision checks
> in Groovy. I would only suggest auxiliary output such as an
> MarkerArray of occupied cells for visualization for all kinds of
> volumetric mapping interfaces.
>
> In that case everything we were trying to solve with an interim
> format is already done and implemented (full probabilities for free &
> occupied space, multi-resolution, compression built-in).

I think that there are two questions:
- Do we need a voxel representation for the SLAM node?
- If yes, in which format the corresponding message should be?

The first point is covered by the discussion in my previous paragraph. 
For the second point, I have nothing in principle against using a 
compact message, but octomap_msgs/OctomapBinary lacks support for 
probabilities. Moreover, as we discussed some days ago this is not very 
self-documenting and quite tied to octomap. If OctomapBinary becomes the 
de-facto standard for representing 3D occupancy grid this is fine for 
me, but its lack of support for probabilities makes it a poor candidate 
(even though a version with probabilities on the same principle could be 
great). Anyway, if we use OctomapBinary the semantics of data inside the 
message should be clearly documented. Note that in that case, instead of 
providing a MarkerArray auxiliary output, it would be better to add 
support to rviz for displaying OctomapBinary messages directly.

Have a nice week-end,

Stéphane

-- 
Dr Stéphane Magnenat
http://stephane.magnenat.net



More information about the ros-users mailing list