Copied from the dyna360 research stack into lerobot.navigation:
- voxel_map.py: sparse-hash VoxelMap (5 cm default), count-weighted
running-mean geometry + optional per-voxel semantic feature; carve()
for DynaMem-style free-space removal (dynamic updates), query() for
top-k cosine text matches, remove_voxels_in_box() for scene mutation.
Added an inverse.reshape(-1) guard for numpy 2.x's np.unique.
- occupancy.py: derived 3-class top-down grid (UNOBSERVED/NAVIGABLE/
OBSTACLE) projected from the voxel map, A* with no corner-cutting,
obstacle inflation, and frontier extraction for exploration. Added
OccupancyGrid.is_obstacle() used by SafeBaseController's occupancy gate.
Pure numpy, no torch/hardware/SDK. 42 new tests (71 total in
tests/navigation/). Next: LingBot-Map geometry runner + integration.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>