manual_control.py 2.3 KB

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