manual_control.py 2.2 KB

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