Spaces:
Sleeping
Sleeping
| 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.task import Task | |
| from cliport.utils import utils | |
| class ContainerPyramidConstruction(Task): | |
| """Construct a pyramid of containers with specific color and shape arrangement.""" | |
| def __init__(self): | |
| super().__init__() | |
| self.max_steps = 10 | |
| self.lang_template = "stack the {color} {shape} container on the {level} level" | |
| self.task_completed_desc = "done constructing container pyramid." | |
| self.additional_reset() | |
| def reset(self, env): | |
| super().reset(env) | |
| # Add pallet. | |
| pallet_size = (0.35, 0.35, 0.01) | |
| pallet_pose = self.get_random_pose(env, pallet_size) | |
| pallet_urdf = 'pallet/pallet.urdf' | |
| env.add_object(pallet_urdf, pallet_pose, 'fixed') | |
| # Define container shapes and colors. | |
| shapes = ['square', 'circle', 'triangle'] | |
| colors = ['red', 'blue', 'green'] | |
| levels = ['bottom', 'middle', 'top'] | |
| # Add containers. | |
| container_urdf = 'container/container-template.urdf' | |
| containers = [] | |
| for i in range(3): | |
| for j in range(3 - i): | |
| # Define container size and color. | |
| container_size = (0.1, 0.1, 0.1) | |
| container_color = colors[i] | |
| # Define container pose. | |
| x_offset = 0.05 * (j - (3 - i - 1) / 2) | |
| z_offset = 0.1 * i | |
| container_pose = (pallet_pose[0] + x_offset, pallet_pose[1], pallet_pose[2] + z_offset) | |
| # Add container to the environment. | |
| replace = {'DIM': container_size, 'HALF': (container_size[0] / 2, container_size[1] / 2, container_size[2] / 2)} | |
| container_urdf_filled = self.fill_template(container_urdf, replace) | |
| container_id = env.add_object(container_urdf_filled, container_pose, color=container_color) | |
| containers.append(container_id) | |
| # Add goals. | |
| for i in range(3): | |
| for j in range(3 - i): | |
| idx = int(i * (i + 1) / 2 + j) | |
| language_goal = self.lang_template.format(color=colors[i], shape=shapes[j], level=levels[i]) | |
| self.add_goal(objs=[containers[idx]], matches=np.ones((1, 1)), targ_poses=[pallet_pose], replace=False, | |
| rotations=True, metric='pose', params=None, step_max_reward=1 / 6, language_goal=language_goal) |