DB-TSDF: Directional Bitmask-based Truncated Signed Distance Fields for Efficient Volumetric Mapping
DB-TSDF presents a high-efficiency, CPU-only framework for volumetric mapping. It utilizes a novel directional bitmask-based integration scheme to incrementally fuse LiDAR data into a dense voxel grid.
Key features include:
- Directional Kernels: Efficiently model beam geometry and occlusion in 3D.
- Bitmask Encoding: Ensures constant-time updates per scan, independent of grid resolution.
- High Performance: Multi-threaded C++ implementation fully integrated with ROS 2.
The design prioritizes predictable runtime and high-resolution reconstruction, making it an ideal solution for robotic platforms with limited GPU resources.
Before you begin, make sure you have ROS 2 Humble and Ubuntu 22.04 (or higher) installed on your system. These are the core requirements for the project to run smoothly. If you haven't installed ROS 2 Humble yet, follow the official installation guide for your platform. This guide will walk you through all the necessary steps to set up the core ROS 2 environment on your system.
To install and build the project, simply clone the repository as follows:
git clone https://github.com/robotics-upo/DB-TSDF.git
cd ..
colcon build
source install/setup.bashFollow these steps to build and run DB-TSDF inside a Docker container:
-
Clone the repository:
git clone https://github.com/robotics-upo/DB-TSDF.git cd DB-TSDF -
Build the Docker image:
docker build -t db_tsdf_ros2:humble . -
Allow Docker to access the X server (for GUI like RViz):
xhost +local:docker
-
Run the container
docker run -it \ --env="DISPLAY" \ --env="QT_X11_NO_MITSHM=1" \ --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ --name db_tsdf_container \ db_tsdf_ros2:humble
The Dockerfile sets up the entire environment and downloads the DB-TSDF code automatically.
The launch system uses a single main launch file (db_tsdf_launch.py) and a config argument to specify which dataset configuration to load.
This argument (e.g., college) will automatically load the corresponding parameter file (college.yaml) and the RViz configuration (college.rviz).
First, open a terminal, source your workspace, and run the launch file. The node will start, RViz will open, and the system will wait for data.
To launch using the college configuration:
ros2 launch db_tsdf db_tsdf_launch.py config:=collegeTo feed data, simply play a recorded ROS 2 bag in another terminal:
ros2 bag play /path/to/your_datasetThe system is highly configurable via YAML parameters (e.g., config/college.yaml).
| Parameter | Type | Description | Default |
|---|---|---|---|
in_cloud |
string |
Input PointCloud2 topic | /os_cloud_node/points |
odom_frame_id |
string |
Fixed frame for TF lookup | odom |
use_tf |
bool |
Enable/Disable TF transformations | True |
| Parameter | Type | Description | Default |
|---|---|---|---|
tdf_grid_res |
float |
Voxel side length in meters | 0.05 |
tdf_max_cells |
int |
Max active cells in hash table | 75000 |
tdfGridSize*_low/high |
float |
Physical volume boundaries | +/-100 |
| Parameter | Type | Description | Default |
|---|---|---|---|
kernel_size |
int |
Kernel size (odd number) | 11 |
bins_az / bins_el |
int |
Angular discretization | 360 |
occ_min_hits |
int |
Min measurements to mark occupied | 50 |
The node provides ROS 2 services to export the reconstructed map:
-
Mesh (STL)
ros2 service call /save_grid_mesh std_srvs/srv/Trigger "{}" -
Voxel Point Cloud
ros2 service call /save_grid_ply std_srvs/srv/Trigger "{}" # grid_data.ply ros2 service call /save_grid_pcd std_srvs/srv/Trigger "{}" # grid_data.pcd
-
Voxel Statistics (CSV)
ros2 service call /save_grid_csv std_srvs/srv/Trigger "{}"
@inproceedings{maese2026dbtsdf,
title={DB-TSDF: Directional Bitmask-based Truncated Signed Distance Fields for Efficient Volumetric Mapping},
author={Maese, Jose E. and Caballero, Fernando and Merino, Luis},
booktitle={2026 IEEE International Conference on Robotics and Automation (ICRA)},
year={2026}
}This work was supported by the grants PICRA 4.0 (PLEC2023-010353), funded by the Spanish Ministry of Science and Innovation and the Spanish Research Agency (MCIN/AEI/10.13039/501100011033); and INSERTION (PID2021-127648OB-C31), funded by the "Agencia Estatal de Investigación - Ministerio de Ciencia, Innovación y Universidades" and the "European Union NextGenerationEU/PRTR".

