-- ETSI TS 103 300-3 V0.4.0 (2020-07) VAM-PDU-Descriptions {itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(103300) part-3 (3) vam(1) version(1)} DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Curvature, CurvatureCalculationMode, ExteriorLights, Heading, LanePosition, LateralAcceleration, LongitudinalAcceleration, PathHistory, ReferencePosition, Speed, StationID, SteeringWheelAngle, VerticalAcceleration, YawRate FROM ITS-Container {itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(102894) cdd(2) version(2)} GenerationDeltaTime FROM CAM-PDU-Descriptions {itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) en(302637) cam(2) version(2)} -- Note: sVAM-Temp-Imports defines types that are intended to be updated within -- or added to the Common Data Dictionary. Once the CDD has been updated, -- VAM-Temp-Imports will also be updated to import the new types directly -- from the CDD. The use of WITH SUCCESSORS ensures that the import -- statement below will not have to change. AreaCircular, AreaPolygon, AreaRectangle, BasicContainer, ItsPduHeader FROM VAM-Temp-Imports {itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(103300) part-3(3) temp-imports(255) version(1)} IntersectionReferenceID, LaneID FROM DSRC {iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version (2)} ; VAM ::= SEQUENCE { header ItsPduHeaderVam, vam VruAwareness } ItsPduHeaderVam ::= ItsPduHeader(WITH COMPONENTS { ..., messageID(vam) }) VruAwareness ::= SEQUENCE { generationDeltaTime GenerationDeltaTime, -- from CAM-PDU-Descriptions vamParameters VamParameters } VamParameters ::= SEQUENCE { basicContainer BasicContainer, -- from VAM-Temp-Imports vruHighFrequencyContainer VruHighFrequencyContainer OPTIONAL, vruLowFrequencyContainer VruLowFrequencyContainer OPTIONAL, vruClusterInformationContainer VruClusterInformationContainer OPTIONAL, vruClusterOperationContainer VruClusterOperationContainer OPTIONAL, vruMotionPredictionContainer VruMotionPredictionContainer OPTIONAL, ... } VruProfile ::= ENUMERATED { unavailable(0), pedestrian(1), cyclist(2), motorcyclist(3), animal(4), max(15) } VruHighFrequencyContainer ::= SEQUENCE { heading Heading, -- from ITS-Container speed Speed, -- from ITS-Container longitudinalAcceleration LongitudinalAcceleration, -- from ITS-Container curvature Curvature OPTIONAL, -- from ITS-Container curvatureCalculationMode CurvatureCalculationMode OPTIONAL, -- from ITS-Container yawRate YawRate OPTIONAL, -- from ITS-Container lateralAcceleration LateralAcceleration OPTIONAL, -- from ITS-Container verticalAcceleration VerticalAcceleration OPTIONAL, -- from ITS-Container vruLanePosition VruLanePosition OPTIONAL, environment VruEnvironment OPTIONAL, movementControl VruMovementControl OPTIONAL, orientation VruOrientation OPTIONAL, rollAngle VruRollAngle OPTIONAL, deviceUsage VruDeviceUsage OPTIONAL, ... } VruLanePosition ::= CHOICE { offRoadLanePosition OffRoadLanePosition, vehicularLanePosition LanePosition, -- from ITS-Container trafficIslandPosition TrafficIslandPosition, mapPosition MapPosition, ... } OffRoadLanePosition ::= ENUMERATED { unavailable(0), sidewalk(1), parkingLane(2), bikeLane(3), max(15) } TrafficIslandPosition ::= SEQUENCE { oneSide NonIslandLanePosition, otherSide NonIslandLanePosition } NonIslandLanePosition ::= CHOICE { offRoadLanePosition OffRoadLanePosition, vehicularLanePosition LanePosition, -- from ITS-Container mapPosition MapPosition, ... } MapPosition ::= SEQUENCE { intersectionId IntersectionReferenceID, lane LaneID } VruEnvironment ::= ENUMERATED { unavailable (0), intersectionCrossing(1), zebraCrossing(2), sidewalk (3), onVehicleRoad(4), protectedGeographicArea(5), max (255) -- values 6-254 reserved for later use } VruMovementControl ::= ENUMERATED { unavailable (0), braking(1), hardBraking(2), stopPedaling (3), noReaction(4), max (255) -- values 5-254 reserved for later use } VruOrientation ::= Heading -- from ITS-Container VruRollAngle ::= SteeringWheelAngle -- from ITS-Container VruDeviceUsage ::= ENUMERATED { unavailable(0), other(1), idle(2), listeningToAudio(3), typing(4), calling(5), playingGames(6), reading(7), viewing(8), max(255) -- values 9-254 reserved for later use } VruLowFrequencyContainer ::= SEQUENCE { profileAndSubprofile VruProfileAndSubprofile OPTIONAL, exteriorLights VruExteriorLights OPTIONAL, sizeClass VruSizeClass OPTIONAL, ... } VruProfileAndSubprofile ::= CHOICE { pedestrian VruSubProfilePedestrian, bicyclist VruSubProfileBicyclist, motorcylist VruSubProfileMotorcyclist, animal VruSubProfileAnimal, ... } VruSubProfilePedestrian ::= ENUMERATED { unavailable(0), ordinary-pedestrian(1), road-worker(2), first-responder(3), max(15) } VruSubProfileBicyclist ::= ENUMERATED { unavailable(0), bicyclist(1), wheelchair-user(2), horse-and-rider(3), rollerskater(4), e-scooter(5), personal-transporter(6), pedelec(7), speed-pedelec(8), max(15) } VruSubProfileMotorcyclist ::= ENUMERATED { unavailable(0), moped(1), motorcycle(2), motorcycle-and-sidecar-right(3), motorcycle-and-sidecar-left(4), max(15) } VruSubProfileAnimal ::= ENUMERATED { unavailable(0), max(15) } VruExteriorLights ::= SEQUENCE { vruSpecific VruSpecificExteriorLights, -- defined below generic ExteriorLights -- should be extensible? } VruSpecificExteriorLights ::= BIT STRING { unavailable (0), backFlashLight (1), helmetLight (2), armLight (3), legLight (4), wheelLight (5) } (SIZE(8)) VruSizeClass ::= ENUMERATED { unavailable (0), low(1), medium(2), high (3), max(15) -- values 4-14 reserved for later use } VruClusterInformationContainer ::= SEQUENCE { clusterId ClusterId, clusterBoundingBoxShape ClusterBoundingBoxShape, clusterCardinalitySize INTEGER(0..255), -- 0 means unknown clusterProfiles ClusterProfiles, ... } ClusterId ::= INTEGER(0..255) ClusterBoundingBoxShape::= CHOICE { clusterRectangle AreaRectangle, -- from VAM-Temp-Imports clusterCircle AreaCircular, -- from VAM-Temp-Imports clusterPolygon AreaPolygon, -- from VAM-Temp-Imports ... } ClusterProfiles ::= BIT STRING { pedestrian(0), bicyclist(1), motorcyclist(2), animal(3) } (SIZE(4)) -- this is OPTIONAL elements rather than a CHOICE because a -- VRU ITS-S could be leaving one cluster and joining another. VruClusterOperationContainer ::= SEQUENCE { clusterJoinInfo ClusterJoinInfo OPTIONAL, clusterLeaveInfo ClusterLeaveInfo OPTIONAL, clusterBreakupInfo ClusterBreakupInfo OPTIONAL, clusterIdChangeInfo VruClusterOpTimestamp OPTIONAL, ... } VruClusterOpTimestamp ::= INTEGER (1..255) ClusterJoinInfo ::= SEQUENCE { clusterId ClusterId, joinTime VruClusterOpTimestamp, ... } ClusterLeaveInfo ::= SEQUENCE { clusterId ClusterId, clusterLeaveReason ClusterLeaveReason, ... } ClusterBreakupInfo ::= SEQUENCE { clusterBreakupReason ClusterBreakupReason, breakupTime VruClusterOpTimestamp, ... } ClusterLeaveReason ::= ENUMERATED { notProvided (0), clusterLeaderLost (1), clusterDisbandedByLeader (2), outOfClusterBoundingBox (3), outOfClusterSpeedRange (4), joiningAnotherCluster (5), max(15) } ClusterBreakupReason ::= ENUMERATED { notProvided (0), clusteringPurposeCompleted (1), leaderMovedOutOfClusterBoundingBox (2), joiningAnotherCluster (3), max(15) } VruMotionPredictionContainer ::= SEQUENCE { pathHistory PathHistory OPTIONAL, pathPrediction PathPrediction OPTIONAL, safeDistance SequenceOfVruSafeDistanceIndication OPTIONAL, trajectoryChangeIndication SequenceOfTrajectoryInterceptionIndication OPTIONAL, accelerationChangeIndication AccelerationChangeIndication OPTIONAL, headingChangeIndication HeadingChangeIndication OPTIONAL, stabilityChangeIndication StabilityChangeIndication OPTIONAL, ... } PathPrediction ::= PathHistory SequenceOfVruSafeDistanceIndication ::= SEQUENCE(SIZE(0..8)) OF VruSafeDistanceIndication VruSafeDistanceIndication ::= SEQUENCE { subjectStation StationID OPTIONAL, stationSafeDistanceIndication BOOLEAN, timeToCollision ActionDeltaTime OPTIONAL, ... } SequenceOfTrajectoryInterceptionIndication ::= SEQUENCE (SIZE(1..8)) OF TrajectoryInterceptionIndication TrajectoryInterceptionIndication ::= SEQUENCE { subjectStation StationID OPTIONAL, trajectoryInterceptionIndication BOOLEAN } HeadingChangeIndication ::= SEQUENCE { direction LeftOrRight, actionDeltaTime ActionDeltaTime } LeftOrRight ::= ENUMERATED { left, right } ActionDeltaTime ::= INTEGER {zero(0), hundredMs(1), twoHundredMs(2), unavailable (127) } (0..127) AccelerationChangeIndication ::= SEQUENCE { accelOrDecel AccelOrDecel, actionDeltaTime ActionDeltaTime } AccelOrDecel ::= ENUMERATED { accelerate, decelerate } StabilityChangeIndication ::= SEQUENCE { lossProbability StabilityLossProbability, actionDeltaTime ActionDeltaTime } StabilityLossProbability ::= INTEGER { zero(0), twoPercent (1), fourPercent(2), unavailable (63) } (0..63) END