manual_control.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #!/usr/bin/env python3
  2. import time
  3. import argparse
  4. import numpy as np
  5. import gym
  6. import gym_minigrid
  7. from gym_minigrid.wrappers import *
  8. from gym_minigrid.window import Window
  9. def redraw(img):
  10. if not args.agent_view:
  11. img = env.render(tile_size=args.tile_size)
  12. window.show_img(img)
  13. def reset():
  14. if args.seed == -1:
  15. seed = None
  16. else:
  17. seed = args.seed
  18. obs = env.reset(seed=seed)
  19. if hasattr(env, 'mission'):
  20. print('Mission: %s' % env.mission)
  21. window.set_caption(env.mission)
  22. redraw(obs)
  23. def step(action):
  24. obs, reward, done, info = env.step(action)
  25. print('step=%s, reward=%.2f' % (env.step_count, reward))
  26. if done:
  27. print('done!')
  28. reset()
  29. else:
  30. redraw(obs)
  31. def key_handler(event):
  32. print('pressed', event.key)
  33. if event.key == 'escape':
  34. window.close()
  35. return
  36. if event.key == 'backspace':
  37. reset()
  38. return
  39. if event.key == 'left':
  40. step(env.actions.left)
  41. return
  42. if event.key == 'right':
  43. step(env.actions.right)
  44. return
  45. if event.key == 'up':
  46. step(env.actions.forward)
  47. return
  48. # Spacebar
  49. if event.key == ' ':
  50. step(env.actions.toggle)
  51. return
  52. if event.key == 'pageup':
  53. step(env.actions.pickup)
  54. return
  55. if event.key == 'pagedown':
  56. step(env.actions.drop)
  57. return
  58. if event.key == 'enter':
  59. step(env.actions.done)
  60. return
  61. parser = argparse.ArgumentParser()
  62. parser.add_argument(
  63. "--env",
  64. help="gym environment to load",
  65. default='MiniGrid-MultiRoom-N6-v0'
  66. )
  67. parser.add_argument(
  68. "--seed",
  69. type=int,
  70. help="random seed to generate the environment with",
  71. default=-1
  72. )
  73. parser.add_argument(
  74. "--tile_size",
  75. type=int,
  76. help="size at which to render tiles",
  77. default=32
  78. )
  79. parser.add_argument(
  80. '--agent_view',
  81. default=False,
  82. help="draw the agent sees (partially observable view)",
  83. action='store_true'
  84. )
  85. args = parser.parse_args()
  86. env = gym.make(args.env, render_mode='rgb_array')
  87. if args.agent_view:
  88. env = RGBImgPartialObsWrapper(env)
  89. env = ImgObsWrapper(env)
  90. window = Window('gym_minigrid - ' + args.env)
  91. window.reg_key_handler(key_handler)
  92. reset()
  93. # Blocking event loop
  94. window.show(block=True)