| import numpy as np |
| from cliport.tasks.task import Task |
| from cliport.utils import utils |
| import pybullet as p |
|
|
|
|
| class BlockInsertion(Task): |
| """pick up the L-shaped red block and place it into the L-shaped fixture.""" |
|
|
| def __init__(self): |
| super().__init__() |
| self.max_steps = 3 |
| self.lang_template = "put the L shape block in the L shape hole" |
| self.task_completed_desc = "done with insertion." |
| self.additional_reset() |
|
|
| def get_random_pose(self, env, obj_size): |
| pose = super().get_random_pose(env, obj_size) |
| pos, rot = pose |
| rot = utils.eulerXYZ_to_quatXYZW((0, 0, np.pi / 2)) |
| return pos, rot |
|
|
| def reset(self, env): |
| super().reset(env) |
|
|
| """Add L-shaped block.""" |
| size = (0.1, 0.1, 0.04) |
| urdf = 'insertion/ell.urdf' |
| pose = self.get_random_pose(env, size) |
| block_id = env.add_object(urdf, pose) |
|
|
| """Add L-shaped fixture to place block.""" |
| size = (0.1, 0.1, 0.04) |
| urdf = 'insertion/fixture.urdf' |
| targ_pose = self.get_random_pose(env, size) |
| env.add_object(urdf, targ_pose, 'fixed') |
|
|
| self.add_goal(objs=[block_id], matches=np.int32([[1]]), targ_poses=[targ_pose], replace=False, |
| rotations=False, metric='pose', params=None, step_max_reward=1, symmetries=[2 * np.pi], |
| language_goal=self.lang_template) |
|
|