from cliport.tasks.align_box_corner import AlignBoxCorner from cliport.tasks.assembling_kits import AssemblingKits from cliport.tasks.assembling_kits_seq import AssemblingKitsSeq from cliport.tasks.block_insertion import BlockInsertion from cliport.tasks.manipulating_rope import ManipulatingRope from cliport.tasks.align_rope import AlignRope from cliport.tasks.packing_boxes import PackingBoxes from cliport.tasks.packing_shapes import PackingShapes from cliport.tasks.packing_boxes_pairs import PackingBoxesPairs from cliport.tasks.packing_google_objects import PackingSeenGoogleObjectsSeq from cliport.tasks.palletizing_boxes import PalletizingBoxes from cliport.tasks.place_red_in_green import PlaceRedInGreen from cliport.tasks.put_block_in_bowl import PutBlockInBowl from cliport.tasks.stack_block_pyramid import StackBlockPyramid from cliport.tasks.stack_block_pyramid_seq import StackBlockPyramidSeq from cliport.tasks.sweeping_piles import SweepingPiles from cliport.tasks.separating_piles import SeparatingPiles from cliport.tasks.task import Task from cliport.tasks.towers_of_hanoi import TowersOfHanoi from cliport.tasks.towers_of_hanoi_seq import TowersOfHanoiSeq from cliport.tasks.generated_task import GeneratedTask import pybullet as p import os import numpy as np from cliport.tasks.task import Task from cliport.utils import utils ##################### block insertion class BlockInsertionTranslation(BlockInsertion): """Insertion Task - Translation Variant.""" def get_random_pose(self, env, obj_size): pose = super(BlockInsertionTranslation, self).get_random_pose(env, obj_size) pos, rot = pose rot = utils.eulerXYZ_to_quatXYZW((0, 0, np.pi / 2)) return pos, rot class BlockInsertionEasy(BlockInsertionTranslation): """Insertion Task - Easy Variant.""" def add_block(self, env): """Add L-shaped block in fixed position.""" # size = (0.1, 0.1, 0.04) urdf = 'insertion/ell.urdf' pose = ((0.5, 0, 0.02), p.getQuaternionFromEuler((0, 0, np.pi / 2))) return env.add_object(urdf, pose) class BlockInsertionSixDof(BlockInsertion): """Insertion Task - 6DOF Variant.""" def __init__(self): super().__init__() self.sixdof = True self.pos_eps = 0.02 def add_fixture(self, env): """Add L-shaped fixture to place block.""" size = (0.1, 0.1, 0.04) urdf = 'insertion/fixture.urdf' pose = self.get_random_pose_6dof(env, size) env.add_object(urdf, pose, 'fixed') return pose def get_random_pose_6dof(self, env, obj_size): pos, rot = super(BlockInsertionSixDof, self).get_random_pose(env, obj_size) z = (np.random.rand() / 10) + 0.03 pos = (pos[0], pos[1], obj_size[2] / 2 + z) roll = (np.random.rand() - 0.5) * np.pi / 2 pitch = (np.random.rand() - 0.5) * np.pi / 2 yaw = np.random.rand() * 2 * np.pi rot = utils.eulerXYZ_to_quatXYZW((roll, pitch, yaw)) return pos, rot class BlockInsertionNoFixture(BlockInsertion): """Insertion Task - No Fixture Variant.""" def add_fixture(self, env): """Add target pose to place block.""" size = (0.1, 0.1, 0.04) # urdf = 'insertion/fixture.urdf' pose = self.get_random_pose(env, size) return pose # AssemblingKits class AssemblingKitsSeqUnseenColors(AssemblingKitsSeq): """Kitting Task - Easy variant.""" def __init__(self): super().__init__() self.mode = 'test' class AssemblingKitsSeqSeenColors(AssemblingKitsSeqUnseenColors): """Kitting Task - Easy variant.""" def __init__(self): super().__init__() self.mode = 'train' class AssemblingKitsSeqFull(AssemblingKitsSeqUnseenColors): """Kitting Task - Easy variant.""" def __init__(self): super().__init__() self.mode = 'full' class AssemblingKitsEasy(AssemblingKits): """Kitting Task - Easy variant.""" def __init__(self): super().__init__() self.rot_eps = np.deg2rad(30) self.train_set = np.int32( [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19]) self.test_set = np.int32([3, 11]) self.homogeneous = True # PackingBoxesPairs class PackingBoxesPairsUnseenColors(PackingBoxesPairs): def __init__(self): super().__init__() self.mode = 'test' class PackingBoxesPairsSeenColors(PackingBoxesPairsUnseenColors): def __init__(self): super().__init__() self.mode = 'train' class PackingBoxesPairsFull(PackingBoxesPairsUnseenColors): def __init__(self): super().__init__() self.mode = 'all' # PackingUnseenGoogleObjects class PackingUnseenGoogleObjectsSeq(PackingSeenGoogleObjectsSeq): """Packing Unseen Google Objects Sequence task.""" def __init__(self): super().__init__() def get_object_names(self): return utils.google_seen_obj_shapes class PackingSeenGoogleObjectsGroup(PackingSeenGoogleObjectsSeq): """Packing Seen Google Objects Group task.""" def __init__(self): super().__init__() self.lang_template = "pack all the {obj} objects in the brown box" self.max_steps = 3 def choose_objects(self, object_names, k): # Randomly choose a category to repeat. chosen_objects = np.random.choice(object_names, k, replace=True) repeat_category, distractor_category = np.random.choice(chosen_objects, 2, replace=False) num_repeats = np.random.randint(2, 3) chosen_objects[:num_repeats] = repeat_category chosen_objects[num_repeats:2*num_repeats] = distractor_category return chosen_objects, repeat_category def set_goals(self, object_descs, object_ids, object_points, repeat_category, zone_pose, zone_size): # Pack all objects of the chosen (repeat) category. num_pack_objs = object_descs.count(repeat_category) true_poses = [] chosen_obj_pts = dict() chosen_obj_ids = [] for obj_idx, (object_id, info) in enumerate(object_ids): if object_descs[obj_idx] == repeat_category: true_poses.append(zone_pose) chosen_obj_pts[object_id] = object_points[object_id] chosen_obj_ids.append((object_id, info)) self.goals.append(( chosen_obj_ids, np.eye(len(chosen_obj_ids)), true_poses, False, True, 'zone', (chosen_obj_pts, [(zone_pose, zone_size)]), 1)) self.lang_goals.append(self.lang_template.format(obj=repeat_category)) # Only one mistake allowed. self.max_steps = num_pack_objs+1 class PackingUnseenGoogleObjectsGroup(PackingSeenGoogleObjectsGroup): """Packing Unseen Google Objects Group task.""" def __init__(self): super().__init__() def get_object_names(self): return utils.google_unseen_obj_shapes # PutBlockInBowl class PutBlockInBowlUnseenColors(PutBlockInBowl): def __init__(self): super().__init__() self.mode = 'test' class PutBlockInBowlSeenColors(PutBlockInBowlUnseenColors): def __init__(self): super().__init__() self.mode = 'train' class PutBlockInBowlFull(PutBlockInBowlUnseenColors): def __init__(self): super().__init__() self.mode = 'full' # SeparatingPiles class SeparatingPilesUnseenColors(SeparatingPiles): def __init__(self): super().__init__() self.mode = 'test' class SeparatingPilesSeenColors(SeparatingPilesUnseenColors): def __init__(self): super().__init__() self.mode = 'train' class SeparatingPilesFull(SeparatingPilesUnseenColors): def __init__(self): super().__init__() self.mode = 'full' # StackBlockPyramid class StackBlockPyramidSeqUnseenColors(StackBlockPyramidSeq): def __init__(self): super().__init__() self.mode = 'test' class StackBlockPyramidSeqSeenColors(StackBlockPyramidSeqUnseenColors): def __init__(self): super().__init__() self.mode = 'train' class StackBlockPyramidSeqFull(StackBlockPyramidSeqUnseenColors): def __init__(self): super().__init__() self.mode = 'full' # TowersOfHanoiSeq class TowersOfHanoiSeqUnseenColors(TowersOfHanoiSeq): def __init__(self): super().__init__() self.mode = 'test' class TowersOfHanoiSeqSeenColors(TowersOfHanoiSeqUnseenColors): def __init__(self): super().__init__() self.mode = 'train' class TowersOfHanoiSeqFull(TowersOfHanoiSeqUnseenColors): def __init__(self): super().__init__() self.mode = 'full'