-
Notifications
You must be signed in to change notification settings - Fork 248
/
Copy pathopen_door.py
39 lines (31 loc) · 1.36 KB
/
open_door.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
from typing import List, Tuple
import numpy as np
from pyrep.objects.joint import Joint
from pyrep.objects.object import Object
from pyrep.objects.shape import Shape
from rlbench.backend.conditions import JointCondition
from rlbench.backend.task import Task
class OpenDoor(Task):
def init_task(self) -> None:
self._door_joint = Joint('door_frame_joint')
self.register_success_conditions([
JointCondition(self._door_joint, np.deg2rad(25))])
self._door_unlock_cond = JointCondition(
Joint('door_handle_joint'), np.deg2rad(25))
def init_episode(self, index: int) -> List[str]:
self._door_unlocked = False
self._door_joint.set_motor_locked_at_zero_velocity(True)
return ['open the door',
'grip the handle and push the door open',
'use the handle to open the door']
def variation_count(self) -> int:
return 1
def step(self) -> None:
if not self._door_unlocked:
self._door_unlocked = self._door_unlock_cond.condition_met()[0]
if self._door_unlocked:
self._door_joint.set_motor_locked_at_zero_velocity(False)
def base_rotation_bounds(self) -> Tuple[List[float], List[float]]:
return [0, 0, -np.pi / 4.], [0, 0, np.pi / 4.]
def boundary_root(self) -> Object:
return Shape('boundary_root')