Source code for rtgym.arena.arena_shapes.maze_1
import numpy as np
[docs]
def generate_maze_1_arena(sr, **kwargs):
"""Generate a complex multi-room maze arena.
Creates a maze with 7 interconnected rooms of various sizes connected by
tunnels. This is a complex navigation environment for spatial tasks.
Args:
sr (float): Spatial resolution of the arena in units per pixel.
**kwargs: Arena parameters including:
vertical (bool): Whether to rotate the maze 90 degrees.
Returns:
np.ndarray: Arena map where 0 represents free space and 1 represents walls.
"""
width, height = 400, 250
border = 10
arena_map = np.ones((height, width)) # Set all to walls
# Room 1
arena_map[0:120, 0:80] = 0
# Room 2
arena_map[0:60, 100:200] = 0
# Room 3
arena_map[0:30, 220:340] = 0
# Room 4
arena_map[0:100, 340:400] = 0
# Room 5
arena_map[140:250, 0:80] = 0
arena_map[180:250, 80:220] = 0
arena_map[160:250, 220:280] = 0
# Room 6
arena_map[80:160, 100:200] = 0
# Room 7
arena_map[50:140, 220:320] = 0
arena_map[120:250, 300:400] = 0
# Tunnels
# Room 1; Room 2; Room 5
arena_map[120:140, 40:100] = 0
# Room 7; Room 4
arena_map[100:120, 370:400] = 0
# Room 2; Room 3; Room 6
arena_map[60:80, 180:220] = 0
# Room 2; Room 3
arena_map[30:60, 220:240] = 0
# Room 6; Room 7
arena_map[230:250, 280:300] = 0
# Wall
arena_map[180:220, 140:160] = 1
arena_map[220:250, 240:260] = 1
# Add border around the arena
arena_map = np.pad(arena_map, border, 'constant', constant_values=1)
if kwargs.get('vertical'):
arena_map = np.rot90(arena_map, 1)
return arena_map