import numpy as np import os import pybullet as p import random from cliport.tasks import primitives from cliport.tasks.grippers import Spatula from cliport.tasks.task import Task from cliport.utils import utils import numpy as np from cliport.tasks import primitives from cliport.tasks.grippers import Spatula from cliport.tasks.task import Task from cliport.utils import utils class SweepRedBlocksIntoZone(Task): """Sweep a pile of red blocks into a designated zone.""" def __init__(self): super().__init__() self.max_steps = 20 self.lang_template = "sweep the pile of red blocks into the green square" self.task_completed_desc = "done sweeping." self.primitive = primitives.push self.ee = Spatula self.additional_reset() def reset(self, env): super().__init__(env) # Add goal zone. zone_size = (0.12, 0.12, 0) zone_pose = self.get_random_pose(env, zone_size) env.add_object('zone/zone.urdf', zone_pose, 'fixed') # Add pile of red blocks with `make_piles` function block_urdf = 'stacking/block.urdf' block_size = (0.04, 0.04, 0.04) block_color = utils.COLORS['red'] pile_pose = self.get_random_pose(env, block_size) pile_ids = self.make_piles(env, block_urdf, block_size, block_color, pile_pose, num_piles=1, num_objs=5) # Add goal self.add_goal(objs=pile_ids, matches=np.ones((5, 1)), targ_poses=[zone_pose], replace=True, rotations=False, metric='zone', params=[(zone_pose, zone_size)], step_max_reward=1, language_goal=self.lang_template)