feat(habitat): HSSD scene object and wall ground truth as Detection3DArray - #4211
Draft
ruthwikdasyam wants to merge 1 commit into
Draft
ruthwikdasyam wants to merge 1 commit into
ruthwikdasyam wants to merge 1 commit into
Conversation
Codecov Report❌ Patch coverage is
@@ Coverage Diff @@
## main #4211 +/- ##
==========================================
+ Coverage 79.54% 79.58% +0.04%
==========================================
Files 1492 1498 +6
Lines 141416 142124 +708
Branches 12122 12178 +56
==========================================
+ Hits 112487 113109 +622
- Misses 25508 25587 +79
- Partials 3421 3428 +7
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 7 files with indirect coverage changes 🚀 New features to boost your workflow:
|
ruthwikdasyam
force-pushed
the
ruthwik/feat/hssd-ground-truth
branch
from
September 18, 2026 02:39
c7883a3 to
dd2b00a
Compare
…Array Offline exporter for the ten HSSD scenes used by the Habitat QA suites: reads scene_instance.json placements and the stage/object GLBs with trimesh, measures tight world-axis-aligned boxes per placed object and per stage wall group, builds one Detection3D per box in the ROS Z-up "world" frame (Habitat (x, y, z) -> (-z, -x, y)), and writes the Detection3DArray JSON view. Labels come from HSSD objects.csv: category first, product name as a second hypothesis. The two merged top-level geometry_wall meshes per stage are skipped. Checks in misc/habitat/ground_truth/hssd/<scene_id>.json for all ten scenes (95..423 objects, 11..37 walls each) and exempts them from the 75 KB large-files hook.
ruthwikdasyam
changed the base branch from
ruthwik/feat/dimsim-object-annotations
to
main
September 18, 2026 02:40
1 task
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contribution path
Problem
The Habitat QA suites in #4195 describe the ten HSSD scenes in prose; nothing machine-readable says where the objects and walls are.
Solution
Ground-truth 3D boxes for all ten HSSD QA scenes, checked in as
misc/habitat/ground_truth/hssd/<scene_id>.json: the JSON view of avision_msgs.Detection3DArray, oneDetection3Dper object and per wall in the ROS Z-upworldframe (Habitat(x, y, z) -> (-z, -x, y)).dimos/simulation/habitat/hssd_ground_truth.pygenerates them offline, no habitat-sim needed: it readsscenes/<id>.scene_instance.jsonplacements and the stage/object GLBs with trimesh, measures tight world AABBs from mesh vertices, labels objects from HSSDsemantics/objects.csv(category asclass_id, product name as a second hypothesis; the object-configsemantic_idlexicon is wrong for these assets and is not used), and boxes eachwall_<n>group of the stage. The two top-level mergedgeometry_wall*meshes per stage are skipped: they are hundreds of disconnected quads spanning the whole building.dimos/simulation/object_detections.pyholds the box-to-Detection3DArrayconversion and JSON view; both box corners go through the axis mapping and are re-sorted, so the sign flips are safe.misc/habitat/README.mddocuments the format, ids, labels, frame, and the regeneration command.pyproject.toml: the ground-truth JSON directory is exempted from the 75 KB large-files hook (largest scene is 202 KB, 1.1 MB in total).Per scene: 95/423/173/77/164/279/331/64/268/264 objects and 22/31/14/13/18/14/37/11/26/27 walls. Boxes are world-axis-aligned, so rotated objects and diagonal walls get loose boxes; orientation is always the identity.
How to Test
Checked against the real dataset: the laptop and TV anchor points recorded during QA authoring fall inside their boxes, all walls measure 2.8 m tall, and 84 of 95 scene-1 objects match habitat-sim's own transformed AABBs exactly or tighter (the other 11 are duplicate chairs and stools the check script paired in the wrong order; their offsets equal the spacing between duplicates).
AI assistance
Claude Code with Fable 5.1 implemented the exporter, tests and docs from an approved plan; the author chose the offline trimesh approach, the label scheme and the wall-by-node-name rule.
Checklist