Scene Gaussian Map Alignment
Use this when a bundle combines a 3D Gaussian/splat/PLY/USD/OBJ scene, a robot
map such as Nav2 YAML plus occupancy PGM, semantic anchors from
navigation_memory.json, or an Isaac/operator-console report that must label
evidence honestly.
Boundary
Keep stable, repeatable work in scripts. The skill owns the judgment that changes
from scene to scene:
- Stable scripts parse headers, bounds, map metadata, semantic-memory JSON,
transforms, smoke artifacts, images, and HTML reports.
- The skill decides the evidence tier, asks for missing assets, chooses which
anchors are credible, names blockers, and prevents overclaiming.
- Do not hide scene-specific assumptions in a script default. If an assumption
will vary with the next Gaussian scene, write it in the skill/report as an
explicit decision.
Evidence Tiers
Use these labels consistently:
blocked: geometry, map files, semantic anchors, or coordinate evidence are
missing.
candidate: bbox fit, scale/translate, manual placement, or another heuristic
alignment exists.
verified: named physical/semantic anchors match across map and scene with
residuals recorded.
runtime_proven: Isaac or robot-view smoke renders/navigates through
candidate waypoints and writes view evidence.
planner_backed: a real planner/Nav2-equivalent path proof exists.
Never skip tiers in wording. A runtime smoke can prove that rendered robot views
exist at candidate poses; it does not by itself prove Nav2 planner parity.
Workflow
Inventory every asset before aligning: Gaussian/splat/PLY files and whether
they are rendered or only inspected, USD/OBJ/mesh world bounds, Nav2 YAML,
occupancy grid, semantic memory, map-bundle context, anchor ids, and any
segmentation/object manifest/correspondence/calibration evidence.
Run the deterministic tools that apply to the available assets:
python -m roboclaws.household.agibot_map_bundle \
--source-map-dir <map-root> \
--context-json <context-json> \
--output-dir assets/maps/<bundle-name>
.venv-isaaclab/bin/python -m roboclaws.backends.isaaclab.b1_readiness \
--b1-root <scene-root> \
--map12-root <map-root> \
--output output/<run>/readiness.json
.venv-isaaclab/bin/python -m roboclaws.backends.isaaclab.b1_navigation_smoke \
--b1-root <scene-root> \
--map12-root <map-root> \
--output-dir output/<run> \
--accept-nvidia-eula
.venv-isaaclab/bin/python -m roboclaws.backends.isaaclab.b1_readiness \
--b1-root <scene-root> \
--map12-root <map-root> \
--navigation-artifact output/<run>/navigation_smoke.json \
--require-navigation-success \
--output output/<run>/readiness_with_navigation.json
python -m roboclaws.backends.isaaclab.b1_navigation_report \
--run-dir output/<run>
Classify what the run actually proved: bbox fit is candidate; matched
anchors with residuals are verified; rendered robot views at candidate
poses are runtime_proven; planner path evidence is planner_backed.
Summarize the evidence without changing the artifacts:
python skills/scene-gaussian-map-alignment/scripts/summarize_alignment_evidence.py \
--readiness-artifact output/<run>/readiness_with_navigation.json \
--navigation-artifact output/<run>/navigation_smoke.json \
--output output/<run>/alignment_evidence_summary.json
Write the lightweight alignment manifest. This is the fusion contract for
future runs; it is not a fused USD/Gaussian scene:
python skills/scene-gaussian-map-alignment/scripts/summarize_alignment_evidence.py \
manifest \
--readiness-artifact output/<run>/readiness_with_navigation.json \
--navigation-artifact output/<run>/navigation_smoke.json \
--evidence-summary output/<run>/alignment_evidence_summary.json \
--map-bundle assets/maps/<bundle-name> \
--output output/<run>/alignment_manifest.json
Report the open blockers and next promotion step. Prefer one precise blocker
over broad language like "alignment done".
Honest Labels
- Do not claim Gaussian fusion unless the renderer consumed the Gaussian/splat
asset; header/bounds inspection is only inventory evidence.
- Do not claim
semantic_anchors_are_usd_truth=true without segmentation,
object manifest, or anchor correspondences that bind map anchors to USD/scene
objects.
- Do not claim manipulation support without object/receptacle binding plus a
pick/place proof.
- A "verify image" is a rendered camera view from a candidate pose. It helps
inspect gross placement and visibility, but it is not ground-truth alignment,
semantic binding, or planner proof.
- If Map 12 semantics are used only as navigation-memory anchors, call them
robot_map_12_navigation_memory_overlay or an equivalent overlay source, not
USD truth.
Output
When handing off results, include:
- alignment tier and transform source;
- whether Gaussian assets were rendered or only inspected;
- semantic source and semantic/USD binding status;
- navigation evidence status and whether it is planner-backed;
- artifact paths such as
readiness.json, navigation_smoke.json,
readiness_with_navigation.json, alignment_evidence_summary.json,
alignment_manifest.json, report.html, and any map bundle;
- the exact next step needed to promote the evidence tier.
Acceptance
After changing this skill, related scripts, or map/Isaac report contracts, run:
./scripts/dev/run_pytest_standalone.sh \
tests/contract/maps/test_b1_map12_digital_twin_readiness.py \
tests/contract/maps/test_b1_map12_navigation_report.py \
tests/contract/maps/test_agibot_map_bundle_export.py \
tests/contract/skills/test_scene_gaussian_map_alignment_skill.py \
tests/contract/skills/test_skill_manifests.py \
-q
1---2name: scene-gaussian-map-alignment3description: Align scene Gaussian/splat, USD/mesh, and robot map assets into an honest digital-twin evidence workflow. Use when a new Gaussian scene arrives, when B1/Map12-style assets need to be connected, when map anchors are being projected into a 3D scene, or when an agent must decide whether an alignment is candidate, verified, runtime-proven, or planner-backed.4---56# Scene Gaussian Map Alignment78Use this when a bundle combines a 3D Gaussian/splat/PLY/USD/OBJ scene, a robot9map such as Nav2 YAML plus occupancy PGM, semantic anchors from10`navigation_memory.json`, or an Isaac/operator-console report that must label11evidence honestly.1213## Boundary1415Keep stable, repeatable work in scripts. The skill owns the judgment that changes16from scene to scene:1718- Stable scripts parse headers, bounds, map metadata, semantic-memory JSON,19 transforms, smoke artifacts, images, and HTML reports.20- The skill decides the evidence tier, asks for missing assets, chooses which21 anchors are credible, names blockers, and prevents overclaiming.22- Do not hide scene-specific assumptions in a script default. If an assumption23 will vary with the next Gaussian scene, write it in the skill/report as an24 explicit decision.2526## Evidence Tiers2728Use these labels consistently:2930- `blocked`: geometry, map files, semantic anchors, or coordinate evidence are31 missing.32- `candidate`: bbox fit, scale/translate, manual placement, or another heuristic33 alignment exists.34- `verified`: named physical/semantic anchors match across map and scene with35 residuals recorded.36- `runtime_proven`: Isaac or robot-view smoke renders/navigates through37 candidate waypoints and writes view evidence.38- `planner_backed`: a real planner/Nav2-equivalent path proof exists.3940Never skip tiers in wording. A runtime smoke can prove that rendered robot views41exist at candidate poses; it does not by itself prove Nav2 planner parity.4243## Workflow44451. Inventory every asset before aligning: Gaussian/splat/PLY files and whether46 they are rendered or only inspected, USD/OBJ/mesh world bounds, Nav2 YAML,47 occupancy grid, semantic memory, map-bundle context, anchor ids, and any48 segmentation/object manifest/correspondence/calibration evidence.49502. Run the deterministic tools that apply to the available assets:5152 ```bash53 python -m roboclaws.household.agibot_map_bundle \54 --source-map-dir <map-root> \55 --context-json <context-json> \56 --output-dir assets/maps/<bundle-name>5758 .venv-isaaclab/bin/python -m roboclaws.backends.isaaclab.b1_readiness \59 --b1-root <scene-root> \60 --map12-root <map-root> \61 --output output/<run>/readiness.json6263 .venv-isaaclab/bin/python -m roboclaws.backends.isaaclab.b1_navigation_smoke \64 --b1-root <scene-root> \65 --map12-root <map-root> \66 --output-dir output/<run> \67 --accept-nvidia-eula6869 .venv-isaaclab/bin/python -m roboclaws.backends.isaaclab.b1_readiness \70 --b1-root <scene-root> \71 --map12-root <map-root> \72 --navigation-artifact output/<run>/navigation_smoke.json \73 --require-navigation-success \74 --output output/<run>/readiness_with_navigation.json7576 python -m roboclaws.backends.isaaclab.b1_navigation_report \77 --run-dir output/<run>78 ```79803. Classify what the run actually proved: bbox fit is `candidate`; matched81 anchors with residuals are `verified`; rendered robot views at candidate82 poses are `runtime_proven`; planner path evidence is `planner_backed`.83844. Summarize the evidence without changing the artifacts:8586 ```bash87 python skills/scene-gaussian-map-alignment/scripts/summarize_alignment_evidence.py \88 --readiness-artifact output/<run>/readiness_with_navigation.json \89 --navigation-artifact output/<run>/navigation_smoke.json \90 --output output/<run>/alignment_evidence_summary.json91 ```92935. Write the lightweight alignment manifest. This is the fusion contract for94 future runs; it is not a fused USD/Gaussian scene:9596 ```bash97 python skills/scene-gaussian-map-alignment/scripts/summarize_alignment_evidence.py \98 manifest \99 --readiness-artifact output/<run>/readiness_with_navigation.json \100 --navigation-artifact output/<run>/navigation_smoke.json \101 --evidence-summary output/<run>/alignment_evidence_summary.json \102 --map-bundle assets/maps/<bundle-name> \103 --output output/<run>/alignment_manifest.json104 ```1051066. Report the open blockers and next promotion step. Prefer one precise blocker107 over broad language like "alignment done".108109## Honest Labels110111- Do not claim Gaussian fusion unless the renderer consumed the Gaussian/splat112 asset; header/bounds inspection is only inventory evidence.113- Do not claim `semantic_anchors_are_usd_truth=true` without segmentation,114 object manifest, or anchor correspondences that bind map anchors to USD/scene115 objects.116- Do not claim manipulation support without object/receptacle binding plus a117 pick/place proof.118- A "verify image" is a rendered camera view from a candidate pose. It helps119 inspect gross placement and visibility, but it is not ground-truth alignment,120 semantic binding, or planner proof.121- If Map 12 semantics are used only as navigation-memory anchors, call them122 `robot_map_12_navigation_memory_overlay` or an equivalent overlay source, not123 USD truth.124125## Output126127When handing off results, include:128129- alignment tier and transform source;130- whether Gaussian assets were rendered or only inspected;131- semantic source and semantic/USD binding status;132- navigation evidence status and whether it is planner-backed;133- artifact paths such as `readiness.json`, `navigation_smoke.json`,134 `readiness_with_navigation.json`, `alignment_evidence_summary.json`,135 `alignment_manifest.json`, `report.html`, and any map bundle;136- the exact next step needed to promote the evidence tier.137138## Acceptance139140After changing this skill, related scripts, or map/Isaac report contracts, run:141142```bash143./scripts/dev/run_pytest_standalone.sh \144 tests/contract/maps/test_b1_map12_digital_twin_readiness.py \145 tests/contract/maps/test_b1_map12_navigation_report.py \146 tests/contract/maps/test_agibot_map_bundle_export.py \147 tests/contract/skills/test_scene_gaussian_map_alignment_skill.py \148 tests/contract/skills/test_skill_manifests.py \149 -q150```