Main Content

record

Run tracking scenario and record platform, sensor, and emitter information

Description

rec = record(sc) returns a record, rec, of the evolution of the tracking scenario simulation, sc. The function starts from the beginning of the simulation and stores the record until the end of the simulation. A scenario simulation ends when either the scenario StopTime is reached or any platform in the scenario has finished its trajectory specified by the Trajectory property.

example

rec = record(sc,format) also specifies the format, format, of the returned platform orientation.

rec = record(___,Name,Value) specifies additional recording quantities using name-value pairs. Enclose each Name in quotes.

example

Note

The record function only records detections generated from sensors contained in the scenario and does not record tracks generated from a fusionRadarSensor object contained in the scenario. fusionRadarSensor generates detections when you set its TargetReportFormat property to 'Detetions' or 'Clustered Detections' and generates tracks when you set its TargetReportFormat property to 'Tracks'.

Input Arguments

expand all

Tracking scenario, specified as a trackingScenario object.

Pose orientation format, specified as 'quaternion' or 'rotmat'. When specified as 'quaternion', the Orientation field of the platform pose structure is a quaternion. When specified as 'rotmat', the Orientation field is a rotation matrix.

Example: 'rotmat'

Data Types: char

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Enable recording emission information, specified as true or false. When specified as true, the rec output contains Emissions, EmitterConfigurations, EmitterPlatformIDs, and CoverageConfig fields.

Enable recording sensor information, specified as true or false. When specified as true, the rec output contains Detections, SensorConfiguration, SensorPlatformIDs, and CoverageConfig fields.

Initial random seed for recording, specified as a positive integer. If specified as a positive integer, the function assigns this number to the random number generator "Twister" before the recording and resets the random number generator at the end of the recording.

Enable occlusion in signal transmission, specified as true or false. When specified as true, the function accounts for the effect of occlusion in radar emission propagation.

Format of recording, specified as 'Struct' or 'Recording'. When specified as 'Struct', the rec output is an array of structures. When specified as 'Recording', the rec output is a trackingScenarioRecording object.

Coordinate system to report recorded positions, specified as:

  • 'Cartesian' — Report recorded poses using Cartesian coordinates in the Earth-Centered-Earth-Fixed coordinate frame.

  • 'Geodetic' — Report recorded positions using geodetic coordinates (latitude, longitude, and altitude). Report recorded orientation, velocity, and acceleration in the local reference frame of each platform (North-East-Down by default) corresponding to the current waypoint.

You can only use this argument when the IsEarthCentered property of the tracking scenario, sc, is set to true.

Output Arguments

expand all

Records of platform states during the simulation, returned as an M-by-1 array of structures if the RecordingFormat is specified as 'struct' (default), or a trackingScenarioRecording object if the RecordingFormat is specified as 'Recording'. M is the number of time steps in the simulation. For an example on running a recorded scenario, see Run Recorded Scenario.

Each record contains the simulation time step and the recorded information at that time. The record structure has at least two fields: SimulationTime and Poses. It can also have other optional fields depending on the input.

The SimulationTime field contains the simulation time of the record. Poses is an N-by-1 array of structures, where N is the number of platforms. Each Poses structure contains fields that represent the ground truth state of each platform in the simulation.

FieldDescription
PlatformID

Unique identifier for the platform, specified as a positive integer. This is a required field with no default value.

ClassID

User-defined integer used to classify the type of target, specified as a nonnegative integer. Zero is reserved for unclassified platform types and is the default value.

Position

Position of platform in scenario coordinates, specified as a real-valued 1-by-3 row vector.

  • If the coordinateSystem argument is specified as 'Cartesian', the Position is the 3-element Cartesian position coordinates in meters.

  • If the coordinateSystem argument is specified as 'Geodetic', the Position is the 3-element geodetic coordinates: latitude in degrees, longitude in degrees, and altitude in meters.

Velocity

Velocity of platform in scenario coordinates, specified as a real-valued 1-by-3 row vector. Units are meters per second. The default value is [0 0 0].

Acceleration

Acceleration of the platform in scenario coordinates, specified as a 1-by-3 row vector in meters per second squared. The default value is [0 0 0].

Orientation

Orientation of the platform with respect to the local scenario navigation frame, specified as a scalar quaternion or a 3-by-3 rotation matrix. Orientation defines the frame rotation from the local navigation coordinate system to the current platform body coordinate system. Units are dimensionless. The default value is quaternion(1,0,0,0) or a 3-by-3 identity matrix.

AngularVelocity

Angular velocity of the platform in scenario coordinates, specified as a real-valued 1-by-3 vector. The magnitude of the vector defines the angular speed. The direction defines the axis of clockwise rotation. Units are degrees per second. The default value is [0 0 0].

The optional fields in the rec output are:

FieldDescription
Emissions

A cell array of emissions (such as radarEmission and sonarEmission) in the scenario

EmitterConfigurations

A struct array of emitter configurations for each emitter

EmitterPlatformIDs

A numeric array of platform IDs for each emitter

PointClouds

A cell of point cloud points

PointCloudClusters

A cell array of point cloud clusters

Detections

A cell array of objectDetection objects generated by the sensors in the scenario

SensorConfigurations

A struct array of sensor configurations for each sensor

SensorPlatformIDs

A numeric array of platform IDs for each sensor

CoverageConfig

A struct array of coverage configurations for each sensor or emitter

Each emitter configuration structure contains the following fields:

FieldDescription
EmitterIndex

Unique emitter index, returned as a positive integer.

IsValidTime

Valid emission time, returned as 0 or 1. IsValidTime is 0 when emitter updates are requested at times that are between update intervals specified by the UpdateInterval property.

IsScanDone

Whether the emitter has completed a scan, returned as true or false.

FieldOfView

Field of view of the emitter, returned as a two-element vector [azimuth; elevation] in degrees.

MeasurementParameters

Emitter measurement parameters, returned as an array of structures containing the coordinate frame transforms needed to transform positions and velocities in the top-level frame to the current emitter looking-angle frame.

Each sensor configuration structure contains the following fields:

FieldDescription
SensorIndex

Unique sensor index, returned as a positive integer.

IsValidTime

Valid detection time, returned as true or false. IsValidTime is false when detection updates are requested between update intervals specified by the update rate.

IsScanDone

IsScanDone is true when the sensor has completed a scan.

RangeLimitsLower and upper range detection limits, returned as a two-element real-valued vector in meters.
RangeRateLimitsLower and upper range-rate detection limits, returned as a two-element real-valued vector in m/s.
FieldOfView

Field of view of the sensor, returned as a 2-by-1 vector of positive real values, [azfov;elfov]. azfov and elfov represent the field of view in azimuth and elevation, respectively.

MeasurementParameters

Sensor measurement parameters, returned as an array of structures containing the coordinate frame transforms needed to transform positions and velocities in the top-level frame to the current sensor looking-angle frame.

Each coverage configuration structure contains these fields:

Fields of configurations

FieldDescription
Index A unique integer to identify sensors or emitters.
LookAngle

Current boresight angles of the sensor or emitter, specified as:

  • A scalar in degrees if scanning only in the azimuth direction.

  • A two-element vector [azimuth; elevation] in degrees if scanning in both the azimuth and elevation directions.

FieldOfViewField of view of the sensor or emitter, specified as a two-element vector [azimuth; elevation] in degrees.
ScanLimits

Minimum and maximum angles the sensor or emitter can scan from its Orientation.

  • If the sensor or emitter can only scan in the azimuth direction, specify the limits as a 1-by-2 row vector [minAz, maxAz] in degrees.

  • If the sensor or emitter can also scan in the elevation direction, specify the limits as a 2-by-2 matrix [minAz, maxAz; minEl, maxEl] in degrees.

RangeRange of the beam and coverage area of the sensor or emitter in meters.
PositionOrigin position of the sensor or emitter, specified as a three-element vector [X, Y, Z].
OrientationRotation transformation from the scenario or global frame to the sensor or emitter mounting frame, specified as a rotation matrix, a quaternion, or three Euler angles in ZYX sequence.

Examples

expand all

Create a new scenario and add a platform.

scene = trackingScenario;
plat = platform(scene);

Specify the platform trajectory. The distance of the trajectory is 25 meters. The trajectory velocity is 20 m/s in the x-direction.

plat.Trajectory = waypointTrajectory('Waypoints',[0 0 0; 25 0 0], ...
    'TimeOfArrival', [0 25/20]);

Run simulation and record results.

r = record(scene)
r=13×1 struct array with fields:
    SimulationTime
    Poses

Show the record at the initial time.

r(1)
ans = struct with fields:
    SimulationTime: 0
             Poses: [1x1 struct]

r(1).Poses
ans = struct with fields:
         PlatformID: 1
            ClassID: 0
           Position: [0 0 0]
           Velocity: [20 0 0]
       Acceleration: [0 0 0]
        Orientation: [1x1 quaternion]
    AngularVelocity: [0 0 0]

Show the record at the final time.

r(end)
ans = struct with fields:
    SimulationTime: 1.2000
             Poses: [1x1 struct]

r(end).Poses
ans = struct with fields:
         PlatformID: 1
            ClassID: 0
           Position: [24 0 0]
           Velocity: [20 0 0]
       Acceleration: [0 0 0]
        Orientation: [1x1 quaternion]
    AngularVelocity: [0 0 0]

Load an air traffic control tracking scenario.

load ATCScenario scenario

Run simulation and record results.

r = record(scenario,'quaternion', ...
    'IncludeSensors',true,'InitialSeed',2019);

Show the record at the initial time.

r(1)
ans = struct with fields:
          SimulationTime: 0
                   Poses: [4x1 struct]
              Detections: {0x1 cell}
             PointClouds: {0x1 cell}
      PointCloudClusters: {0x1 cell}
    SensorConfigurations: [1x1 struct]
       SensorPlatformIDs: 1
          CoverageConfig: [1x1 struct]

Show the record at the final time.

r(end)
ans = struct with fields:
          SimulationTime: 59.9947
                   Poses: [4x1 struct]
              Detections: {0x1 cell}
             PointClouds: {0x1 cell}
      PointCloudClusters: {0x1 cell}
    SensorConfigurations: [1x1 struct]
       SensorPlatformIDs: 1
          CoverageConfig: [1x1 struct]

Version History

Introduced in R2018b