Graphics¶
Environment rendering is done with pygame, which must be installed separately.
A window is created at the first call of env.render()
. Its dimensions can be configured:
env = gym.make("roundabout-v0")
env.configure({
"screen_width": 640,
"screen_height": 480
})
env.reset()
env.render()
World surface¶
The simulation is rendered in a RoadSurface
pygame surface, which defines the location and zoom of the rendered location.
By default, the rendered area is always centered on the ego-vehicle.
Its initial scale and offset can be set with the "scaling"
and "centering_position"
configurations, and can also be
updated during simulation using the O,L keys and K,M keys, respectively.
Scene graphics¶
Roads are rendered in the
RoadGraphics
class.Vehicles are rendered in the
VehicleGraphics
class.
API¶
-
class
highway_env.envs.common.graphics.
EnvViewer
(env: AbstractEnv)[source]¶ A viewer to render a highway driving environment.
-
SAVE_IMAGES
= False¶
-
__init__
(env: AbstractEnv) → None[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
set_agent_display
(agent_display: Callable) → None[source]¶ Set a display callback provided by an agent
So that they can render their behaviour on a dedicated agent surface, or even on the simulation surface.
- Parameters
agent_display – a callback provided by the agent to display on surfaces
-
set_agent_action_sequence
(actions: List[Action]) → None[source]¶ Set the sequence of actions chosen by the agent, so that it can be displayed
- Parameters
actions – list of action, following the env’s action space specification
-
handle_events
() → None[source]¶ Handle pygame events by forwarding them to the display and environment vehicle.
-
window_position
() → numpy.ndarray[source]¶ the world position of the center of the displayed window.
-
__dict__
= mappingproxy({'__module__': 'highway_env.envs.common.graphics', '__doc__': 'A viewer to render a highway driving environment.', 'SAVE_IMAGES': False, '__init__': <function EnvViewer.__init__>, 'set_agent_display': <function EnvViewer.set_agent_display>, 'set_agent_action_sequence': <function EnvViewer.set_agent_action_sequence>, 'handle_events': <function EnvViewer.handle_events>, 'display': <function EnvViewer.display>, 'get_image': <function EnvViewer.get_image>, 'window_position': <function EnvViewer.window_position>, 'close': <function EnvViewer.close>, '__dict__': <attribute '__dict__' of 'EnvViewer' objects>, '__weakref__': <attribute '__weakref__' of 'EnvViewer' objects>})¶
-
__module__
= 'highway_env.envs.common.graphics'¶
-
__weakref__
¶ list of weak references to the object (if defined)
-
-
class
highway_env.envs.common.graphics.
EventHandler
[source]¶ -
classmethod
handle_event
(action_type: highway_env.envs.common.action.ActionType, event: Event) → None[source]¶ Map the pygame keyboard events to control decisions
- Parameters
action_type – the ActionType that defines how the vehicle is controlled
event – the pygame event
-
classmethod
handle_discrete_action_event
(action_type: highway_env.envs.common.action.DiscreteMetaAction, event: Event) → None[source]¶
-
__dict__
= mappingproxy({'__module__': 'highway_env.envs.common.graphics', 'handle_event': <classmethod object>, 'handle_discrete_action_event': <classmethod object>, 'handle_continuous_action_event': <classmethod object>, '__dict__': <attribute '__dict__' of 'EventHandler' objects>, '__weakref__': <attribute '__weakref__' of 'EventHandler' objects>, '__doc__': None})¶
-
__module__
= 'highway_env.envs.common.graphics'¶
-
__weakref__
¶ list of weak references to the object (if defined)
-
classmethod
-
class
highway_env.road.graphics.
WorldSurface
(size: Tuple[int, int], flags: object, surf: pygame.Surface)[source]¶ A pygame Surface implementing a local coordinate system so that we can move and zoom in the displayed area.
-
BLACK
= (0, 0, 0)¶
-
GREY
= (100, 100, 100)¶
-
GREEN
= (50, 200, 0)¶
-
YELLOW
= (200, 200, 0)¶
-
WHITE
= (255, 255, 255)¶
-
INITIAL_SCALING
= 5.5¶
-
INITIAL_CENTERING
= [0.5, 0.5]¶
-
SCALING_FACTOR
= 1.3¶
-
MOVING_FACTOR
= 0.1¶
-
__init__
(size: Tuple[int, int], flags: object, surf: pygame.Surface) → None[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
pix
(length: float) → int[source]¶ Convert a distance [m] to pixels [px].
- Parameters
length – the input distance [m]
- Returns
the corresponding size [px]
-
pos2pix
(x: float, y: float) → Tuple[int, int][source]¶ Convert two world coordinates [m] into a position in the surface [px]
- Parameters
x – x world coordinate [m]
y – y world coordinate [m]
- Returns
the coordinates of the corresponding pixel [px]
-
vec2pix
(vec: Union[Tuple[float, float], numpy.ndarray]) → Tuple[int, int][source]¶ Convert a world position [m] into a position in the surface [px].
- Parameters
vec – a world position [m]
- Returns
the coordinates of the corresponding pixel [px]
-
move_display_window_to
(position: Union[Tuple[float, float], numpy.ndarray]) → None[source]¶ Set the origin of the displayed area to center on a given world position.
- Parameters
position – a world position [m]
-
handle_event
(event: Event) → None[source]¶ Handle pygame events for moving and zooming in the displayed area.
- Parameters
event – a pygame event
-
__dict__
= mappingproxy({'__module__': 'highway_env.road.graphics', '__doc__': 'A pygame Surface implementing a local coordinate system so that we can move and zoom in the displayed area.', 'BLACK': (0, 0, 0), 'GREY': (100, 100, 100), 'GREEN': (50, 200, 0), 'YELLOW': (200, 200, 0), 'WHITE': (255, 255, 255), 'INITIAL_SCALING': 5.5, 'INITIAL_CENTERING': [0.5, 0.5], 'SCALING_FACTOR': 1.3, 'MOVING_FACTOR': 0.1, '__init__': <function WorldSurface.__init__>, 'pix': <function WorldSurface.pix>, 'pos2pix': <function WorldSurface.pos2pix>, 'vec2pix': <function WorldSurface.vec2pix>, 'move_display_window_to': <function WorldSurface.move_display_window_to>, 'handle_event': <function WorldSurface.handle_event>, '__dict__': <attribute '__dict__' of 'WorldSurface' objects>})¶
-
__module__
= 'highway_env.road.graphics'¶
-
-
class
highway_env.road.graphics.
LaneGraphics
[source]¶ A visualization of a lane.
-
STRIPE_SPACING
: float = 5¶ Offset between stripes [m]
-
STRIPE_LENGTH
: float = 3¶ Length of a stripe [m]
-
STRIPE_WIDTH
: float = 0.3¶ Width of a stripe [m]
-
classmethod
display
(lane: highway_env.road.lane.AbstractLane, surface: highway_env.road.graphics.WorldSurface) → None[source]¶ Display a lane on a surface.
- Parameters
lane – the lane to be displayed
surface – the pygame surface
-
classmethod
striped_line
(lane: highway_env.road.lane.AbstractLane, surface: highway_env.road.graphics.WorldSurface, stripes_count: int, longitudinal: float, side: int) → None[source]¶ Draw a striped line on one side of a lane, on a surface.
- Parameters
lane – the lane
surface – the pygame surface
stripes_count – the number of stripes to draw
longitudinal – the longitudinal position of the first stripe [m]
side – which side of the road to draw [0:left, 1:right]
-
classmethod
continuous_curve
(lane: highway_env.road.lane.AbstractLane, surface: highway_env.road.graphics.WorldSurface, stripes_count: int, longitudinal: float, side: int) → None[source]¶ Draw a striped line on one side of a lane, on a surface.
- Parameters
lane – the lane
surface – the pygame surface
stripes_count – the number of stripes to draw
longitudinal – the longitudinal position of the first stripe [m]
side – which side of the road to draw [0:left, 1:right]
-
classmethod
continuous_line
(lane: highway_env.road.lane.AbstractLane, surface: highway_env.road.graphics.WorldSurface, stripes_count: int, longitudinal: float, side: int) → None[source]¶ Draw a continuous line on one side of a lane, on a surface.
- Parameters
lane – the lane
surface – the pygame surface
stripes_count – the number of stripes that would be drawn if the line was striped
longitudinal – the longitudinal position of the start of the line [m]
side – which side of the road to draw [0:left, 1:right]
-
classmethod
draw_stripes
(lane: highway_env.road.lane.AbstractLane, surface: highway_env.road.graphics.WorldSurface, starts: List[float], ends: List[float], lats: List[float]) → None[source]¶ Draw a set of stripes along a lane.
- Parameters
lane – the lane
surface – the surface to draw on
starts – a list of starting longitudinal positions for each stripe [m]
ends – a list of ending longitudinal positions for each stripe [m]
lats – a list of lateral positions for each stripe [m]
-
classmethod
draw_ground
(lane: highway_env.road.lane.AbstractLane, surface: highway_env.road.graphics.WorldSurface, color: Tuple[float], width: float, draw_surface: pygame.Surface = None) → None[source]¶
-
__annotations__
= {'STRIPE_LENGTH': <class 'float'>, 'STRIPE_SPACING': <class 'float'>, 'STRIPE_WIDTH': <class 'float'>}¶
-
__dict__
= mappingproxy({'__module__': 'highway_env.road.graphics', '__annotations__': {'STRIPE_SPACING': <class 'float'>, 'STRIPE_LENGTH': <class 'float'>, 'STRIPE_WIDTH': <class 'float'>}, '__doc__': 'A visualization of a lane.', 'STRIPE_SPACING': 5, 'STRIPE_LENGTH': 3, 'STRIPE_WIDTH': 0.3, 'display': <classmethod object>, 'striped_line': <classmethod object>, 'continuous_curve': <classmethod object>, 'continuous_line': <classmethod object>, 'draw_stripes': <classmethod object>, 'draw_ground': <classmethod object>, '__dict__': <attribute '__dict__' of 'LaneGraphics' objects>, '__weakref__': <attribute '__weakref__' of 'LaneGraphics' objects>})¶
-
__module__
= 'highway_env.road.graphics'¶
-
__weakref__
¶ list of weak references to the object (if defined)
-
-
class
highway_env.road.graphics.
RoadGraphics
[source]¶ A visualization of a road lanes and vehicles.
-
static
display
(road: highway_env.road.road.Road, surface: highway_env.road.graphics.WorldSurface) → None[source]¶ Display the road lanes on a surface.
- Parameters
road – the road to be displayed
surface – the pygame surface
-
static
display_traffic
(road: highway_env.road.road.Road, surface: highway_env.road.graphics.WorldSurface, simulation_frequency: int = 15, offscreen: bool = False) → None[source]¶ Display the road vehicles on a surface.
- Parameters
road – the road to be displayed
surface – the pygame surface
simulation_frequency – simulation frequency
offscreen – render without displaying on a screen
-
static
display_road_objects
(road: highway_env.road.road.Road, surface: highway_env.road.graphics.WorldSurface, offscreen: bool = False) → None[source]¶ Display the road objects on a surface.
- Parameters
road – the road to be displayed
surface – the pygame surface
offscreen – whether the rendering should be done offscreen or not
-
__dict__
= mappingproxy({'__module__': 'highway_env.road.graphics', '__doc__': 'A visualization of a road lanes and vehicles.', 'display': <staticmethod object>, 'display_traffic': <staticmethod object>, 'display_road_objects': <staticmethod object>, '__dict__': <attribute '__dict__' of 'RoadGraphics' objects>, '__weakref__': <attribute '__weakref__' of 'RoadGraphics' objects>})¶
-
__module__
= 'highway_env.road.graphics'¶
-
__weakref__
¶ list of weak references to the object (if defined)
-
static
-
class
highway_env.road.graphics.
RoadObjectGraphics
[source]¶ A visualization of objects on the road.
-
YELLOW
= (200, 200, 0)¶
-
BLUE
= (100, 200, 255)¶
-
RED
= (255, 100, 100)¶
-
GREEN
= (50, 200, 0)¶
-
BLACK
= (60, 60, 60)¶
-
DEFAULT_COLOR
= (200, 200, 0)¶
-
__dict__
= mappingproxy({'__module__': 'highway_env.road.graphics', '__doc__': 'A visualization of objects on the road.', 'YELLOW': (200, 200, 0), 'BLUE': (100, 200, 255), 'RED': (255, 100, 100), 'GREEN': (50, 200, 0), 'BLACK': (60, 60, 60), 'DEFAULT_COLOR': (200, 200, 0), 'display': <classmethod object>, 'blit_rotate': <staticmethod object>, 'get_color': <classmethod object>, '__dict__': <attribute '__dict__' of 'RoadObjectGraphics' objects>, '__weakref__': <attribute '__weakref__' of 'RoadObjectGraphics' objects>})¶
-
__module__
= 'highway_env.road.graphics'¶
-
__weakref__
¶ list of weak references to the object (if defined)
-
classmethod
display
(object_: RoadObject, surface: highway_env.road.graphics.WorldSurface, transparent: bool = False, offscreen: bool = False)[source]¶ Display a road objects on a pygame surface.
The objects is represented as a colored rotated rectangle
- Parameters
object – the vehicle to be drawn
surface – the surface to draw the object on
transparent – whether the object should be drawn slightly transparent
offscreen – whether the rendering should be done offscreen or not
-
static
blit_rotate
(surf: pygame.Surface, image: pygame.Surface, pos: Union[numpy.ndarray, Sequence[float]], angle: float, origin_pos: Union[numpy.ndarray, Sequence[float]] = None, show_rect: bool = False) → None[source]¶ Many thanks to https://stackoverflow.com/a/54714144.
-
-
class
highway_env.vehicle.graphics.
VehicleGraphics
[source]¶ -
RED
= (255, 100, 100)¶
-
GREEN
= (50, 200, 0)¶
-
BLUE
= (100, 200, 255)¶
-
YELLOW
= (200, 200, 0)¶
-
BLACK
= (60, 60, 60)¶
-
PURPLE
= (200, 0, 150)¶
-
DEFAULT_COLOR
= (200, 200, 0)¶
-
EGO_COLOR
= (50, 200, 0)¶
-
classmethod
display
(vehicle: highway_env.vehicle.kinematics.Vehicle, surface: WorldSurface, transparent: bool = False, offscreen: bool = False, label: bool = False) → None[source]¶ Display a vehicle on a pygame surface.
The vehicle is represented as a colored rotated rectangle.
- Parameters
vehicle – the vehicle to be drawn
surface – the surface to draw the vehicle on
transparent – whether the vehicle should be drawn slightly transparent
offscreen – whether the rendering should be done offscreen or not
label – whether a text label should be rendered
-
static
blit_rotate
(surf: pygame.Surface, image: pygame.Surface, pos: Union[numpy.ndarray, Sequence[float]], angle: float, origin_pos: Union[numpy.ndarray, Sequence[float]] = None, show_rect: bool = False) → None[source]¶ Many thanks to https://stackoverflow.com/a/54714144.
-
classmethod
display_trajectory
(states: List[highway_env.vehicle.kinematics.Vehicle], surface: WorldSurface, offscreen: bool = False) → None[source]¶ Display the whole trajectory of a vehicle on a pygame surface.
- Parameters
states – the list of vehicle states within the trajectory to be displayed
surface – the surface to draw the vehicle future states on
offscreen – whether the rendering should be done offscreen or not
-
classmethod
display_history
(vehicle: highway_env.vehicle.kinematics.Vehicle, surface: WorldSurface, frequency: float = 3, duration: float = 2, simulation: int = 15, offscreen: bool = False) → None[source]¶ Display the whole trajectory of a vehicle on a pygame surface.
- Parameters
vehicle – the vehicle states within the trajectory to be displayed
surface – the surface to draw the vehicle future states on
frequency – frequency of displayed positions in history
duration – length of displayed history
simulation – simulation frequency
offscreen – whether the rendering should be done offscreen or not
-
classmethod
get_color
(vehicle: highway_env.vehicle.kinematics.Vehicle, transparent: bool = False) → Tuple[int][source]¶
-
__dict__
= mappingproxy({'__module__': 'highway_env.vehicle.graphics', 'RED': (255, 100, 100), 'GREEN': (50, 200, 0), 'BLUE': (100, 200, 255), 'YELLOW': (200, 200, 0), 'BLACK': (60, 60, 60), 'PURPLE': (200, 0, 150), 'DEFAULT_COLOR': (200, 200, 0), 'EGO_COLOR': (50, 200, 0), 'display': <classmethod object>, 'blit_rotate': <staticmethod object>, 'display_trajectory': <classmethod object>, 'display_history': <classmethod object>, 'get_color': <classmethod object>, '__dict__': <attribute '__dict__' of 'VehicleGraphics' objects>, '__weakref__': <attribute '__weakref__' of 'VehicleGraphics' objects>, '__doc__': None})¶
-
__module__
= 'highway_env.vehicle.graphics'¶
-
__weakref__
¶ list of weak references to the object (if defined)
-