Quickstart#
This page loads a geographic scene, places a transmitter at a latitude and longitude, and solves a terrain-following radio map with the upstream Sionna RT API.
1. Load a scene from coordinates#
Only the import changes compared with a Sionna file scene. The loader compiles the area
around the requested centre, caches it, and returns a native sionna.rt.Scene:
from openworld_radio_twin import rt as owrt
scene = owrt.load_scene(
latitude=52.3762,
longitude=4.8993,
radius_m=250,
buildings="auto", # "auto" | "none"
building_source="auto", # regional source picked from the scene centre
terrain="elevation", # "elevation" | "flat" | "none"
material_profile="itu", # "itu" | "uniform"
terrain_resolution_m=5.0,
device="auto", # "auto" | "cuda" | "cpu"
)
The first call downloads buildings, terrain and surface features for the square ENU domain
of side 2 * radius_m; later calls with the same geometry options reuse the cached scene
directory. owrt.cache_path(...) reports that directory without compiling.
2. Configure arrays and place a transmitter#
Arrays and radio devices are plain Sionna objects. The only OWRT helper is
owrt.position(...), which converts a WGS84 position and a height above ground into the
absolute ENU coordinates that Sionna expects:
from sionna.rt import PlanarArray, Transmitter
scene.tx_array = PlanarArray(num_rows=1, num_cols=1, pattern="iso", polarization="V")
scene.rx_array = PlanarArray(num_rows=1, num_cols=1, pattern="iso", polarization="V")
scene.add(Transmitter(
name="tx",
position=owrt.position(scene, latitude=52.3770, longitude=4.9003, height_agl=25.0),
))
3. Solve a terrain-following radio map#
owrt.measurement_surface(...) returns a Mitsuba mesh that follows the compiled terrain at
a constant height above ground. Pass it to Sionna’s RadioMapSolver as the measurement
surface:
from sionna.rt import RadioMapSolver
radio_map = RadioMapSolver()(
scene,
measurement_surface=owrt.measurement_surface(scene, cell_size=(5.0, 5.0), height=1.5),
max_depth=3,
samples_per_tx=1_000_000,
)
From here on, everything is Sionna: radio_map.rss, radio_map.path_gain,
scene.render(...), scene.preview(), PathSolver, and so on.
4. Georeference results#
Convert between the scene’s local frame and WGS84 with the restored transform:
frame = owrt.scene_frame(scene)
longitude, latitude, altitude = frame.to_geographic(east_m=120.0, north_m=-40.0)
ground = owrt.terrain_elevation(scene, east_m=120.0, north_m=-40.0)
5. Reuse the scene offline#
The command line writes the same canonical scene layout that batch generation uses:
owrt scene compile --lat 52.3762 --lon 4.8993 --radius 250 --output scenes/amsterdam
The printed scene.xml path loads with owrt.load_scene("scenes/amsterdam/scene.xml") or,
without OWRT helpers, with Sionna’s own load_scene.