OpenAI gym environment of a racing car.
The repo is uploaded as a package on pip, but it is not updated that often.
Clone the repo and install it locally
git clone https://github.com/Pitrified/gym-racer.git
cd gym-racer
pip install -e .
The action space is a combination of two discrete action spaces:
1) accelerate: NOOP[0], UP[1], DOWN[2]
2) steer: NOOP[0], LEFT[1], RIGHT[2]
The reward is mainly related to the direction along the street, then multiplied by the speed of the car squared.
There are two types of observation possible:
lidar
with shape(n)
: a lidar with n rays, each element indicates the first sensor out of the roaddiamond
with shape(n, n)
: a square of sensors, with a corner on the car
The observation type can be set by passing it in the call to gym.make
, and the default parameters can be overridden by passing a sensor_array_params
dict:
sat = "lidar" # default
# sat = "diamond"
racer_env = gym.make(
"racer-v0",
sensor_array_type=sat,
sensor_array_params=sensor_array_params,
)
The default parameters for the lidar
are:
sensor_array_params["ray_num"] = 7 # number of rays per side
sensor_array_params["ray_step"] = 15 # distance between sensors along a ray
sensor_array_params["ray_sensors_per_ray"] = 20 # number of sensors along a ray
sensor_array_params["ray_max_angle"] = 70 # angle to sweep left/right
The default parameters for the diamond
are:
sensor_array_params["viewfield_size"] = 20 # number of rows/columns in the sensor
sensor_array_params["viewfield_step"] = 10 # spacing between the dots
There are two types of render mode available,
the human
mode initializes pygame
and renders what the car is doing to the screen,
while in console
mode only the bare minimum of the pygame
environment is loaded (to use spritecollide
).
An environment in console
mode cannot be rendered as human
.
The render mode can be set by passing it in the call to gym.make
:
mode = "human" # default
# mode = "console"
racer_env = gym.make(
"racer-v0",
render_mode=mode,
)
Info is a dict with some car details:
keys = ["car_pos_x", "car_pos_y", "car_dir", "car_speed"]