File size: 1,422 Bytes
7399b6f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | """ManiSkill-style peg insertion: put the peg into a square socket."""
from ..registry import register_task
from ..envs import YamTaskEnv
from ..solvers import insert
from .. import conditions as C
@register_task("peg_insert")
class PegInsertTask(YamTaskEnv):
title = "PEG -> HOLE (insertion)"
tags = ["insertion", "precision", "primitive"]
instruction = {"default": "Put the peg in the hole.",
"specific": "Pick up the yellow peg and insert it into the square socket."}
peg_spawn = (-0.03, 0.10)
peg_spawn_jitter = (0.02, 0.015)
socket_xy = (-0.02, -0.22)
socket_jitter = (0.015, 0.015)
hole_width = 0.042
# grasp near the TOP so ~10 cm of shaft is left below the fingers to enter the hole
grasp_top = 0.03
gripper_effort, gripper_damping = 75, 85
def _load_scene(self):
self.scene.build_socket({"name": "socket", "xy": self.socket_xy,
"xy_jitter": self.socket_jitter, "hole": self.hole_width})
self._placed = [self.scene.place_object(
{"name": "peg", "xy": self.peg_spawn, "xy_jitter": self.peg_spawn_jitter})]
def solve(self):
return insert.solve(self, obj="peg", target="socket", grasp_top=self.grasp_top)
def evaluate(self):
return self.check(C.labelled(
"peg seated in hole", C.object_seated_in_hole("peg", "socket", xy_tol=0.02, half_h=0.065)))
|