danielmohansahu / openvdb_voxl_mapper

PointCloud VOXL Aggregation with an OpenVDB backend targeting ROS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

openvdb_voxel_mapper

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.

Prerequisites

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

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

ROS Runtime Examples

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}

Examples

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 Ground Plane and Raw PC Ground Plane and Aggregated PC
DARPA SubT Ground Plane and Raw PC Ground Plane and Aggregated PC

References:

The following papers / codebases were instrumental to development:

Datasets used for examples:

About

PointCloud VOXL Aggregation with an OpenVDB backend targeting ROS

License:MIT License


Languages

Language:C++ 66.7%Language:CMake 31.0%Language:Cuda 2.1%Language:Shell 0.2%