You are an AI in robot simulation code and task design. I will provide you some example tasks, code implementation, and some guidelines for how to generate tasks and then you will help me generate a new task. My goal is to design diverse and feasible tasks for tabletop manipulation. I will first ask you to describe the task in natural languages and then will let you write the code for it. ========= Here are all the assets. Use only these assets in the task and code design. """ insertion/: ell.urdf fixture.urdf bowl/: bowl.urdf box/: box-template.urdf stacking/: block.urdf stand.urdf zone/: zone.obj zone.urdf pallet/: pallet.obj pallet.urdf ball/: ball-template.urdf cylinder/: cylinder-template.urdf bowl/: bowl.urdf # assets not for picking corner/: corner-template.urdf line/: single-green-line-template.urdf container/: container-template.urdf """ """ import numpy as np from cliport.tasks.task import Task from cliport.utils import utils import pybullet as p class PlaceRedInGreen(Task): """pick up the red blocks and place them into the green bowls amidst other objects.""" def __init__(self): super().__init__() self.max_steps = 10 self.lang_template = "put the red blocks in a green bowl" self.task_completed_desc = "done placing blocks in bowls." self.additional_reset() def reset(self, env): super().reset(env) n_bowls = np.random.randint(1, 4) n_blocks = np.random.randint(1, n_bowls + 1) # Add bowls. # x, y, z dimensions for the asset size bowl_size = (0.12, 0.12, 0) bowl_urdf = 'bowl/bowl.urdf' bowl_poses = [] for _ in range(n_bowls): bowl_pose = self.get_random_pose(env, obj_size=bowl_size) env.add_object(urdf=bowl_urdf, pose=bowl_pose, category='fixed') bowl_poses.append(bowl_pose) # Add blocks. # x, y, z dimensions for the asset size blocks = [] block_size = (0.04, 0.04, 0.04) block_urdf = 'stacking/block.urdf' for _ in range(n_blocks): block_pose = self.get_random_pose(env, obj_size=block_size) block_id = env.add_object(block_urdf, block_pose) blocks.append(block_id) # Goal: each red block is in a different green bowl. self.add_goal(objs=blocks, matches=np.ones((len(blocks), len(bowl_poses))), targ_poses=bowl_poses, replace=False, rotations=True, metric='pose', params=None, step_max_reward=1) self.lang_goals.append(self.lang_template) # Colors of distractor objects. # IMPORTANT: RETRIEVE THE ACTUAL COLOR VALUES bowl_colors = [utils.COLORS[c] for c in utils.COLORS if c != 'green'] block_colors = [utils.COLORS[c] for c in utils.COLORS if c != 'red'] # Add distractors. n_distractors = 0 while n_distractors < 6: is_block = np.random.rand() > 0.5 urdf = block_urdf if is_block else bowl_urdf size = block_size if is_block else bowl_size colors = block_colors if is_block else bowl_colors pose = self.get_random_pose(env, obj_size=size) color = colors[n_distractors % len(colors)] obj_id = env.add_object(urdf, pose, color=color) n_distractors += 1 """ ========= Please describe the task "TASK_NAME_TEMPLATE" in natural languages and format the answer in a python dictionary with keys "task-name" and value type string, "task-description" (one specific sentence) and value type string, and "assets-used" and value type list of strings. ========= Now write the pybullet simulation code for the task "TASK_NAME_TEMPLATE" in python code block starting with ```python.