File size: 1,711 Bytes
ff66cf3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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