Commit d05b13c6 authored by William Whyte's avatar William Whyte
Browse files

Consistent with 2020-09-08 version of 103 300-3

parent 2c8860fb
Loading
Loading
Loading
Loading
+274 −51
Original line number Original line Diff line number Diff line
-- ETSI TS 103 300-3 V0.4.0 (2020-07)

VAM-PDU-Descriptions {itu-t(0) identified-organization(4) etsi(0) itsDomain(5)
VAM-PDU-Descriptions {itu-t(0) identified-organization(4) etsi(0) itsDomain(5)
    wg1(1) ts(103300) vam(3) version(1)}
    wg1(1) ts(103300) part-3 (3) vam(1) version(1)}
DEFINITIONS AUTOMATIC TAGS ::=
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
BEGIN


    IMPORTS
    IMPORTS
	ItsPduHeader, ReferencePosition, AccelerationControl,
    Curvature, CurvatureCalculationMode, ExteriorLights, Heading,
	    Heading, HeadingValue, Speed, StationID, VehicleLength, VehicleWidth,
    LanePosition, LateralAcceleration,
	    PathHistory, ProtectedCommunicationZone, PtActivation,
    LongitudinalAcceleration, PathHistory, ReferencePosition, Speed,
	    Latitude, Longitude, ProtectedCommunicationZonesRSU
    StationID, SteeringWheelAngle, VerticalAcceleration, YawRate
    FROM ITS-Container {itu-t(0) identified-organization(4) etsi(0)
    FROM ITS-Container {itu-t(0) identified-organization(4) etsi(0)
        itsDomain(5) wg1(1) ts(102894) cdd(2) version(2)}
        itsDomain(5) wg1(1) ts(102894) cdd(2) version(2)}


@@ -15,88 +17,309 @@ BEGIN
    FROM CAM-PDU-Descriptions {itu-t(0) identified-organization(4) etsi(0)
    FROM CAM-PDU-Descriptions {itu-t(0) identified-organization(4) etsi(0)
        itsDomain(5) wg1(1) en(302637) cam(2) version(2)}
        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 {
    VAM ::= SEQUENCE {
        header ItsPduHeaderVam,
        header ItsPduHeaderVam,
        vam    VruAwareness
        vam    VruAwareness
    }
    }


    -- contains StationId
    -- StationId should change when certificate changes, or when VRU
    -- enters or leaves a cluster (as leader or otherwise)
    ItsPduHeaderVam ::= ItsPduHeader(WITH COMPONENTS {
    ItsPduHeaderVam ::= ItsPduHeader(WITH COMPONENTS {
        ...,
        ...,
        messageID(vam)
        messageID(vam)
    })
    })


    VruAwareness ::= SEQUENCE {
    VruAwareness ::= SEQUENCE {
        generationDeltaTime  GenerationDeltaTime,
        generationDeltaTime  GenerationDeltaTime, -- from CAM-PDU-Descriptions
        vamParameters        VamParameters,
        vamParameters        VamParameters 
        vamExtensions        SEQUENCE (SIZE(0..MAX)) OF VamExtension
    }
    }


    VamParameters ::= SEQUENCE {
    VamParameters ::= SEQUENCE {
        activeProfile      VruProfileId,
        basicContainer                 BasicContainer, -- from VAM-Temp-Imports
        physicalProperties VruPhysicalProperties,
        vruHighFrequencyContainer      VruHighFrequencyContainer OPTIONAL, 
        dyanmicProperties  VruDynamicProperties,
        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,
        ...
        ...
    }
    }


    VruProfileId ::= ENUMERATED { 
    OffRoadLanePosition ::= ENUMERATED {
        pedestrian(1), lowSpeedTwoWheel(2), fullSpeedTwoWheel(3), animal(4), ...
        unavailable(0), sidewalk(1), parkingLane(2), bikeLane(3), 
        max(15)
    }
    }


    VruPhysicalProperties ::= CHOICE {
    TrafficIslandPosition ::= SEQUENCE {
        singleVruPhysInfo   SingleVruPhysicalInfo,
        oneSide    NonIslandLanePosition,
        clusterPhysInfo     VruClusterPhysicalInfo,
        otherSide  NonIslandLanePosition
    }
  
    NonIslandLanePosition ::= CHOICE {
        offRoadLanePosition    OffRoadLanePosition,
        vehicularLanePosition  LanePosition, -- from ITS-Container
        mapPosition            MapPosition,
        ...
        ...
    }
    }


    SingleVruPhysicalInfo ::= SEQUENCE {
    MapPosition ::= SEQUENCE {
        referencePoint     ReferencePosition,
        intersectionId    IntersectionReferenceID,
        orientation        Heading,
        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,
        clusterJoinInfo     ClusterJoinInfo OPTIONAL,
        clusterExitInfo    StationID OPTIONAL,
        clusterLeaveInfo    ClusterLeaveInfo OPTIONAL,
        clusterBreakupInfo  ClusterBreakupInfo OPTIONAL,
        clusterIdChangeInfo VruClusterOpTimestamp OPTIONAL,
        ...
        ...
    }
    }


    VruClusterOpTimestamp ::= INTEGER (1..255)

    ClusterJoinInfo ::= SEQUENCE {
    ClusterJoinInfo ::= SEQUENCE {
        clusterId       StationID,
        clusterId       ClusterId,
        countdown       INTEGER(0..7),
        joinTime        VruClusterOpTimestamp,
        ...
    }

    ClusterLeaveInfo ::= SEQUENCE {
        clusterId               ClusterId,
        clusterLeaveReason      ClusterLeaveReason,
        ...
        ...
    }
    }


    VruClusterPhysicalInfo ::= SEQUENCE {
    ClusterBreakupInfo ::= SEQUENCE {
        referencePoint     ReferencePosition, -- middle of front edge of cluster
        clusterBreakupReason  ClusterBreakupReason,
        heading            HeadingValue, -- direction of perp. line through referencePoint
        breakupTime           VruClusterOpTimestamp,
        width              VruClusterSideLength, -- width (with referencePoint in the
                                                 -- middle) in units of 10 cm
        length             VruClusterSideLength, -- length (from referencePoint to rear of 
                                                 -- cluster) in units of 10 cm
        number             INTEGER(0..255), -- 0 means unknown
        ...
        ...
    }
    }


    VruClusterSideLength ::= INTEGER {tenCentimeters(1), outOfRange(61), unavailable(62)} (1..62)
    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)                                                                 
    }


    -- none of these fields are OPTIONAL as each of the types below has an "unknown" value, which
    VruMotionPredictionContainer ::= SEQUENCE {
    -- should be used if the value isn't provided.
        pathHistory                    PathHistory OPTIONAL,
    VruDynamicProperties ::= SEQUENCE {
        pathPrediction                 PathPrediction OPTIONAL,
        heading                  Heading,
        safeDistance                   SequenceOfVruSafeDistanceIndication OPTIONAL,
        speed                    Speed,
        trajectoryChangeIndication     SequenceOfTrajectoryInterceptionIndication OPTIONAL,
        longitudinalAcceleration LongitudinalAcceleration,
        accelerationChangeIndication   AccelerationChangeIndication OPTIONAL,
        laterialAcceleration     LateralAcceleration,
        headingChangeIndication        HeadingChangeIndication OPTIONAL,
        verticalAcceleration     VerticalAcceleration,
        stabilityChangeIndication      StabilityChangeIndication OPTIONAL,
        yawRate                  YawRate,
        pastLocations            PathHistory,
        predictedLocations       PathHistory,
        ...
        ...
    }
    }


    VamExtension ::= CHOICE {
    PathPrediction ::= PathHistory
        dummy        NULL,

    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
END
+11 −3
Original line number Original line Diff line number Diff line
-- This module defines types that are intended to be updated within 
-- Note: This module defines types that are intended to be updated within 
-- or added to the Common Data Dictionary. Defining the types in this
-- or added to the Common Data Dictionary. Defining the types in this
-- module allows them to be used by the VAM before the CDD has been
-- module allows them to be used by the VAM before the CDD has been
-- updated. Once the CDD has been updated, this module will also be 
-- updated. Once the CDD has been updated, this module will also be 
@@ -14,7 +14,7 @@ BEGIN


IMPORTS
IMPORTS


ReferencePosition, SpeedConfidence, VehicleWidth
ReferencePosition, SpeedConfidence, StationID, VehicleWidth
FROM ITS-Container 
FROM ITS-Container 
  {itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) 
  {itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) 
   ts (102894) cdd (2) version (2)}
   ts (102894) cdd (2) version (2)}
@@ -23,7 +23,7 @@ NodeOffsetPointXY, Offset-B10, Offset-B11, Offset-B12, Offset-B13,
Offset-B14, Offset-B16
Offset-B14, Offset-B16
FROM DSRC 
FROM DSRC 
  {iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) 
  {iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) 
   version2 (2)}
   version (2)}


;
;


@@ -34,6 +34,14 @@ BasicContainer ::= SEQUENCE {
    ...
    ...
}
}


ItsPduHeader ::= SEQUENCE {
    protocolVersion INTEGER (0..255),
    messageID INTEGER{ denm(1), cam(2), poi(3), spatem(4), mapem(5), ivim(6), ev-rsr(7), tistpgtransaction(8), srem(9), ssem(10), evcsn(11), saem(12), rtcmem(13), vam(14) } (0..255),  -- Mantis #7209, #7005
    stationID StationID
}





AreaCircular ::= SEQUENCE {
AreaCircular ::= SEQUENCE {
    nodeCenterPoint      OffsetPoint OPTIONAL,
    nodeCenterPoint      OffsetPoint OPTIONAL,