This is the documentation for AutomotiveSimulator.jl.


This section defines a few terms that are used across the package.


An entity (or sometimes called agent) is a traffic participant that navigates in the environment, it is defined by a physical state (position, velocity, ...), an agent definition (whether it is a car or pedestrian, how large it is, ...), and an ID.

AutomotiveSimulator is templated to efficiently run simulations with different types of entities. An entity represents an agent in the simulation, and it is parameterized by

  • S: state of the entity, may change over time
  • D: definition of the entity, does not change over time
  • I: unique identifier for the entity, typically an Int64 or Symbol

The interface for implementing your own state type is described in States. Similarly, an interface for implementing your own entity definition is described in Agent Definition

In addition to the state, definition and identifier for each simulation agent, one can also customize the actions, environment and the driver models used by the agents.


An action consists of a command applied to move the entity (e.g. longitudinal acceleration, steering). The state of the entity is updated using the propagate method which encodes the dynamics model.


A scene represents a snapshot in time of a driving situation, it essentially consists of a list of entities at a given time.

It is implemented using the Scene object. Scene supports most of the operation that one can do on a collection (iterate, in, push!, ...). In addition it supports get_by_id to retrieve an entity by its ID.

Driver Model

A driver model is a distribution over actions. Given a scene, each entity can update its model, we call this process observation (the corresponding method is observe!). After observing the scene, an action can be sampled from the driver model (using rand).


The following examples will showcase some of the simulation functionality of AutomotiveSimulator


All AutomotiveSimulator tutorials are available as Jupyter notebooks by clicking on the badge at the beginning of the tutorial!