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.

Individual tasks can be combined into order-independent or sequential composite tasks. Each task returns a TaskTerminationCfg from get_termination_cfg(), declaring its success criteria, named failures, and timeout_s time limit.

More details#