| Before writing the code for the task "TASK_NAME_TEMPLATE". Here are some APIs that are defined. Please confirm that you understand these APIs. | |
| """ | |
| TASK_CLASS_IMPLEMENTATION | |
| def add_object(self, urdf, pose, category='rigid'): | |
| """List of (fixed, rigid, or deformable) objects in env.""" | |
| fixed_base = 1 if category == 'fixed' else 0 | |
| obj_id = pybullet_utils.load_urdf( | |
| p, | |
| os.path.join(self.assets_root, urdf), | |
| pose[0], | |
| pose[1], | |
| useFixedBase=fixed_base) | |
| self.obj_ids[category].append(obj_id) | |
| return obj_id | |
| """ | |
| Note that the objects need to obey physics and not collide with each other, and the object goal poses need to be above the table with lower bound x=0.25, y=-0.5 and upper bound x=0.75, y=0.5. When there are multiple objects for a multi-step pick-and-place task, there are often multiple subgoals. Once the task and environment are generated, an agent with a pick and place primitive will follow the defined goal to accomplish the tasks. | |
| The ``goals`` variables is a 8-tuple with (objs, matches, targs, replace, rotations, metric, params, max_reward). | |
| - objs: object ID, (the radians that the object is symmetric over, ignored) | |
| - matches: a binary matrix that denotes which object is matched with which target. This matrix has dimension len(objs) x len(targs). | |
| - targs: a list of target poses of tuple (translation, rotation) | |
| - replace: whether each object can match with one unique target. | |
| - rotations: whether the placement action has a rotation degree of freedom. | |
| - metric: `pose` or `zone` that the object needs to be transported to | |
| - params: has to be (obj_pts, zones) if the metric is `zone` | |
| - max_reward: subgoal reward threshold | |