Task#

A task defines what the robot is supposed to do in the environment. Concretely, a task specifies four things:

  • Success condition — when has the robot completed the task? (e.g. is the door open?)

  • Failure condition — when should the episode end early? (e.g. has the object fallen off the table?)

  • Reset action — how should the scene be restored at the start of each episode? (e.g. close the door)

  • Metrics — what should be measured? (e.g. how far open did the microwave get?)

microwave = asset_registry.get_asset_by_name("microwave")()

task = OpenDoorTask(openable_object=microwave)

environment = IsaacLabArenaEnvironment(
    name="open_microwave",
    embodiment=embodiment,
    scene=scene,
    task=task,
)

Tasks and affordances#

Tasks are defined in terms of object affordances, not specific objects. OpenDoorTask takes any Openable — a microwave, a fridge, a cabinet. Its success condition calls openable.is_open(), its reset calls openable.close(), and its metric tracks openable.get_openness().

OpenDoorTask defined in terms of the Openable affordance

OpenDoorTask is defined entirely in terms of the Openable affordance interface, making it reusable with any openable object.#

This is what makes tasks modular — the same task works across different objects and scenes without any changes.

Available tasks include (but are not limited to) PickAndPlaceTask, LiftObjectTask, OpenDoorTask, CloseDoorTask, and PressButtonTask.

More details#