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:
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:
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)