manual_control.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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(tile_size=args.tile_size)
  9. window.show_img(img)
  10. def reset():
  11. seed = None if args.seed == -1 else args.seed
  12. obs = env.reset(seed=seed)
  13. if hasattr(env, "mission"):
  14. print("Mission: %s" % env.mission)
  15. window.set_caption(env.mission)
  16. redraw(obs)
  17. def step(action):
  18. obs, reward, terminated, truncated, info = env.step(action)
  19. print(f"step={env.step_count}, reward={reward:.2f}")
  20. if terminated:
  21. print("terminated!")
  22. reset()
  23. elif truncated:
  24. print("truncated!")
  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", help="gym environment to load", default="MiniGrid-MultiRoom-N6-v0"
  61. )
  62. parser.add_argument(
  63. "--seed", type=int, help="random seed to generate the environment with", default=-1
  64. )
  65. parser.add_argument(
  66. "--tile_size", type=int, help="size at which to render tiles", default=32
  67. )
  68. parser.add_argument(
  69. "--agent_view",
  70. default=False,
  71. help="draw the agent sees (partially observable view)",
  72. action="store_true",
  73. )
  74. args = parser.parse_args()
  75. env = gym.make(args.env, render_mode="rgb_array", 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)