Skip to content
HKPolyU-UAVPublic

About

An Evidential Dynamic Occupancy Grid Mapping System for UAV’s Motion Planning in Large-scene

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

10 Commits

Folders and files

Repository files navigation

EDOG-Map

Evidential Dynamic Occupancy Grid Mapping for
Consumer-Grade UAV Navigation in Dynamic Environments

IEEE Transactions on Consumer Electronics, 2026
DOI: 10.1109/TCE.2026.3725136

Paper · Video · Quick start · Documentation

Outdoor EDOG-Map demonstration: camera, point cloud and dynamic occupancy grid

Dynamic environment representation from the project demonstration. Click to watch the full video.

Overview

EDOG-Map represents occupancy, uncertainty, and motion-induced conflict in a unified evidential mapping framework. It uses Dempster–Shafer theory to distinguish free, occupied, and unknown space, and identifies dynamic cells from conflicts between historical beliefs and current LiDAR observations.

The paper develops three complementary ideas:

  • Explicit uncertainty: evidential mass assignments distinguish unobserved space from confidently free space.
  • Conflict-driven dynamics: temporal contradictions reveal changing occupancy without particle-based velocity sampling or predefined object classes.
  • Bounded local mapping: a robot-centric sliding window limits map storage as the UAV explores a larger environment.

This repository provides a Python reference pipeline for ROS 1 with a 2D grid, covering point-cloud input, evidential fusion, dynamic labeling, and map visualization; see the usage guide to get started.

Method and demonstrations

EDOG-Map occupancy view alongside top-view point clouds, RGB camera and the surrounding point-cloud map

Dynamic environment representation from the paper's Fig. 1. Red cells indicate detected dynamics; the camera and point-cloud views provide scene context.

The released pipeline follows this data flow:

flowchart LR
    A[PointCloud2 + Odometry] --> B[Time synchronization]
    B --> C[Height filtering and subsampling]
    C --> D[2D measurement masses]
    E[Previous grid and planar pose] --> F[Pose alignment]
    D --> G[Dempster-Shafer fusion]
    F --> G
    G --> H[Updated masses and conflict]
    H --> I[RGB grid: NPY and optional PNG]
    H --> E
Loading

The LiDAR pipeline operates directly on point clouds and odometry. The grid maintains masses in (unknown, occupied, free) order; conflict is computed separately before normalization. The visualization marks cells at or above the configured conflict threshold.

Campus field experiment and reconstructed occupancy map Viaduct field experiment with dynamic and static objects
Campus exploration · paper Fig. 9 Viaduct environment · paper Fig. 10

Quick start

1. Set up the Python environment

The ROS entry point uses Ubuntu 20.04 / ROS 1 Noetic / Python 3.8. In an existing Noetic environment, install the Python dependencies as follows:

git clone https://github.com/HKPolyU-UAV/EDOG-Map.git
cd EDOG-Map

source /opt/ros/noetic/setup.bash
python3 -m venv --system-site-packages .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

--system-site-packages exposes the ROS Python packages to the virtual environment. The pip package is pystream-pipeline, imported as pystream. TensorFlow and model weights are unnecessary for this LiDAR-only entry point. See the setup guide for ROS dependencies and troubleshooting.

2. Check the core pipeline without ROS

With the Python requirements installed, this check also runs without ROS on Python 3.8–3.11:

python scripts/smoke_test.py

The check covers mass normalization, evidential fusion, RGB rendering, and two-frame pipeline output, then automatically removes its temporary files.

3. Run with synchronized LiDAR and odometry

Start roscore in a separate terminal, then start your LiDAR/odometry source or replay a compatible bag. From the repository root, with ROS sourced and the environment activated:

python run.py \
  _lidar_topic:=/cloud_registered_body \
  _odom_topic:=/Odometry \
  _z_min:=0.0 \
  _z_max:=5.0 \
  _max_points:=30000
Input Message type Required convention
LiDAR sensor_msgs/PointCloud2 Local/body-frame x, y, z in meters; optional intensity
Odometry nav_msgs/Odometry Body pose in a consistent world frame; only x, y, yaw are used

Align coordinate frames upstream. Provide body-frame point clouds consistent with the odometry, applying the required coordinate transformations, sensor extrinsics, and roll/pitch compensation before input. See input conventions, parameters, and bag replay.

4. Inspect outputs

The default destination is results/, relative to the working directory:

results/
├── 000000_dgm_pred.npy
├── 000000_dgm_pred.png
├── 000001_dgm_pred.npy
└── ...

Each .npy stores a uint8 RGB visualization, with default shape (1000, 1000, 3). PNG output is generated when Matplotlib is available. For access to the underlying evidential masses, see the output guide.

Color Meaning in the released renderer
Gray (123, 123, 123) Unknown
Black (0, 0, 0) Occupied
White (255, 255, 255) Free
Red (255, 0, 0) Conflict at or above the dynamic threshold

Implementation notes provide further details for development and integration.

Repository guide

Path Purpose
run.py ROS subscriptions, synchronization, filtering, and pipeline entry point
libs/dgm.py Measurement masses, fusion, pose alignment, and visualization
pipeline/ Stage wrappers, data containers, and file output
libs/ogm.py Conventional occupancy-grid utilities outside the active entry point
docs/usage.md Installation, parameters, input contract, and troubleshooting
docs/implementation-notes.md Implementation details and development notes
scripts/smoke_test.py Synthetic checks independent of ROS
docs/assets/ Figures and compact demo preview; asset provenance

Citation

If this work is useful in your research, please cite:

@article{tan2026edogmap,
  author  = {Tan, Zheng and Zhang, Zuowei and Lyu, Yang and Pan, Quan},
  title   = {{EDOG-Map}: Evidential Dynamic Occupancy Grid Mapping for
             Consumer-Grade {UAV} Navigation in Dynamic Environments},
  journal = {IEEE Transactions on Consumer Electronics},
  year    = {2026},
  doi     = {10.1109/TCE.2026.3725136},
  url     = {https://doi.org/10.1109/TCE.2026.3725136}
}

A machine-readable citation is provided in CITATION.cff.

Contributions and contact

For setup questions and reproducible issues, use GitHub Issues. Include the environment, topic/frame conventions, parameters, and a minimal example. See CONTRIBUTING.md.

License

A software license has not yet been specified. Please contact the authors regarding reuse terms.

About

An Evidential Dynamic Occupancy Grid Mapping System for UAV’s Motion Planning in Large-scene

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages