forked from Farama-Foundation/Miniworld
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmanual_control.py
executable file
·103 lines (78 loc) · 2.41 KB
/
manual_control.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/env python3
"""
This script allows you to manually control the simulator
using the keyboard arrows.
"""
import sys
import argparse
import pyglet
import math
from pyglet.window import key
from pyglet import clock
import numpy as np
import gym
import gym_miniworld
parser = argparse.ArgumentParser()
parser.add_argument('--env-name', default='MiniWorld-Hallway-v0')
parser.add_argument('--domain-rand', action='store_true', help='enable domain randomization')
parser.add_argument('--no-time-limit', action='store_true', help='ignore time step limits')
parser.add_argument('--top_view', action='store_true', help='show the top view instead of the agent view')
args = parser.parse_args()
env = gym.make(args.env_name)
if args.no_time_limit:
env.max_episode_steps = math.inf
if args.domain_rand:
env.domain_rand = True
view_mode = 'top' if args.top_view else 'agent'
env.reset()
# Create the display window
env.render('pyglet', view=view_mode)
def step(action):
print('step {}/{}: {}'.format(env.step_count+1, env.max_episode_steps, env.actions(action).name))
obs, reward, done, info = env.step(action)
if reward > 0:
print('reward={:.2f}'.format(reward))
if done:
print('done!')
env.reset()
env.render('pyglet', view=view_mode)
@env.unwrapped.window.event
def on_key_press(symbol, modifiers):
"""
This handler processes keyboard commands that
control the simulation
"""
if symbol == key.BACKSPACE or symbol == key.SLASH:
print('RESET')
env.reset()
env.render('pyglet', view=view_mode)
return
if symbol == key.ESCAPE:
env.close()
sys.exit(0)
if symbol == key.UP:
step(env.actions.move_forward)
elif symbol == key.DOWN:
step(env.actions.move_back)
elif symbol == key.LEFT:
step(env.actions.turn_left)
elif symbol == key.RIGHT:
step(env.actions.turn_right)
elif symbol == key.PAGEUP or symbol == key.P:
step(env.actions.pickup)
elif symbol == key.PAGEDOWN or symbol == key.D:
step(env.actions.drop)
elif symbol == key.ENTER:
step(env.actions.done)
@env.unwrapped.window.event
def on_key_release(symbol, modifiers):
pass
@env.unwrapped.window.event
def on_draw():
env.render('pyglet', view=view_mode)
@env.unwrapped.window.event
def on_close():
pyglet.app.exit()
# Enter main event loop
pyglet.app.run()
env.close()