manual_control.py 2.3 KB

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