manual_control.py 2.3 KB

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