-
Notifications
You must be signed in to change notification settings - Fork 51
Description
Hi @victorreijgwart!
Context
Wavemap is a great tool to efficiently store occupation probabilities in 3D. However, some applications (like path planners for ground robots) have the additional need for traversability information. It would be desirable that the traversability information could also be queried at different resolutions for a more efficient path search.
High-level changes
Inspired by your plan to integrate color (#57), I assume the plan would be adding:
- a map data structure that stores traversability alongside the occupancy
- a measurement integrator that also fuses traversability information when updating the map
- extensions of the ROS interface (wavemap_server) to forward the traversability point cloud to the integrator
I would be happy to contribute but I kinda got stuck in the first point (creating a new map data structure) because I can't really see where or how the traversability information would be stored. My (limited) understanding of wavemap is that the occupancy probability of a certain node is given by a linear combination of Haar coefficients from the root node up to the desired termination height.
If we take a volumetric data structure such as HashedWaveletOctree, we see that it stores a std::unordered_map of HashedWaveletOctreeBlock. Each HashedWaveletOctreeBlock has a float scale and a Ndtree of height - 1 where each NdtreeNode is a std::array<float> storing Haar coefficients at each height.
My questions are:
- Would we like (is it even possible?) the traversability information to also be expressed via Haar coefficients? That is, using e.g.
HaarCoefficients<CellInfo, 3>, whereCellInfocontains two floats (occupancy and traversability).- If so, I guess that the Harr functions such as
ForwardLiftedwould change? - Otherwise, would
HashedWaveletOctreeBlockjust have an additionalfloat traversability_;variable? But then I don't see how this info could be expressed in different resolutions. - Maybe we would just have another
Ndtreethat encodes traversability, but then I guess we would need to somehow synchronize bothNdtrees.
- If so, I guess that the Harr functions such as
- A bit more generic: I understand that each
HashedWaveletOctreeBlockhas its ownNdtree, is that right? If so, are theNdtrees somehow connected to each other?
Thank you very much!
Miguel