Geospatial 3D Urban Map Digital Twin

The Geospatial Digital Twin (VectorizedUrbanMap) simulates realistic 3D urban topographies based on the ITU-R P.1410 propagation standard using Poisson point processes.

Procedural Map Parameters

Urban environments are parameterized by three fundamental ITU-R P.1410 statistics:

  • Building Coverage Ratio (\(\alpha\)): Fraction of land area covered by buildings relative to total area.

  • Building Density Ratio (\(\beta\)): Mean number of buildings per unit area (buildings per \(\text{km}^2\)).

  • Height Distribution Parameter (\(\gamma\)): Scale parameter of the Rayleigh distribution governing building height variation:

\[f(h) = \frac{h}{\gamma^2} \exp\left(-\frac{h^2}{2\gamma^2}\right), \quad h \ge 0\]

Batched Map Generation

VectorizedUrbanMap generates tens to hundreds of 3D urban maps in parallel on CPU or GPU:

from urbanmarl.models.urban_map import VectorizedUrbanMap

# Generate 16 parallel urban maps with ITU-R parameters
maps = VectorizedUrbanMap(
    batch_size=16,          # num_envs
    volume_size=(500, 500, 50),  # (X, Y, Z) in meters
    device="cpu",           # or "cuda"
    map_margin=5,            # default: 5 meters
)

GPU-Accelerated 3D Ray-Casting & Line-of-Sight (LoS)

The digital twin determines Line-of-Sight (LoS) state between any 3D transmitter (e.g. UAV at \(\mathbf{p}_A\)) and 3D receiver (e.g. ground UE at \(\mathbf{p}_B\)) by sampling line segment points and querying building height grids:

\[\text{LoS}(\mathbf{p}_A, \mathbf{p}_B) = \mathbb{I}\left( z(t) > H_{\text{map}}(x(t), y(t)) \;\; \forall t \in [0, 1] \right)\]

where \(\mathbf{p}(t) = (1-t)\mathbf{p}_A + t\mathbf{p}_B\).

Building Collision Detection

UAV safety is enforced via vectorized 3D boundary checking against grid building heights:

# Check collisions for N UAVs across B environments
uav_pos = torch.randn(16, 5, 3, device="cpu")  # (batch, uavs, 3)
collisions = maps.check_collision_batch(uav_pos)