"""Push a block to a target region WITHOUT grasping it (RLBench slide_block_to_target).""" from ..registry import register_task from ..envs import YamTaskEnv from ..solvers import push from .. import conditions as C @register_task("push_block") class PushBlockTask(YamTaskEnv): title = "PUSH BLOCK TO TARGET (no grasp)" tags = ["push", "contact-rich", "no-grasp", "primitive"] instruction = {"default": "Push the block onto the green square."} block_spawn = (0.02, 0.12) spawn_jitter = (0.02, 0.015) target_xy = (0.02, -0.06) target_size = 0.10 gripper_effort, gripper_damping = 75, 85 def _load_scene(self): self.scene.build_marker({"name": "target", "xy": self.target_xy, "size": self.target_size, "xy_jitter": (0.015, 0.015)}) self._placed = [self.scene.place_object( {"name": "cube_r", "xy": self.block_spawn, "xy_jitter": self.spawn_jitter})] def solve(self): return push.solve(self, obj="cube_r", target="target") def evaluate(self): return self.check(C.labelled("block on the target", C.object_moved_to("cube_r", "target", tol=0.07)))