forked from stepjam/RLBench
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlight_bulb_out.py
71 lines (64 loc) · 3.12 KB
/
light_bulb_out.py
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from typing import List
from rlbench.backend.task import Task
from rlbench.const import colors
from rlbench.backend.conditions import NothingGrasped, DetectedCondition
from rlbench.backend.spawn_boundary import SpawnBoundary
import numpy as np
from pyrep.objects.shape import Shape
from pyrep.objects.proximity_sensor import ProximitySensor
from pyrep.objects.dummy import Dummy
class LightBulbOut(Task):
def init_task(self) -> None:
self.bulb_visual = Shape('light_bulb')
self.bulb_glass_visual = Shape('bulb')
self.holders = [Shape('bulb_holder%d' % i) for i in range(2)]
self.bulb = Shape('bulb_phys')
self.conditions = [NothingGrasped(self.robot.gripper)]
self.boundary = Shape('spawn_boundary')
self.register_graspable_objects([self.bulb])
def init_episode(self, index: int) -> List[str]:
self._variation_index = index
b = SpawnBoundary([self.boundary])
for holder in self.holders:
b.sample(holder, min_distance=0.01)
ProximitySensor('success').set_position([0, 0, 0],
relative_to=self.holders[
index % 2],
reset_dynamics=False)
w1 = Dummy('waypoint1')
w1.set_orientation([-np.pi, 0, -np.pi], reset_dynamics=False)
w4 = Dummy('waypoint4')
w4.set_orientation([-np.pi, 0, +3.735*10**(-1)], reset_dynamics=False)
target_color_name, target_color_rgb = colors[index]
color_choice = np.random.choice(
list(range(index)) + list(
range(index + 1, len(colors))),
size=1, replace=False)[0]
_, distractor_color_rgb = colors[color_choice]
self.holders[index % 2].set_color(target_color_rgb)
other_index = {0: 1, 1: 0}
self.holders[other_index[index % 2]].set_color(distractor_color_rgb)
self.register_success_conditions([DetectedCondition(
self.bulb,
ProximitySensor('success')),
NothingGrasped(self.robot.gripper)])
return ['put the bulb in the %s holder' % target_color_name,
'screw the bulb out and leave it in the %s stand' %
target_color_name,
'remove the bulb from the lamp and put it in the %s stand' %
target_color_name,
'take the light bulb out of the lamp and place it in the %s '
'holder' % target_color_name,
'grasp the light bulb, twist it anti clockwise until it is no '
'longer attached to the lamp, and drop it into the %s stand'
% target_color_name]
def variation_count(self) -> int:
return len(colors)
def step(self) -> None:
if DetectedCondition(self.bulb, ProximitySensor('lamp_detector'),
negated=True).condition_met() \
== (True, True):
self.bulb_glass_visual.set_color([1.0, 1.0, 1.0])
def cleanup(self) -> None:
if self.bulb_glass_visual:
self.bulb_glass_visual.set_color([1.0, 1.0, 0.0])