Voxel mapping library based on the OpenVDB data structure.
OVM (OpenVDB Voxel Mapper) performs point cloud aggregation and processing to generate 2.5D maps via geometric and / or semantic operations. A ROS 1 wrapper is provided which allows for direct subscription to sensor_msgs::PointCloud2
topics and publication of grid_map_msgs::GridMap maps, with frame transformation handled by tf2.
The following dependency matrix outlines the core package dependencies and their support across operating system. Note that Ubuntu 22.04 does not officially support ROS1, so ROS bindings aren't available for that OS.
Dependency | Ubuntu 20.04 | Ubuntu 22.04 | Notes |
---|---|---|---|
OpenVDB | Required | Required | Core data structure. |
NanoVDB | Required | Required | GPU support for core data structure. |
PCL | Required | Required | Internal point cloud data representation and utilities. |
Eigen | Required | Required | Internal map data representation. |
ROS 1 | Optional | Unsupported | Bindings and examples. |
The recommended workflow leverages Containerization via Docker to perform dependency management. This requires nvidia-docker2 to support NVIDIA GPUs within a Docker container. We also use rocker
Assuming all docker
dependencies are installed you can build an Image and instantiate a Container via the provided bash script:
./build_and_run.sh
Build instructions vary based on whether or not you're using the ROS ecosystem. Each instruction set assumes you've entered a Docker container via the recommended development process.
Build for ROS | Build Core |
---|---|
catkin build |
cd /workspace/src/openvdb_voxel_mapper/ mkdir -p build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DOVM_BUILD_ROS1=OFF && make |
Several example scripts, nodes, and launch files are provided to demonstrate ROS worflows. All scripts assume you've sourced your workspace via source devel/setup.bash
.
Example | Command |
---|---|
Offline Bagged Cloud Aggregation | rosrun openvdb_voxel_mapper aggregate_bag {BAGFILE} |
Online Time-Limited Ground Plane Extraction | roslaunch openvdb_voxel_mapper receding_ground_extraction_playback.launch bag:={BAGFILE} fixed_frame:={FRAME_ID} cloud_topic:={CLOUD_TOPIC} |
The following are GIFs collected during execution of the Ground Plane Extraction ROS example. Note that the choppiness is generally due to RVIZ processing struggles, not node throughput!
Dataset | Recording | Recording |
---|---|---|
Rellis3D | ||
DARPA SubT |
The following papers / codebases were instrumental to development:
- https://www.researchgate.net/publication/355133596_VDB-Mapping_A_High_Resolution_and_Real-Time_Capable_3D_Mapping_Framework_for_Versatile_Mobile_Robots
- https://arxiv.org/abs/2211.04067
- https://arxiv.org/abs/2105.04419
- https://www.mdpi.com/2072-4292/14/21/5463
- https://www.researchgate.net/publication/340864490_Spatio-temporal_voxel_layer_A_view_on_robot_perception_for_the_dynamic_world
Datasets used for examples: