Browse Source

Rendering keys. Improved rendering for locked doors.

Maxime Chevalier-Boisvert 5 years ago
parent
commit
b8b04dbb4d
3 changed files with 47 additions and 36 deletions
  1. 31 0
      benchmark.py
  2. 15 35
      gym_minigrid/minigrid.py
  3. 1 1
      manual_control.py

+ 31 - 0
benchmark.py

@@ -0,0 +1,31 @@
+#!/usr/bin/env python3
+
+import time
+import argparse
+import gym_minigrid
+import gym
+
+parser = argparse.ArgumentParser()
+parser.add_argument(
+    "--env-name",
+    dest="env_name",
+    help="gym environment to load",
+    default='MiniGrid-DoorKey-8x8-v0'
+)
+parser.add_argument("--num_frames", default=2000)
+args = parser.parse_args()
+
+env = gym.make(args.env_name)
+env.reset()
+
+t0 = time.time()
+
+for i in range(args.num_frames):
+    env.render('rgb_array')
+
+t1 = time.time()
+dt = t1 - t0
+dt_per_frame = (1000 * dt) / args.num_frames
+frames_per_sec = args.num_frames / dt
+print('dt per frame: {:.1f} ms'.format(dt_per_frame))
+print('frames_per_sec: {:.1f}'.format(frames_per_sec))

+ 15 - 35
gym_minigrid/minigrid.py

@@ -285,20 +285,18 @@ class Door(WorldObj):
             return
 
         # Door frame and door
-        inner_color = 0.45 * np.array(c) if self.is_locked else c
-        fill_color = inner_color if self.is_locked else (0,0,0)
-        fill_coords(img, point_in_rect(0.00, 1.00, 0.00, 1.00), c)
-        fill_coords(img, point_in_rect(0.04, 0.96, 0.04, 0.96), (0,0,0))
-        fill_coords(img, point_in_rect(0.08, 0.92, 0.08, 0.92), inner_color)
-        fill_coords(img, point_in_rect(0.12, 0.88, 0.12, 0.88), fill_color)
-
-        #r.setLineColor(c[0], c[1], c[2])
-        #r.setColor(c[0], c[1], c[2], 50 if self.is_locked else 0)
-
         if self.is_locked:
+            fill_coords(img, point_in_rect(0.00, 1.00, 0.00, 1.00), c)
+            fill_coords(img, point_in_rect(0.06, 0.94, 0.06, 0.94), 0.45 * np.array(c))
+
             # Draw key slot
             fill_coords(img, point_in_rect(0.52, 0.75, 0.50, 0.56), c)
         else:
+            fill_coords(img, point_in_rect(0.00, 1.00, 0.00, 1.00), c)
+            fill_coords(img, point_in_rect(0.04, 0.96, 0.04, 0.96), (0,0,0))
+            fill_coords(img, point_in_rect(0.08, 0.92, 0.08, 0.92), c)
+            fill_coords(img, point_in_rect(0.12, 0.88, 0.12, 0.88), (0,0,0))
+
             # Draw door handle
             fill_coords(img, point_in_circle(cx=0.75, cy=0.50, r=0.08), c)
 
@@ -310,36 +308,18 @@ class Key(WorldObj):
         return True
 
     def render(self, img):
-        pass
+        c = COLORS[self.color]
 
-        """
         # Vertical quad
-        r.drawPolygon([
-            (16, 10),
-            (20, 10),
-            (20, 28),
-            (16, 28)
-        ])
+        fill_coords(img, point_in_rect(0.50, 0.63, 0.31, 0.89), c)
 
         # Teeth
-        r.drawPolygon([
-            (12, 19),
-            (16, 19),
-            (16, 21),
-            (12, 21)
-        ])
-        r.drawPolygon([
-            (12, 26),
-            (16, 26),
-            (16, 28),
-            (12, 28)
-        ])
+        fill_coords(img, point_in_rect(0.38, 0.50, 0.59, 0.66), c)
+        fill_coords(img, point_in_rect(0.38, 0.50, 0.81, 0.88), c)
 
-        r.drawCircle(18, 9, 6)
-        r.setLineColor(0, 0, 0)
-        r.setColor(0, 0, 0)
-        r.drawCircle(18, 9, 2)
-        """
+        # Ring
+        fill_coords(img, point_in_circle(cx=0.56, cy=0.28, r=0.190), c)
+        fill_coords(img, point_in_circle(cx=0.56, cy=0.28, r=0.064), (0,0,0))
 
 class Ball(WorldObj):
     def __init__(self, color='blue'):

+ 1 - 1
manual_control.py

@@ -73,7 +73,7 @@ parser.add_argument(
     dest="env_name",
     help="gym environment to load",
     #default='MiniGrid-MultiRoom-N6-v0'
-    default='MiniGrid-GoToDoor-5x5-v0'
+    default='MiniGrid-KeyCorridorS3R3-v0'
 )
 args = parser.parse_args()