"""Pick a grape cluster and place it in a wooden box.""" from ..registry import register_task from ..envs import YamTaskEnv from ..solvers import pick_place from .. import conditions as C @register_task("grape_box") class GrapeBoxTask(YamTaskEnv): title = "GRAPE -> BOX" tags = ["pick-place", "primitive-container"] instruction = {"default": "Put the grape in the box.", "specific": "Pick up the grape cluster and place it inside the wooden box."} # --- task constants (ManiSkill keeps these as class attrs too) --- grape_spawn = (-0.03, 0.10) grape_spawn_jitter = (0.025, 0.015) box_xy = (-0.02, -0.26) box_jitter = (0.02, 0.02) box_span = 0.26 lift_height = 0.16 gripper_effort, gripper_damping = 75, 85 def _load_scene(self): self.scene.build_box({"name": "box", "xy": self.box_xy, "xy_jitter": self.box_jitter, "span": self.box_span, "wall_h": 0.05}) self._placed = [self.scene.place_object( {"name": "grape", "xy": self.grape_spawn, "xy_jitter": self.grape_spawn_jitter})] def solve(self): return pick_place.solve(self, obj="grape", target="box", lift=self.lift_height) def evaluate(self): return self.check(C.labelled("grape in box", C.object_in_region("grape", "box")), C.labelled("grape lifted", C.object_lifted("grape", 0.05)))