embodichain.lab.task_program.integrations.simulation

Contents

embodichain.lab.task_program.integrations.simulation#

Simulation bindings and factories for Task Program integrations.

These immutable declarations bind canonical Task Program scene and robot contracts to explicitly selected simulation entities and control parts.

AntipodalGraspAffordanceBinding

Build one antipodal grasp affordance from a selected rigid-object mesh.

ContainerAffordanceBinding

Declare one exact object target frame inside a container parent.

ControlPartCommandPreset

Named one-dimensional joint commands for one exact control part.

ControlPartEndpointBinding

Profile endpoint backed by one explicit robot control part.

ControlPartResourceBinding

Joint-backed robot resource containing control-part endpoints.

RigidizedArticulationAntipodalGraspBinding

Build a root-frame grasp mesh from one rigidized articulation link.

SimulationArticulationBinding

Explicit binding for one simulation articulation.

SimulationArticulationLinkBinding

Explicit canonical link backed by one native articulation link.

SimulationRigidizedArticulationObjectBinding

Bind one locked, floating articulation as a semantic object.

SimulationRigidObjectBinding

Explicit binding for one simulation rigid object.

SimulationRobotSkillProfileBinding

Build a profile from typed resources with strict native validation.

SimulationSceneBinding

Build one authoritative registry from explicit simulation bindings.

SupportSurfaceAffordanceBinding

Declare one exact object target frame on a support parent.

Classes:

AntipodalGraspAffordanceBinding

Build one antipodal grasp affordance from a selected rigid-object mesh.

ContainerAffordanceBinding

Declare one exact object target frame inside a container parent.

ControlPartCommandPreset

Named one-dimensional joint commands for one exact control part.

ControlPartEndpointBinding

Profile endpoint backed by one explicit robot control part.

ControlPartResourceBinding

Joint-backed robot resource containing control-part endpoints.

RigidizedArticulationAntipodalGraspBinding

Build a root-frame grasp mesh from one rigidized articulation link.

SimulationArticulationBinding

Explicit binding for one simulation articulation.

SimulationArticulationLinkBinding

Explicit canonical link backed by one native articulation link.

SimulationRigidObjectBinding

Explicit binding for one simulation rigid object.

SimulationRigidizedArticulationObjectBinding

Bind one locked, floating articulation as a semantic object.

SimulationRobotSkillProfileBinding

Build a profile from typed resources with strict native validation.

SimulationSceneBinding

Build one authoritative registry from explicit simulation bindings.

SupportSurfaceAffordanceBinding

Declare one exact object target frame on a support parent.

class embodichain.lab.task_program.integrations.simulation.AntipodalGraspAffordanceBinding[source]#

Build one antipodal grasp affordance from a selected rigid-object mesh.

internal_axis upgrades the payload to AxisAlignAffordance while preserving the same antipodal grasp capability. The axis is expressed in the rigid object’s local frame and can be reused by held-object skills such as Pour.

Methods:

__init__(entity_id, object_id, native_name, ...)

Attributes:

__init__(entity_id, object_id, native_name, revision, aliases=(), relative_pose=(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0), mesh_env_id=0, internal_axis=None)#
aliases: tuple[str, ...]#
entity_id: str#
internal_axis: tuple[float, float, float] | None#
mesh_env_id: int#
native_name: str#
object_id: str#
relative_pose: tuple[float, ...]#
revision: str#
class embodichain.lab.task_program.integrations.simulation.ContainerAffordanceBinding[source]#

Declare one exact object target frame inside a container parent.

Parameters:
  • entity_id (str) – Canonical ID of the placement affordance.

  • parent_id (str) – Canonical object, articulation, or link parent ID.

  • native_name (str) – Stable native name of this target frame.

  • aliases (tuple[str, ...]) – Optional non-authoritative lookup aliases.

  • object_target_pose (tuple[float, ...]) – Desired object pose relative to the parent.

  • object_target_frame (str) – parent composes the parent transform; world_axes uses its position with world-oriented target axes.

  • minimum_confidence (float) – Minimum parent/affordance observation confidence.

  • is_default (bool) – Whether this is the parent’s default Place(inside=...) frame.

Methods:

__init__(entity_id, parent_id, native_name)

Attributes:

__init__(entity_id, parent_id, native_name, aliases=(), object_target_pose=(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0), minimum_confidence=0.0, is_default=False, object_target_frame='parent')#
aliases: tuple[str, ...]#
entity_id: str#
is_default: bool#
minimum_confidence: float#
native_name: str#
object_target_frame: str#
object_target_pose: tuple[float, ...]#
parent_id: str#
class embodichain.lab.task_program.integrations.simulation.ControlPartCommandPreset[source]#

Named one-dimensional joint commands for one exact control part.

Methods:

__init__(preset_id, control_part, commands)

build(*, control_dof)

Build a command profile after validating the native control width.

declare()

Build a provider-free command profile from declared tuple widths.

Attributes:

__init__(preset_id, control_part, commands)#
build(*, control_dof)[source]#

Build a command profile after validating the native control width.

Return type:

ControlPartCommandProfile

commands: Mapping[str, tuple[float, ...]]#
control_part: str#
declare()[source]#

Build a provider-free command profile from declared tuple widths.

Return type:

ControlPartCommandProfile

preset_id: str#
class embodichain.lab.task_program.integrations.simulation.ControlPartEndpointBinding[source]#

Profile endpoint backed by one explicit robot control part.

Methods:

__init__(endpoint_id, control_part, capabilities)

build(robot)

Build a joint-backed endpoint after native control-part validation.

declare()

Return the endpoint contract without reading a robot.

Attributes:

__init__(endpoint_id, control_part, capabilities, command_preset=None)#
build(robot)[source]#

Build a joint-backed endpoint after native control-part validation.

Return type:

ResourceEndpoint

capabilities: frozenset[str]#
command_preset: str | None#
control_part: str#
declare()[source]#

Return the endpoint contract without reading a robot.

Return type:

ResourceEndpoint

endpoint_id: str#
class embodichain.lab.task_program.integrations.simulation.ControlPartResourceBinding[source]#

Joint-backed robot resource containing control-part endpoints.

Methods:

__init__(resource_id[, endpoints, members])

build(robot)

Build a resource containing strictly validated control-part endpoints.

declare()

Return the resource graph without reading native control parts.

Attributes:

__init__(resource_id, endpoints=(), members=())#
build(robot)[source]#

Build a resource containing strictly validated control-part endpoints.

Return type:

RobotResource

declare()[source]#

Return the resource graph without reading native control parts.

Return type:

RobotResource

endpoints: tuple[ControlPartEndpointBinding, ...]#
members: tuple[str, ...]#
resource_id: str#
class embodichain.lab.task_program.integrations.simulation.RigidizedArticulationAntipodalGraspBinding[source]#

Build a root-frame grasp mesh from one rigidized articulation link.

Parameters:
  • entity_id (str) – Canonical affordance ID.

  • object_id (str) – Parent rigidized-articulation object ID.

  • grasp_link (str) – Native link supplying the grasp mesh.

  • native_name (str) – Stable native name for the affordance.

  • revision (str) – Affordance payload revision.

  • aliases (tuple[str, ...]) – Optional non-authoritative lookup aliases.

  • relative_pose (tuple[float, ...]) – Flattened affordance-to-object SE(3) transform.

Methods:

__init__(entity_id, object_id, grasp_link, ...)

Attributes:

__init__(entity_id, object_id, grasp_link, native_name, revision, aliases=(), relative_pose=(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0))#
aliases: tuple[str, ...]#
entity_id: str#
native_name: str#
object_id: str#
relative_pose: tuple[float, ...]#
revision: str#
class embodichain.lab.task_program.integrations.simulation.SimulationArticulationBinding[source]#

Explicit binding for one simulation articulation.

Methods:

__init__(entity_id, simulation_uid[, ...])

Attributes:

__init__(entity_id, simulation_uid, aliases=(), dynamics=SceneDynamics.UNKNOWN, collision_role=SceneCollisionRole.NONE, semantic_type=None, geometry_provider=None)#
aliases: tuple[str, ...]#
collision_role: SceneCollisionRole#
dynamics: SceneDynamics#
entity_id: str#
geometry_provider: SceneGeometryProvider | None#
semantic_type: str | None#
simulation_uid: str#
class embodichain.lab.task_program.integrations.simulation.SimulationArticulationLinkBinding[source]#

Explicit canonical link backed by one native articulation link.

Methods:

__init__(entity_id, articulation_id, ...[, ...])

Attributes:

__init__(entity_id, articulation_id, native_link_name, aliases=(), dynamics=SceneDynamics.UNKNOWN, semantic_type=None)#
aliases: tuple[str, ...]#
articulation_id: str#
dynamics: SceneDynamics#
entity_id: str#
semantic_type: str | None#
class embodichain.lab.task_program.integrations.simulation.SimulationRigidObjectBinding[source]#

Explicit binding for one simulation rigid object.

Methods:

__init__(entity_id, simulation_uid[, ...])

Attributes:

__init__(entity_id, simulation_uid, aliases=(), dynamics=SceneDynamics.UNKNOWN, collision_role=SceneCollisionRole.NONE, semantic_type=None, default_grasp_affordance=None, geometry_provider=None)#
aliases: tuple[str, ...]#
collision_role: SceneCollisionRole#
default_grasp_affordance: str | None#
dynamics: SceneDynamics#
entity_id: str#
geometry_provider: SceneGeometryProvider | None#
semantic_type: str | None#
simulation_uid: str#
class embodichain.lab.task_program.integrations.simulation.SimulationRigidizedArticulationObjectBinding[source]#

Bind one locked, floating articulation as a semantic object.

Parameters:
  • entity_id (str) – Canonical scene object ID.

  • simulation_uid (str) – Explicit native articulation UID.

  • locked_qpos (Mapping[str, float]) – Exact locked position for every native joint.

  • aliases (tuple[str, ...]) – Optional non-authoritative lookup aliases.

  • dynamics (SceneDynamics) – Semantic dynamics classification.

  • collision_role (SceneCollisionRole) – Collision-world participation role.

  • semantic_type (str | None) – Optional semantic object classification.

  • default_grasp_affordance (str | None) – Optional default grasp affordance ID.

  • geometry_provider (SceneGeometryProvider | None) – Optional planner-facing collision geometry provider.

  • joint_position_tolerance (float) – Positive joint-state tolerance no greater than 1e-3. Configured limit coincidence uses a separate fixed epsilon.

  • link_transform_tolerance (float) – Positive cross-arena transform tolerance no greater than 1e-5.

Attention

Live configured assembly accepts only floating roots whose native joint limits are finite and coincident at every declared lock position. The coincidence proof uses a fixed safety epsilon and cannot be weakened by an authoring tolerance.

Methods:

__init__(entity_id, simulation_uid, locked_qpos)

Attributes:

__init__(entity_id, simulation_uid, locked_qpos, aliases=(), dynamics=SceneDynamics.UNKNOWN, collision_role=SceneCollisionRole.NONE, semantic_type=None, default_grasp_affordance=None, geometry_provider=None, joint_position_tolerance=0.001, link_transform_tolerance=1e-05)#
aliases: tuple[str, ...]#
collision_role: SceneCollisionRole#
default_grasp_affordance: str | None#
dynamics: SceneDynamics#
entity_id: str#
geometry_provider: SceneGeometryProvider | None#
joint_position_tolerance: float#
locked_qpos: Mapping[str, float]#
semantic_type: str | None#
simulation_uid: str#
class embodichain.lab.task_program.integrations.simulation.SimulationRobotSkillProfileBinding[source]#

Build a profile from typed resources with strict native validation.

Methods:

__init__(profile_id, resources[, ...])

build(robot)

Build the existing profile after validating every typed resource.

declare()

Project the complete provider-free robot skill profile.

Attributes:

__init__(profile_id, resources, command_presets=(), defaults=<factory>, presets=(), default_preset=None, skill_presets=<factory>, grounding_providers=<factory>)#
build(robot)[source]#

Build the existing profile after validating every typed resource.

Parameters:

robot (Robot) – Live robot selected by the simulation factory.

Return type:

RobotSkillProfile

Returns:

Reusable, engine-independent robot skill profile.

command_presets: tuple[ControlPartCommandPreset, ...]#
declare()[source]#

Project the complete provider-free robot skill profile.

Return type:

RobotSkillProfile

default_preset: str | None#
defaults: Mapping[str, Mapping[str, str]]#
grounding_providers: Mapping[str, str]#
presets: tuple[SkillPolicyPreset, ...]#
profile_id: str#
resources: tuple[ControlPartResourceBinding | RobotResource, ...]#
skill_presets: Mapping[str, str]#
class embodichain.lab.task_program.integrations.simulation.SimulationSceneBinding[source]#

Build one authoritative registry from explicit simulation bindings.

Methods:

__init__(registry_id[, rigid_objects, ...])

build(simulation)

Build the existing authoritative scene registry.

declare()

Project the complete provider-free scene declaration.

Attributes:

__init__(registry_id, rigid_objects=(), articulations=(), links=(), antipodal_grasps=(), support_surfaces=(), containers=(), collision_world_mode=None, *, rigidized_articulations=(), rigidized_articulation_grasps=())#
antipodal_grasps: tuple[AntipodalGraspAffordanceBinding, ...]#
articulations: tuple[SimulationArticulationBinding, ...]#
build(simulation)[source]#

Build the existing authoritative scene registry.

Parameters:

simulation (SimulationManager) – Live simulation used only for explicitly named lookups.

Return type:

SceneRegistry

Returns:

Immutable registry with typed roots, links, and affordances.

collision_world_mode: SceneCollisionWorldMode | None#
containers: tuple[ContainerAffordanceBinding, ...]#
declare()[source]#

Project the complete provider-free scene declaration.

Return type:

SceneManifest

registry_id: str#
rigid_objects: tuple[SimulationRigidObjectBinding, ...]#
rigidized_articulation_grasps: tuple[RigidizedArticulationAntipodalGraspBinding, ...]#
rigidized_articulations: tuple[SimulationRigidizedArticulationObjectBinding, ...]#
support_surfaces: tuple[SupportSurfaceAffordanceBinding, ...]#
class embodichain.lab.task_program.integrations.simulation.SupportSurfaceAffordanceBinding[source]#

Declare one exact object target frame on a support parent.

Parameters:
  • entity_id (str) – Canonical ID of the placement affordance.

  • parent_id (str) – Canonical object, articulation, or link parent ID.

  • native_name (str) – Stable native name of this target frame.

  • aliases (tuple[str, ...]) – Optional non-authoritative lookup aliases.

  • object_target_pose (tuple[float, ...]) – Desired object pose relative to the parent.

  • object_target_frame (str) – parent composes the complete parent transform; world_axes adds its translation to the parent position while keeping the declared orientation and offset in world axes.

  • minimum_confidence (float) – Minimum parent/affordance observation confidence.

  • is_default (bool) – Whether this is the parent’s default Place(on=...) frame.

Methods:

__init__(entity_id, parent_id, native_name)

Attributes:

__init__(entity_id, parent_id, native_name, aliases=(), object_target_pose=(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0), minimum_confidence=0.0, is_default=False, object_target_frame='parent')#
aliases: tuple[str, ...]#
entity_id: str#
is_default: bool#
minimum_confidence: float#
native_name: str#
object_target_frame: str#
object_target_pose: tuple[float, ...]#
parent_id: str#

Scene preparation and workspace#

Scene proposal contracts remain in lab.sim.scene.expansion. These adapters connect them to the current robot and the Gym reset lifecycle: