Read driving scenario into model
Automated Driving Toolbox / Driving Scenario and Sensor Modeling
The Scenario Reader block reads the roads and actors from a scenario file
created using the Driving Scenario
Designer app or from a drivingScenario
object. The block outputs the
poses of actors in either the coordinate system of the ego vehicle or the world coordinates of
the scenario. You can also output the lane boundaries or output the ego vehicle pose for use
in the 3D simulation environment.
To generate object and lane boundary detections from output actor poses and lane boundaries, pass the pose and boundary outputs to sensor blocks. Use the synthetic detections generated from these sensors to test the performance of sensor fusion algorithms, tracking algorithms, and other automated driving assistance system (ADAS) algorithms. To visualize the performance of these algorithms, use the Bird's-Eye Scope.
You can read the ego vehicle from the scenario or specify an ego vehicle defined in your model as an input to the Scenario Reader block. Use this option to test closed-loop vehicle controller algorithms, such as autonomous emergency braking (AEB), lane keeping assist (LKA), or adaptive cruise control (ACC).
The Scenario Reader block does not read sensor data from scenario files saved from the Driving Scenario Designer app. To reproduce sensors in Simulink®, in the app, open the scenario file that contains the sensors. Then, from the app toolstrip, select Export > Export Sensor Simulink Model. Copy the generated sensor blocks into an existing model. Alternatively, select Export > Export Simulink Model and start a new model from the generated Scenario Reader block and sensor blocks.
Large road networks, including OpenDRIVE® road networks, can take up to several minutes to read into models.
Ego Vehicle
— Ego vehicle poseEgo vehicle pose, specified as a Simulink bus containing a MATLAB structure.
The structure must have these fields.
Field | Description |
---|---|
ActorID | Scenario-defined actor identifier, specified as a positive integer. |
Position | Position of actor, specified as a real-valued vector of the form [x, y, z]. Units are in meters. |
Velocity | Velocity (v) of actor in the x-, y-, and z-direction, specified as a real-valued vector of the form [vx, vy, vz]. Units are in meters per second. |
Roll | Roll angle of actor, specified as a real-valued scalar. Units are in degrees. |
Pitch | Pitch angle of actor, specified as a real-valued scalar. Units are in degrees. |
Yaw | Yaw angle of actor, specified as a real-valued scalar. Units are in degrees. |
AngularVelocity | Angular velocity (ω) of actor in the x-, y-, and z-direction, specified as a real-valued vector of the form [ωx, ωy, ωz]. Units are in degrees per second. |
Output the ego vehicle pose when you are converting actors from ego vehicle coordinates to world coordinates for use in the 3D simulation environment. For example, see Visualize Sensor Data from Unreal Engine Simulation Environment.
To enable this port, set these parameters in this order:
Set Coordinate system of actors output to
Vehicle coordinates
.
Set Source of ego vehicle to Input
port
.
Actors
— Scenario actor posesScenario actor poses, returned as a Simulink bus containing a MATLAB structure.
The structure has these fields.
Field | Description | Type |
---|---|---|
NumActors | Number of actors | Nonnegative integer |
Time | Current simulation time | Real-valued scalar |
Actors | Actor poses | NumActors -length array of actor pose structures |
Each actor pose structure in Actors
has these fields.
Field | Description |
---|---|
ActorID | Scenario-defined actor identifier, specified as a positive integer. |
Position | Position of actor, specified as a real-valued vector of the form [x, y, z]. Units are in meters. |
Velocity | Velocity (v) of actor in the x-, y-, and z-direction, specified as a real-valued vector of the form [vx, vy, vz]. Units are in meters per second. |
Roll | Roll angle of actor, specified as a real-valued scalar. Units are in degrees. |
Pitch | Pitch angle of actor, specified as a real-valued scalar. Units are in degrees. |
Yaw | Yaw angle of actor, specified as a real-valued scalar. Units are in degrees. |
AngularVelocity | Angular velocity (ω) of actor in the x-, y-, and z-direction, specified as a real-valued vector of the form [ωx, ωy, ωz]. Units are in degrees per second. |
The pose of the ego vehicle is excluded from the Actors
array.
To return actor poses from the block, you must run the entire driving scenario simulation to completion.
Lane Boundaries
— Scenario lane boundariesScenario lane boundaries, returned as a Simulink bus containing a MATLAB structure.
The structure has these fields.
Field | Description | Type |
---|---|---|
NumLaneBoundaries | Number of lane boundaries | Nonnegative integer |
Time | Current simulation time | Real scalar |
LaneBoundaries | Lane boundaries | NumLaneBoundaries -length array of lane boundary structures |
Each lane boundary structure in LaneBoundaries
has these
fields.
Field | Description |
| Lane boundary coordinates, specified as a real-valued N-by-3 matrix, where N is the number of lane boundary coordinates. Lane boundary coordinates define the position of points on the boundary at specified longitudinal distances away from the ego vehicle, along the center of the road.
This matrix also includes the boundary coordinates at zero distance from the ego vehicle. These coordinates are to the left and right of the ego-vehicle origin, which is located under the center of the rear axle. Units are in meters. |
| Lane boundary curvature at each row of the Coordinates matrix, specified
as a real-valued N-by-1 vector. N is the
number of lane boundary coordinates. Units are in radians per meter. |
| Derivative of lane boundary curvature at each row of the Coordinates
matrix, specified as a real-valued N-by-1 vector.
N is the number of lane boundary coordinates. Units are
in radians per square meter. |
| Initial lane boundary heading angle, specified as a real scalar. The heading angle of the lane boundary is relative to the ego vehicle heading. Units are in degrees. |
| Distance of the lane boundary from the ego vehicle position, specified as a real scalar. An offset to a lane boundary to the left of the ego vehicle is positive. An offset to the right of the ego vehicle is negative. Units are in meters. |
| Type of lane boundary marking, specified as one of these values:
|
| Saturation strength of the lane boundary marking, specified as a real scalar from 0 to
1. A value of |
| Lane boundary width, specified as a positive real scalar. In a double-line lane marker, the same width is used for both lines and for the space between lines. Units are in meters. |
| Length of dash in dashed lines, specified as a positive real scalar. In a double-line lane marker, the same length is used for both lines. |
| Length of space between dashes in dashed lines, specified as a positive real scalar. In a dashed double-line lane marker, the same space is used for both lines. |
The number of returned lane boundary structures depends on the Lane boundaries to output parameter value.
To enable this port, set these parameters in this order:
Set Coordinate system of actors output to
Vehicle coordinates
.
Set Lane boundaries to output to Ego
lane boundaries
or All lane
boundaries
.
Ego Vehicle
— Ego vehicle poseEgo vehicle pose, returned as a Simulink bus containing a MATLAB structure.
The structure must contain these fields.
Field | Description |
---|---|
ActorID | Scenario-defined actor identifier, specified as a positive integer. |
Position | Position of actor, specified as a real-valued vector of the form [x, y, z]. Units are in meters. |
Velocity | Velocity (v) of actor in the x-, y-, and z-direction, specified as a real-valued vector of the form [vx, vy, vz]. Units are in meters per second. |
Roll | Roll angle of actor, specified as a real-valued scalar. Units are in degrees. |
Pitch | Pitch angle of actor, specified as a real-valued scalar. Units are in degrees. |
Yaw | Yaw angle of actor, specified as a real-valued scalar. Units are in degrees. |
AngularVelocity | Angular velocity (ω) of actor in the x-, y-, and z-direction, specified as a real-valued vector of the form [ωx, ωy, ωz]. Units are in degrees per second. |
To enable this port, set these parameters in this order:
Set Coordinate system of actors output to
Vehicle coordinates
.
Set Source of ego vehicle to
Scenario
.
Select Output ego vehicle pose.
Source of driving scenario
— Source of driving scenarioFrom file
(default) | From workspace
Source of driving scenario, specified as one of these options:
From file
— In the Driving Scenario
Designer file name parameter, specify the name of a scenario file that
was saved from the Driving Scenario
Designer app.
From workspace
— In the MATLAB or model
workspace variable name parameter, specify the name of a MATLAB or model workspace variable that contains a drivingScenario
object.
Driving Scenario Designer file name
— Scenario file nameEgoVehicleGoesStraight.mat
(default) | scenario file on MATLAB search path | path to scenario fileScenario file name, specified as a scenario file on the MATLAB search path or as the full path to a scenario file. A scenario file must
be a MAT-file saved from the Driving Scenario
Designer app. If the Source of ego vehicle parameter is set
to Scenario
, then the scenario must contain an ego vehicle.
Otherwise, the block returns an error during simulation.
If the specified scenario file contains sensors, the block ignores them. To include sensors from the scenario in your model, see Tips.
The default scenario file shows an ego vehicle traveling north on a straight, two-lane road, with another vehicle traveling south in the opposite lane.
To add a scenario file to the MATLAB search path, use the addpath
function. For example, this code adds the set of folders
containing prebuilt Euro NCAP® scenarios to the MATLAB search path.
path = fullfile(matlabroot,'toolbox','driving','drivingdata', ... 'PrebuiltScenarios','EuroNCAP'); addpath(genpath(path))
In the Driving Scenario Designer file name parameter, you can
then specify the name of any scenario located in these folders, without having to
specify the full file path. For example:
AEB_PedestrianChild_Nearside_50width.mat
.
When you are done using the scenario in your models, you can remove any added
folders from the MATLAB search path by using the rmpath
function.
rmpath(genpath(path))
To enable this parameter, set Source of driving scenario to
From file
.
MATLAB or model workspace variable name
— Scenario variable namescenario
(default) | drivingScenario
object variable nameScenario variable name, specified as the name of a MATLAB or model workspace variable that contains a valid drivingScenario
object. If a scenario variable with the same name appears in
both the MATLAB and model workspace, the block uses the variable defined in the model
workspace.
If the Source of ego vehicle parameter is set to
Scenario
, then the drivingScenario
object
must contain an ego vehicle. To designate which actor in the object is the ego vehicle,
in the Ego vehicle ActorID parameter, specify the
ActorID
property value of that actor.
When connecting the Actors output port to Radar Detection
Generator and Vision Detection
Generator blocks, update these blocks to obtain the actor profiles directly
from the drivingScenario
object. On the Actor
Profiles tab of each block, set the Select method to
specify actor profiles parameter to MATLAB expression
.
Then, set the MATLAB expression for actor profiles
parameter to call the actorProfiles
function on the object.
For example: actorProfiles(scenario)
.
When connecting the Actors output port to Lidar Point Cloud
Generator blocks, leave the Source of actor profiles
parameter in these blocks set to the default From Scenario Reader
block
. With this option selected, the lidar sensors obtain the actor
profiles directly from the scenario read by the Scenario Reader
block.
The default variable name, scenario
, is the default name of
drivingScenario
objects produced by the MATLAB functions that are exported from the Driving Scenario
Designer app. By default, this variable is not included in the MATLAB or model workspace.
To enable this parameter, set Source of driving scenario to
From workspace
.
Coordinate system of actors output
— Coordinate system of actors outputVehicle coordinates
(default) | World coordinates
Coordinate system of the output actors, specified as one of these values:
Vehicle coordinates
— Coordinates are defined with
respect to the ego vehicle. Select this value when your scenario has only one ego
vehicle.
World coordinates
— Coordinates are defined with
respect to the driving scenario. Select this value in multi-agent scenarios that
contain more than one ego vehicle. If you select this value, model visualization
using the Bird's-Eye
Scope is not supported.
For more details on the vehicle and world coordinate systems, see Coordinate Systems in Automated Driving Toolbox.
Source of ego vehicle
— Source of ego vehicleScenario
(default) | Input port
Source of ego vehicle, specified as one of these options:
Scenario
— Use the ego vehicle defined in the
scenario that is specified by the Driving Scenario Designer file
name or MATLAB or model workspace variable name
parameter. The pose of the ego vehicle is excluded from the
Actors output port. Actor positions are in vehicle
coordinates, meaning that they are relative to the world coordinate position of the
ego vehicle in the scenario.
Select this option to test open-loop ADAS algorithms, where the ego vehicle behavior is predefined and does not change as the scenario advances. For an example, see Test Open-Loop ADAS Algorithm Using Driving Scenario.
Input port
— Specify the ego vehicle by using the
Ego Vehicle input port. The pose of the ego vehicle is not
included in the Actors output port.
With this option, the ego vehicle in your model must include a starting position
that is in world coordinates. All other actor poses are in vehicle coordinates and
are positioned relative to the ego vehicle. For an example of an ego vehicle with
defined position information, see Lane Keeping Assist with Lane Detection. When
defining the starting position of the ego vehicle, consider using the position that
is already defined in the scenario. By using this position, if you set
Source of ego vehicle to Scenario
and then back to Input port
, you do not have to manually
change the starting position.
Select this option to test closed-loop ADAS algorithms, where the ego vehicle reacts to changes as the scenario advances. For an example, see Test Closed-Loop ADAS Algorithm Using Driving Scenario.
To enable this parameter, set Coordinate system of actors
output to Vehicle coordinates
.
Ego vehicle ActorID
— Actor ID of ego vehicle1
(default) | positive integerActor ID of ego vehicle, specified as a positive integer. Use this parameter to
simulate using the ego vehicle that is read from a drivingScenario
object.
When Source of ego vehicle is set to
Scenario
, set this parameter to an
ActorID
value that is stored in the
Actors
property of the specified
drivingScenario
object. To check valid
ActorID
values, use this syntax, where
scenario
is the name of the drivingScenario
variable name.
actorIDs = [scenario.Actors.ActorID]
When Source of ego vehicle is set to Input
Port
, you must set this parameter to the
ActorID
value at the Ego Vehicle input
port of the block.
To enable this parameter, set these parameters in this order:
Set Source of driving scenario to From
workspace
.
Set Coordinate system of actors output to
Vehicle coordinates
.
Output ego vehicle pose
— Output pose of ego vehicleoff
(default) | on
Select this parameter to output the pose of the ego vehicle at the Ego Vehicle port.
To enable this parameter, set Coordinate system of actors
output to Vehicle coordinates
and
Source of ego vehicle to
Scenario
.
Ego vehicle follows ground
— Orient ego vehicle to follow road surfaceoff
(default) | on
Select this parameter to orient the ego vehicle to follow the elevation of the road surface. The block updates the elevation, roll, pitch, and yaw of the ego vehicle and outputs actors and lane boundaries relative to the updated ego vehicle coordinates. The block does not update the velocity or angular velocity of the ego vehicle.
Use this parameter in closed-loop simulations where the elevation of the road network varies.
Note
At the junctions of roads that have different elevations and banking angles, the updated ego vehicle values might not be accurate.
In open-loop simulations, where Source of ego vehicle is set to
Scenario
, the ego vehicle follows the elevation specified
in the driving scenario.
To enable this parameter, set Coordinate system of actors
output to Vehicle coordinates
and
Source of ego vehicle to Input
port
.
Sample time (s)
— Sample time of simulation0.1
(default) | positive real scalarSample time of simulation, in seconds, specified as a positive real scalar.
Inherited and continuous sample times are not supported. This sample time is separate
from the sample times that the Driving Scenario Designer app and
drivingScenario
object use for simulations.
Lane boundaries to output
— Lane boundaries to outputNone
(default) | Ego vehicle lane boundaries
| All lane boundaries
Lane boundaries to output, specified as one of these options:
None
— Do not output any lane boundaries.
Ego vehicle lane boundaries
— Output the left and
right lane boundaries of the ego vehicle.
All lane boundaries
— Output all lane boundaries of
the road on which the ego vehicle is traveling.
If you select Ego vehicle lane boundaries
or
All lane boundaries
, then the block returns the lane
boundaries in the Lane Boundaries output port.
To enable this parameter, set Coordinate system of actors
output to Vehicle coordinates
.
Distances from ego vehicle for computing boundaries (m)
— Distances from ego vehicle at which to compute lane boundarieslinspace(-150,150,101)
(default) | N-element real-valued vectorDistances from the ego vehicle at which to compute the lane boundaries, specified as an N-element real-valued vector. N is the number of distance values. When detecting lanes from rear-facing cameras, specify negative distances. When detecting lanes from front-facing cameras, specify positive distances. Units are in meters.
By default, the block computes 101 lane boundaries over the range from 150 meters behind the ego vehicle to 150 meters ahead of the ego vehicle. These distances are linearly spaced 3 meters apart.
Example: 1:0.1:10
computes a lane boundary every 0.1 meters over
the range from 1 to 10 meters ahead of the ego vehicle.
To enable this parameter, set Lane boundaries to output to
Ego vehicle lane boundaries
or All lane
boundaries
.
Location of boundaries on lane markings
— Lane boundary locationCenter of lane markings
(default) | Inner edge of lane markings
Lane boundary location on the lane markings, specified as one of the options in this table.
Lane Boundary Location | Description | Example |
---|---|---|
Center of lane markings | Lane boundaries are centered on the lane markings. | A three-lane road has four lane boundaries: one per lane marking. |
Inner edge of lane markings | Lane boundaries are placed at the inner edges of the lane markings. | A three-lane road has six lane boundaries: two per lane. |
To enable this parameter, set Lane boundaries to output to
Ego vehicle lane boundaries
or All lane
boundaries
.
Source of actors bus name
— Source of name for actor poses busAuto
(default) | Property
Source of the name for the actor poses bus returned in the Actors output port, specified as one of these options:
Auto
— The block automatically creates an actor poses bus name.
Property
— Specify the actor poses bus name by using the Actors bus name parameter.
Actors bus name
— Name of actor poses busName of the actor poses bus returned in the Actors output port, specified as a valid bus name.
To enable this parameter, set Source of actors bus name to Property
.
Source of lane boundaries bus name
— Source of name for lane boundaries busAuto
(default) | Property
Source of the name for the lane boundaries bus returned in the Lane Boundaries output port, specified as one of these options:
Auto
— The block automatically creates a lane
boundaries bus name.
Property
— Specify the lane boundaries bus name by
using the Lane boundaries bus name parameter.
To enable this parameter, set Lane boundaries to output to
Ego vehicle lane boundaries
or All lane
boundaries
.
Lane boundaries bus name
— Name of lane boundaries busName of the lane boundaries bus returned in the Lane Boundaries output port, specified as a valid bus name.
To enable this parameter:
Set Lane boundaries to output to Ego
vehicle lane boundaries
or All lane
boundaries
.
Set Source of lane boundaries bus name to
Property
.
Source of ego vehicle bus name
— Source of name for ego vehicle pose busAuto
(default) | Property
Source of the name for the ego vehicle pose bus returned in the Ego Vehicle output port, specified as one of these options:
Auto
— The block automatically creates an ego vehicle
pose bus name.
Property
— Specify the ego vehicle pose bus name by
using the Ego vehicle bus name parameter.
To enable this parameter, select the Output ego vehicle pose parameter.
Ego vehicle bus name
— Name of ego vehicle pose busName of the ego vehicle pose bus returned in the Ego Vehicle output port, specified as a valid bus name.
To enable this parameter, select the Output ego vehicle pose
parameter and set Source of ego vehicle bus name to
Property
.
Show coordinate labels
— Display coordinate system of inputs and outputson
(default) | off
Select this parameter to display the coordinate system of block inputs and outputs on the Scenario Reader block in the block diagram.
The Ego Vehicle input and output are always in world coordinates.
The Lane Boundaries output is always in vehicle coordinates.
You can return the Actors output in either vehicle or world coordinates, depending on the Coordinate system of actors output parameter selection.
Simulate using
— Type of simulation to runInterpreted execution
(default) | Code generation
Interpreted execution
— Simulate the model using the
MATLAB interpreter. This option shortens startup time. In Interpreted
execution
mode, you can debug the source code of the block.
Code generation
— Simulate the model using generated C/C++
code. The first time you run a simulation, Simulink generates C/C++ code for the block. The C code is reused for subsequent
simulations as long as the model does not change. This option requires additional startup
time.
For best results, use only one active Scenario Reader block per model. To use multiple Scenario Reader blocks in one model, switch between the blocks by specifying them in a variant subsystem.
To test your algorithm on variations of a driving scenario, you can update the scenario between simulations.
If the source of the scenario is a scenario file, open the scenario file in the Driving Scenario Designer app, update the parameters, and resave the file.
If the source of the scenario is a drivingScenario
object, update the object in the MATLAB or model workspace. Alternatively, import the object into the app,
modify the scenario in the app, and then generate a new object from the app. For
more details, see Create Driving Scenario Variations Programmatically.
To switch between scenarios with different parameter settings, you can use Simulink Test™ software. For an example, see Automate Testing for Highway Lane Following.
Usage notes and limitations:
When a model is in rapid accelerator mode, the Scenario Reader
block does not automatically regenerate code based on changes made to the driving
scenario between simulations. To regenerate these changes, manually delete the
Simulink project folder, slprj
, that was generated from the
previous simulation. Then, rerun the simulation. Alternatively, either change modes or
disable code generation by setting the Simulate using parameter
to Interpreted execution
.
The Driving Scenario Designer file name and MATLAB or model workspace variable name parameters are character vectors. The limitations described in Encoding of Characters in Code Generation (Simulink) apply to these parameters.