Uh oh!
There was an error while loading. Please reload this page.
feat(skills): add declarative placement relations - #481
Conversation
Make endpoint bindings, timed command frames, transports, routing, safe holds, and profile lowering controller-agnostic. Preserve joint trajectories as optional feedback artifacts and add staged, same-address invocation revision semantics for mobile and whole-body safety.
06a764e to
6fd5714CompareGreptile SummaryThe PR adds declarative support-surface and container placement relations, including validated scene bindings, capability-scoped defaults, live target grounding, and automatic grounder registration.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| embodichain/lab/gym/envs/expert_program/simulation.py | Adds validated declarative placement bindings and projects their parent-relative target frames and defaults into manifests and registries. |
| embodichain/lab/gym/envs/expert_program/catalog.py | Automatically installs exact built-in relation grounders when the scene declares support-surface or container bindings. |
| embodichain/lab/sim/skills/compiler.py | Adds typed support-surface and container grounders that preserve late pose resolution and configured confidence thresholds. |
| embodichain/lab/sim/skills/scene.py | Defines the versioned placement affordance payloads and validates their confidence thresholds. |
| docs/source/api_reference/embodichain/embodichain.lab.gym.envs.expert_program.rst | Documents the newly exported declarative placement binding classes and their public members. |
| docs/source/api_reference/embodichain/embodichain.lab.sim.skills.rst | Adds API references for the built-in support-surface and container relation grounders. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
A[Placement binding] --> B[SimulationSceneBinding]
B --> C[Scene manifest and registry]
C --> D[Typed placement affordance]
B --> E[Automatic grounder registration]
D --> F[Semantic placement relation]
E --> F
F --> G[Late-bound SceneEntityPose]
Reviews (5): Last reviewed commit: "Merge branch 'main' into feat/placement-..." | Re-trigger Greptile
| raise TypeError("is_default must be a bool.") | ||
| @dataclass(frozen=True, slots=True) |
There was a problem hiding this comment.
Document the public placement API
The newly exported placement bindings, affordance payloads, and relation grounders have no corresponding public documentation in this changeset, leaving users without guidance on declaration fields, registration behavior, or usage.
Context Used: CLAUDE.md (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: embodichain/lab/gym/envs/expert_program/simulation.py
Line: 363
Comment:
**Document the public placement API**
The newly exported placement bindings, affordance payloads, and relation grounders have no corresponding public documentation in this changeset, leaving users without guidance on declaration fields, registration behavior, or usage.
**Context Used:** CLAUDE.md ([source](https://github.com/dexforce/embodichain/blob/main/CLAUDE.md))
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
6fd5714 to
420cad6Compare420cad6 to
6fd5714Compare…alog # Conflicts: # agent_context/MAP.yaml # agent_context/topics/atomic-actions/atomic-actions.md # agent_context/topics/motion-planning/motion-planning.md # docs/design/declarative_expert_program_plan.md # docs/design/expert_program_rollout_report.md # docs/source/api_reference/embodichain/embodichain.lab.gym.envs.expert_program.rst # docs/source/api_reference/embodichain/embodichain.lab.sim.atomic_actions.rst # docs/source/api_reference/embodichain/embodichain.lab.sim.skills.rst # docs/source/overview/sim/atomic_actions/builtin_actions.md # docs/source/overview/sim/atomic_actions/expert_programs.md # docs/source/overview/sim/atomic_actions/index.md # docs/source/overview/sim/atomic_actions/robot_skill_profiles.md # docs/source/overview/sim/index.rst # docs/source/overview/sim/scene_registry.md # docs/source/tutorial/atomic_actions.rst # embodichain/agents/mllm/expert_program.py # embodichain/lab/gym/envs/__init__.py # embodichain/lab/gym/envs/demo.py # embodichain/lab/gym/envs/embodied_env.py # embodichain/lab/gym/envs/expert_program/__init__.py # embodichain/lab/gym/envs/expert_program/bridge.py # embodichain/lab/gym/envs/expert_program/cfg.py # embodichain/lab/gym/envs/expert_program/compiler.py # embodichain/lab/gym/envs/expert_program/decoder.py # embodichain/lab/gym/envs/expert_program/environment.py # embodichain/lab/gym/envs/expert_program/loader.py # embodichain/lab/gym/envs/expert_program/simulation.py # embodichain/lab/gym/envs/expert_program/simulation_environment.py # embodichain/lab/gym/envs/expert_program/simulation_policies.py # embodichain/lab/gym/envs/managers/_event_functors/dynamic_settling.py # embodichain/lab/gym/utils/gym_utils.py # embodichain/lab/sim/atomic_actions/__init__.py # embodichain/lab/sim/atomic_actions/affordance.py # embodichain/lab/sim/atomic_actions/bindings.py # embodichain/lab/sim/atomic_actions/core.py # embodichain/lab/sim/atomic_actions/engine.py # embodichain/lab/sim/atomic_actions/execution.py # embodichain/lab/sim/atomic_actions/goals.py # embodichain/lab/sim/atomic_actions/plans.py # embodichain/lab/sim/atomic_actions/primitives/_helpers.py # embodichain/lab/sim/atomic_actions/primitives/coordinated_pickment.py # embodichain/lab/sim/atomic_actions/primitives/coordinated_placement.py # embodichain/lab/sim/atomic_actions/primitives/hand_over.py # embodichain/lab/sim/atomic_actions/primitives/move_end_effector.py # embodichain/lab/sim/atomic_actions/primitives/move_held_object.py # embodichain/lab/sim/atomic_actions/primitives/move_joints.py # embodichain/lab/sim/atomic_actions/primitives/pick_up.py # embodichain/lab/sim/atomic_actions/primitives/place.py # embodichain/lab/sim/atomic_actions/primitives/press.py # embodichain/lab/sim/atomic_actions/runtime.py # embodichain/lab/sim/atomic_actions/state.py # embodichain/lab/sim/planners/base_planner.py # embodichain/lab/sim/planners/curobo/curobo_planner.py # embodichain/lab/sim/planners/curobo/curobo_yaml.py # embodichain/lab/sim/planners/motion_generator.py # embodichain/lab/sim/skills/__init__.py # embodichain/lab/sim/skills/calls.py # embodichain/lab/sim/skills/compiler.py # embodichain/lab/sim/skills/integration.py # embodichain/lab/sim/skills/parallel_runtime.py # embodichain/lab/sim/skills/profiles.py # embodichain/lab/sim/skills/runtime.py # embodichain/lab/sim/skills/scene.py # embodichain_tasks/configs/gym/expert_program/repeated_pick_place.json # embodichain_tasks/configs/gym/open_drawer/cobot_magic_3cam.json # embodichain_tasks/embodichain_tasks/multi_segments/cube_pick_place.py # embodichain_tasks/embodichain_tasks/tableware/open_drawer.py # scripts/benchmark/atomic_action/press_benchmark.py # scripts/tools/expert_program_rollout_report.py # scripts/tutorials/atomic_action/assemble.py # scripts/tutorials/atomic_action/coordinated_pickment.py # scripts/tutorials/atomic_action/coordinated_placement.py # scripts/tutorials/atomic_action/dynamic_obstacle_recovery.py # scripts/tutorials/atomic_action/hand_over.py # scripts/tutorials/atomic_action/move_end_effector.py # scripts/tutorials/atomic_action/move_held_object.py # scripts/tutorials/atomic_action/move_joints.py # scripts/tutorials/atomic_action/moving_target_recovery.py # scripts/tutorials/atomic_action/pickup.py # scripts/tutorials/atomic_action/place.py # scripts/tutorials/atomic_action/press.py # tests/agents/mllm/test_expert_program.py # tests/benchmark/expert_program/test_demo_success_open_drawer_sim.py # tests/gym/envs/expert_program/test_bridge.py # tests/gym/envs/expert_program/test_compiler.py # tests/gym/envs/expert_program/test_completion_metadata.py # tests/gym/envs/expert_program/test_decoder.py # tests/gym/envs/expert_program/test_environment.py # tests/gym/envs/expert_program/test_loader.py # tests/gym/envs/expert_program/test_parallel_compiler.py # tests/gym/envs/expert_program/test_parallel_schema.py # tests/gym/envs/expert_program/test_simulation.py # tests/gym/envs/expert_program/test_simulation_environment.py # tests/gym/envs/expert_program/test_simulation_policies.py # tests/gym/envs/expert_program/test_task_vertical_slices.py # tests/gym/envs/tasks/test_multi_segments_cube_pick_place.py # tests/gym/envs/test_demo.py # tests/gym/envs/test_embodied_env_expert_program.py # tests/gym/utils/test_gym_utils.py # tests/lab/scripts/test_run_env.py # tests/scripts/tools/test_expert_program_rollout_report.py # tests/sim/atomic_actions/test_actions.py # tests/sim/atomic_actions/test_affordance.py # tests/sim/atomic_actions/test_control.py # tests/sim/atomic_actions/test_core.py # tests/sim/atomic_actions/test_endpoint_runtime_e2e.py # tests/sim/atomic_actions/test_engine.py # tests/sim/atomic_actions/test_engine_per_env.py # tests/sim/atomic_actions/test_runner.py # tests/sim/atomic_actions/test_trajectory_ops.py # tests/sim/planners/test_curobo_planner.py # tests/sim/planners/test_motion_generator_batched.py # tests/sim/skills/test_calls.py # tests/sim/skills/test_compiler.py # tests/sim/skills/test_curobo_semantic_runtime_dynamic_recovery_gpu.py # tests/sim/skills/test_effects.py # tests/sim/skills/test_evidence.py # tests/sim/skills/test_integration.py # tests/sim/skills/test_parallel_runtime.py # tests/sim/skills/test_profiles.py # tests/sim/skills/test_runtime.py # tests/sim/skills/test_scene.py # tests/test_expert_program_package_data.py
…feat/workflow-reacquisition # Conflicts: # agent_context/topics/atomic-actions/atomic-actions.md # docs/design/declarative_expert_program_plan.md # docs/source/api_reference/embodichain/embodichain.lab.sim.atomic_actions.rst # docs/source/overview/sim/atomic_actions/index.md # embodichain/lab/gym/envs/expert_program/catalog.py # embodichain/lab/gym/envs/expert_program/simulation_environment.py # embodichain/lab/sim/atomic_actions/execution.py # embodichain/lab/sim/atomic_actions/invocation.py # embodichain/lab/sim/skills/compiler.py # embodichain/lab/sim/skills/runtime.py # embodichain_tasks/embodichain_tasks/multi_segments/cube_pick_place.py # embodichain_tasks/embodichain_tasks/tableware/__init__.py # tests/gym/envs/expert_program/test_simulation_environment.py # tests/gym/envs/tasks/test_multi_segments_cube_pick_place.py # tests/gym/envs/tasks/test_open_drawer.py # tests/sim/atomic_actions/test_engine_per_env.py # tests/sim/skills/test_compiler.py # tests/sim/skills/test_profiles.py # tests/sim/skills/test_runtime.py
…on-bindings # Conflicts: # embodichain/lab/gym/envs/expert_program/__init__.py # embodichain/lab/gym/envs/expert_program/catalog.py # embodichain/lab/gym/envs/expert_program/simulation.py # embodichain/lab/sim/skills/__init__.py # embodichain/lab/sim/skills/compiler.py # tests/gym/envs/expert_program/test_simulation.py
# Conflicts: # docs/design/declarative_expert_program_plan.md # docs/source/api_reference/embodichain/embodichain.lab.gym.envs.expert_program.rst # docs/source/api_reference/public_api.rst # embodichain/lab/gym/envs/expert_program/__init__.py # embodichain/lab/gym/envs/expert_program/catalog.py # embodichain/lab/gym/envs/expert_program/environment.py # embodichain/lab/gym/envs/expert_program/extensions.py # embodichain/lab/sim/atomic_actions/execution.py # embodichain/lab/sim/skills/__init__.py # embodichain/lab/sim/skills/compiler.py # embodichain/lab/sim/skills/runtime.py # embodichain_tasks/configs/expert_program/hand_over.yaml # embodichain_tasks/configs/gym/expert_program/hand_over.json # embodichain_tasks/embodichain_tasks/expert_program/hand_over.py # embodichain_tasks/embodichain_tasks/expert_program/open_drawer.py # tests/gym/envs/expert_program/test_catalog.py # tests/gym/envs/expert_program/test_simulation_environment.py # tests/gym/envs/expert_program/test_task_hand_over.py # tests/sim/atomic_actions/test_engine_per_env.py # tests/sim/skills/test_runtime.py
Uh oh!
There was an error while loading. Please reload this page.
Description
Stack
feat/workflow-reacquisitionAdd reusable declarative placement relations for standard simulation scenes.
SupportSurfaceAffordanceBindingandContainerAffordanceBindingdeclare the desired object target frame relative to an explicit object, articulation, or link parent; registration installs the exact versioned relation grounder automatically.Defaults remain capability-scoped and all target poses are resolved from fresh registry snapshots. The implementation never guesses a frame from an entity name, mesh, or bounding box, so new tasks using an existing placement capability need scene configuration rather than task-local motion code.
Refs #471
Refs #474
Type of change
Screenshots
Not applicable.
Validation
pytest -q tests/gym/envs/expert_program/test_simulation.py tests/sim/skills/test_compiler.py tests/gym/envs/expert_program/test_catalog.py -k 'support or container or relation or placement'— 12 passed, 58 deselectedChecklist