Writing an ODD Definition

Prev Next

Overview

This article describes what an ODD is, what its components are, and how to write one, starting with a simple example, and then explaining the concepts in depth.

What is an ODD?

An Operational Design Domain (ODD) is the set of specific conditions under which an Automated Driving System (ADS) is designed to function.

Each ADS has its own associated ODD.

What is an ODD?

Intuitively, an ODD describes the elements that a given Automated Driving System (ADS) can deal with:

  • The ADS can handle elements which are inside the ODD

  • The ADS cannot handle elements which are outside the ODD

What is an ODD definition?

An ODD definition is a document or file that clearly defines these operating conditions. This is very useful for testing systems, and for communicating the capabilities of a given ADS.

There are multiple ways to define an ODD, but the format used in Safety Pool consists of keywords and attribute names.

We’ll start with a simple example:

Example 1:

MODE: DEFAULT

INCLUDE "Drivable area type" is ["Motorways", "Distributor roads", "Slip roads"]
INCLUDE "Junction" is [all]

EXCLUDE 'Wind' is ['Hurricane force']
EXCLUDE 'Snowfall' is ['Heavy snow']
EXCLUDE 'Particulates' is ['Volcanic ash']

CONDITIONAL IF 'Drivable area type' is ['Motorways']:
	INCLUDE 'Drivable area surface type' is ["SurfaceTypeAsphalt", "SurfaceTypeCementConcrete"]
	
INCLUDE "Number of lanes" is [1:4]

Explanation:

In this ODD, the system it refers to:

  • Can handle motorways, distributor roads, slip roads, and all junctions

  • Cannot handle hurricane force winds, heavy snow, or volcanic ash

  • Can handle motorways, but only if they are asphalt or concrete

  • Can handle 1 to 4 lanes

    • Conversely, the system cannot handle 5 or more lanes

The main keywords are: INCLUDE , EXCLUDE , CONDITIONAL IF , MODE, and all.

We will now explain these components.

Attribute Names

The attribute names are the actual elements that are important to the relevant driving system. In the example above, they are the parts in single or double quotes, such as “Motorways" or 'Snowfall' . The names come from the BSI PAS 1883:2025 standard.

In Safety Pool, these tag names (and any associated units) are visible on the Search Page:

Tags and units visible on the search page.
If you need access to the raw taxonomy TTL file, please contact support@safetypooldb.ai.

Basic Statements

Includes and Excludes

Include statements specify attributes that are inside of the ODD, and Exclude statements specify attributes that are outside of the ODD.  

Example 2:

INCLUDE "Drivable area type" is ["Motorways", "Radial roads"]
EXCLUDE "Weather" is ["Snowfall", "Rainfall"]
INCLUDE "Junctions" is [all]

Explanation:

In this example:

  • Motorways and radial roads are inside the ODD, so the system can handle them

  • Snowfall and rainfall are outside of the ODD, so the system cannot handle them

  • All junctions are considered within the ODD, so the system can handle them

    • all junctions refers to intersections and roundabouts, as these are the children of Junctions listed on the search page

Mode Statements

The mode, which must be specified for all definitions, is used to specify how any attributes which aren’t explicitly listed in the ODD file are handled. There are 3 modes: Permissive, Restrictive, and Default.

Permissive mode

In Permissive mode, any attributes that aren’t mentioned in the ODD definition are considered inside the ODD.

Example 3:

MODE: PERMISSIVE

EXCLUDE "Weather" is ["Snowfall"]

Explanation:

  • The system with this ODD cannot handle snowfall

  • But it can handle everything else

    • In Permissive mode, it is assumed that all non-mentioned elements - including, in this example, all road types, all road surfaces, all traffic types, etc. - should be considered inside of the ODD

    • This also includes all other weather conditions that aren’t snowfall

An empty ODD file in Permissive mode would automatically include everything.

Restrictive mode

In Restrictive mode, any attributes that aren’t mentioned in the ODD definition are considered outside of the ODD.

Example 4:

MODE: RESTRICTIVE

INCLUDE "Environmental Conditions" is [all]
INCLUDE "Dynamic elements" is [all]

INCLUDE "SceneryDrivableArea" is [all]

Explanation:

  • The system with this ODD can handle all environmental conditions, and all dynamic elements (i.e. other vehicles) of a scenario

  • It can handle every kind of drivable area, which includes:

    • All road signs, all surface types, all road types, all road edge types, all kinds of road geometry, and all kinds of road specifications

    • These are all sub-elements of drivable area, listed on the Search Page

  • It cannot handle any kind of fixed road structure, junction, special structure, temporary road structure, or zone. These are all of the scenery elements which aren’t explicitly mentioned, and are therefore considered excluded.

An empty ODD file in Restrictive mode would automatically exclude everything.

Default mode

In Default mode, any attributes that aren’t mentioned in the ODD definition are considered inside of the ODD definition, but irrelevant for testing purposes. To be more specific, the non-mentioned attributes are considered as not affecting ADS performance. In the context of ODD-based search, this acts similarly to Permissive mode.  

Example 5:

MODE: DEFAULT

INCLUDE "Dynamic elements" is [all]
INCLUDE "Scenery" is [all]

INCLUDE "Illumination" is [all]
INCLUDE "ParticulatesType" is [all]
INCLUDE "Weather" is [all]

Explanation:

  • The system with this ODD can handle all dynamic elements (other vehicles) and all scenery elements

  • Considering environmental elements:

    • The system can handle all kinds of illumination, all types of particulates, and all weather conditions

    • Connectivity isn’t mentioned in this ODD definition. Therefore, in default mode, it’s assumed that the system can handle all types of connectivity, but that it won’t affect ADS performance, and doesn’t need to be explicitly tested as part of the system deployment.

Conditional Statements

Conditional statements are used when the inclusion or exclusion of attributes depends on other attributes. As one example, you could use conditional statements to write part of the ODD for a system which can’t handle snowfall on a motorway, but can handle snowfall on any other road type.

Example 6:

CONDITIONAL IF 'Illumination' is ['IlluminationDay']:
	INCLUDE 'Drivable area type' is ['Motorways']

CONDITIONAL IF "Drivable area surface type" is ["Gravel", "Segmented"]:
    EXCLUDE "DrivableAreaSurfaceCondition" are ["Flooded roadways", "Snow on drivable area"]

Explanation:

This is a small snippet of a larger ODD definition.

  • This system can only handle motorways if it is also daytime

  • If the system is on gravel or segmented roads, it cannot also handle those roads being flooded or snow-covered at the same time.

Conditional statements are useful for including or excluding edge cases, caused by unusual or uncommon combinations of attributes.

Ranges

Instead of listing elements directly, ranges can also be used to express values. Units can be found on the Search Page.

Examples:

  • EXCLUDE "LongitudinalUpSlope" is [15:-]

    • This excludes any slopes above 15 degrees

  • EXCLUDE "Lane dimensions" are [0:2.0]

    • This excludes any lanes between 0 and 2m wide

  • INCLUDE "Number of lanes" is [1:4]

    • This allows 1, 2, 3 or 4 lanes. 5 or more lanes are implicitly excluded.

Formatting

  • Single or double quotes can be used for attribute names: 'Snowfall' , “Rainfall"

  • is  and are  can be used interchangeably in Include and Exclude statements:

    • INCLUDE '...' is [...]

    • INCLUDE "..." are [...]

How to write an ODD definition

If you’re writing an ODD definition in this format for an existing system - for example, in order to search for relevant test scenarios - you should already know its capabilities and limitations. As a rough guide, here is one method for taking an existing ODD definition and converting it into this format.

Converting an ODD definition

  1. Firstly, assess what your definition looks like. This is important for choosing the mode in which the ODD will be written.

    1. If your system has a very capable ODD, with only a small number of restrictions, then Permissive mode will be easier. For this, you will only write Exclude statements for elements that the ADS cannot handle.

    2. If your system has a limited ODD, that can only handle a relatively small set of conditions, it makes sense to use the Restrictive mode, and only add Include statements for all elements that the ADS can handle.  

    3. Similarly, if your system has a limited ODD, but will only ever expect to be in a subset of environments, then Default mode is the better option

      Default vs. Permissive Mode

      In both Default and Permissive mode, it is implicitly assumed that, for any elements not mentioned in the ODD definition, that the system, if encountering these elements, can handle them. However, in Default mode, it’s assumed that these non-mentioned elements are irrelevant for testing purposes - that is, they may be elements that the ADS will never encounter.

      As an example:

      • A capable ODD for automated driving in a range of situations, but prohibited on motorways, should write an ODD definition using Restrictive mode, and not mention motorways. This implies that the system cannot handle motorways, but should be tested on them, to see how they respond in a motorway environment.

      • An ODD for an automated micromobility shuttle, geofenced for use in a town centre, cannot handle motorways. However, as this shuttle will never find itself on a motorway, even as an edge case, it’s appropriate to use Default mode for the ODD definition. In a Default mode, motorways wouldn’t be mentioned anywhere in the definition. This implies that the system does not need to be tested in a motorway environment.

      • Default mode can also be used to explicitly include and exclude elements

  2. For Restrictive and Default mode:

    1. Take a list of all elements that your system can handle. These are the elements that are inside your ODD

    2. Group these into siblings according to the taxonomy available on the Search Page, making a note whenever all attributes from one parent are included, and note the parent of these groups

    3. Write each of these groups as a single inclusion:

      1. INCLUDE "Parent 1" is ["Sibling 1", "Sibling 2", ... ,"Sibling X"]

      2. INCLUDE "Parent 2" is [all]

  3. For Permissive and Default mode:

    1. Take a list of all elements that your system cannot handle. These are outside of your ODD

    2. Group these into siblings and note their parents, as described above

    3. Write each of these groups as an exclusion:

      1. EXCLUDE "Parent 1" is ["Sibling 1", "Sibling 2", ... ,"Sibling X"]

      2. EXCLUDE "Parent 2" is [all]

  4. For any outliers, or situations that haven’t been covered, these can often be written as conditional statements:

    • Conditional Inclusions:

      • This system can only handle ElementB when ElementA is present

      • This system can only handle ElementB1 or ElementB2 in the context of  ElementA1

      • CONDITIONAL IF "ParentA" is ["ElementA"]:  

        INCLUDE "ParentB" is ["ElementB1", "ElementB2"]

      • Example: This system can only handle trucks and vans when they are on a motorway, slip road, or distributor road.

        • CONDITIONAL IF "DrivableAreaType" is ["Motorways"]:  

          INCLUDE "Vehicle" is ["VehicleTruck", "VehicleVan"]

    • Conditional Exclusions:

      • This system cannot handle ElementB when ElementA is also present

      • CONDITIONAL IF "ParentA" is ["ElementA"]:  

        EXCLUDE "ParentB" is ["ElementB1", "ElementB2"]

      • Example: The system cannot handle icy surfaces on slopes greater than 15 degrees:

      • CONDITIONAL IF "LongitudinalUpSlope" is [15:-]:

        EXCLUDE "DrivableAreaSurfaceCondition" is ["Icy"]

Once you’ve written out the ODD definition, you can then use it to search for scenarios. There’s more information on that available here: Searching by ODD.

Validating an ODD definition

In order to check the syntax - the keywords and structure - of the ODD definition you’ve written, you can try to search with it, and if there are errors in the text, a red box will appear, saying there’s a validation error.

This usually just means you’ve mistyped a keyword, or missed some punctuation.

By clicking ‘View Error Details’, the website will show more specifically which line and column (the location of the character in the line) caused the error.

Here, it flags the fact that ‘INCLUDE’ isn’t spelled correctly.

Conclusion

You should now be able to write an ODD definition for your ADS, and check it for errors.

To see exactly how to search for scenarios on Safety Poolusing it, see this guide: Searching by ODD.

Need more support?

If this guidance doesn’t address your specific use case, please contact SafetyPoolSCDB@warwick.ac.uk for personalised support.