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:
|
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. | |
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:
|
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
alljunctions refers to intersections and roundabouts, as these are the children ofJunctionslisted 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"isandarecan 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
Firstly, assess what your definition looks like. This is important for choosing the mode in which the ODD will be written.
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.
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.
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
For Restrictive and Default mode:
Take a list of all elements that your system can handle. These are the elements that are inside your ODD
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
Write each of these groups as a single inclusion:
INCLUDE "Parent 1" is ["Sibling 1", "Sibling 2", ... ,"Sibling X"]INCLUDE "Parent 2" is [all]
For Permissive and Default mode:
Take a list of all elements that your system cannot handle. These are outside of your ODD
Group these into siblings and note their parents, as described above
Write each of these groups as an exclusion:
EXCLUDE "Parent 1" is ["Sibling 1", "Sibling 2", ... ,"Sibling X"]EXCLUDE "Parent 2" is [all]
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
ElementBwhenElementAis presentThis system can only handle
ElementB1orElementB2in the context ofElementA1CONDITIONAL 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
ElementBwhenElementAis also presentCONDITIONAL 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.
|
|
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 Pool™ using 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.
.png)
.png)
.png)
.png)
.png)