SteveMacenski / spatio_temporal_voxel_layer

A new voxel layer leveraging modern 3D graphics tools to modernize navigation environmental representations
http://wiki.ros.org/spatio_temporal_voxel_layer
GNU Lesser General Public License v2.1
640 stars 189 forks source link

Use STVL outside the ROS navigation stack #198

Closed sgarciav closed 3 years ago

sgarciav commented 3 years ago

Hello Steve:

Your package seems to be exactly what I'm looking for towards have a better representation of my robot's 3D environment. I understand that your package has been developed to be added as a layer to ROS's costmap pipeline. In my application, I'm not currently leveraging ROS's 2D navigation stack, and thus I'm not using the costmap architecture.

In the README you mention: "It is certainly possible to utilize this package without ROS/Navigation ...". I'm assuming that this means that I could leverage this package's architecture for keeping track of my robot's 3D environment outside the navigation stack - i.e., publish the voxel grid to be used by another node.

My initial thought is to write my own ROS node that initializes an instance of the SpatioTemporalVoxelGrid class such that it leverages all the functionality your package provides (like the time decay functionality, for example). However, I'm not too familiar with the logic of your package to understand the steps my node would need to take in order to interact with the class's member functions. If this is the correct approach to take, would you have an example ROS node that wraps the grid class towards publishing the resulting voxel grid? If this is not the approach to take, do you have a better suggestion as to how I could use your package outside the ROS navigation stack?

Any comments and/or suggestions are welcomed. Thanks in advance!

P.S. I'm using ROS Melodic.

SteveMacenski commented 3 years ago

The easiest/non-code-requiring way would be to create a costmap_2d object and have it contain just a single layer: STVL to process. Though if you just want STVL and you don't much care for the 2D bits, then you could simply create a new node that creates an STVL object and it itself calls the layer API functions.

You could also work with the STVG and not even use the costmap layer, but then you need to deal with your own updating policies and measurement tracking.

This questions is more suitable for ROS Answers - if you have any more questions, please follow up there!