| """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))) |
|
|