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>, where CellInfo contains two floats (occupancy and traversability).
- If so, I guess that the Harr functions such as
ForwardLifted would change?
- Otherwise, would
HashedWaveletOctreeBlock just have an additional float traversability_; variable? But then I don't see how this info could be expressed in different resolutions.
- Maybe we would just have another
Ndtree that encodes traversability, but then I guess we would need to somehow synchronize both Ndtrees.
- A bit more generic: I understand that each
HashedWaveletOctreeBlock has its own Ndtree, is that right? If so, are the Ndtrees somehow connected to each other?
Thank you very much!
Miguel
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:
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 astd::unordered_mapofHashedWaveletOctreeBlock. EachHashedWaveletOctreeBlockhas afloatscale and aNdtreeofheight - 1where eachNdtreeNodeis astd::array<float>storing Haar coefficients at each height.My questions are:
HaarCoefficients<CellInfo, 3>, whereCellInfocontains two floats (occupancy and traversability).ForwardLiftedwould change?HashedWaveletOctreeBlockjust have an additionalfloat traversability_;variable? But then I don't see how this info could be expressed in different resolutions.Ndtreethat encodes traversability, but then I guess we would need to somehow synchronize bothNdtrees.HashedWaveletOctreeBlockhas its ownNdtree, is that right? If so, are theNdtrees somehow connected to each other?Thank you very much!
Miguel