YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
HM3DNav
2D indoor navigation Gymnasium environment built from real HM3D habitat floors, with per-task Signal Accessibility (SA) labels computed exactly via absorbing Markov chains (the Phase A "Signal Starvation" study).
What is inside
hm3dnav.env.HM3DNavEnv— Gymnasium env- Action
Discrete(4): UP / DOWN / LEFT / RIGHT - Observation: 22-ray LiDAR distances to walls
- Sparse reward:
+1on reaching the goal, episode budget 200 reset()also returnsp0,sa_uniform,sa_persist,starved,level
- Action
hm3dnav/data/grids/— 364 floor grids (*.npz, 0=free, 1=wall)hm3dnav/data/tasks/— 364 task files (17 tasks per floor, 6178 total)hm3dnav/data/difficulty.json— per-task labels keyed by map id
Labels (Signal Starvation)
A task is starved when sa_uniform < 1e-4, i.e. a uniform random-walk
policy is expected to reach the goal fewer than once in 1000 training
episodes (1000 x sa_uniform < 1).
| level | sa_uniform range | tasks | fraction |
|---|---|---|---|
| easy | >= 0.1 |
16 | 0.3% |
| medium | [1e-3, 0.1) |
1272 | 20.6% |
| hard | [1e-4, 1e-3) |
521 | 8.4% |
| starved | < 1e-4 |
4369 | 70.7% |
These labels are identical to the Phase A experiment: 70.7% of HM3D tasks are starved (vs 0.8% on standard benchmarks).
Install
pip install -e .
Quickstart
from hm3dnav.env import HM3DNavEnv
from hm3dnav.tasks import sample_task, list_maps
env = HM3DNavEnv(map_id=list_maps()[0], task_idx=0)
obs, info = env.reset()
print(info["goal"], info["sa_uniform"], info["starved"], info["level"])
# obs: 22 LiDAR distances
Reproducing the labels
scripts/build_difficulty.py regenerates data/difficulty.json from
p0_discrete/hm3d_full/phase_a/results/phaseA_probes.pkl (the Phase A probe
measurement). Starved fraction comes out to 70.719%.