V2.1.1 - publication

Merge final version to the master branch

Merge request reports

Loading
+4 −1
Changes for README.md: 4 added lines, 1 removed line.
Original line number Diff line number Diff line
# ASN.1 module for VAM - ETSI TS 103 300-3

This repository contains VRU Awareness Basic Service ETSI TS 103 300-3  Specification of the VRU Awareness Message format.
This repository contains VRU Awareness Basic Service ETSI TS 103 300-3  Specification of the VRU Awareness Message format.
The text of the TS 103 300-1 V2.1.1 can be found using the link https://www.etsi.org/deliver/etsi_ts/103300_103399/10330003/02.01.01_60/ts_10330003v020101p.pdf.

## License

@@ -13,3 +14,5 @@ To compile the VAM, the following dependencies are required:

- **[CAM-PDU-Descriptions](https://forge.etsi.org/rep/ITS/asn1/cam_ts302637_2)** module from [ETSI EN 302 637-2 v1.4.1](https://www.etsi.org/deliver/etsi_en/302600_302699/30263702/01.04.01_60/en_30263702v010401p.pdf) - Cooperative Awareness Service
- **[ITS-Container](https://forge.etsi.org/rep/ITS/asn1/cdd_ts102894_2)** module from [ETSI TS 102 894-2 v1.3.1](https://www.etsi.org/deliver/etsi_ts/102800_102899/10289402/01.03.01_60/ts_10289402v010301p.pdf) - Common Data Dictionary
- **[DSRC, AddGrpC](https://standards.iso.org/iso/ts/19091/)** modules from [ISO TS 19091](https://www.iso.org/standard/69897.html) - for intersection and lane identifiers
- **[ElectronicRegistrationIdentificationVehicleDataModule](https://standards.iso.org/iso/24534/-4/)** module from [ISO TS 24534-3](https://www.iso.org/standard/59306.html)
+298 −47
Changes for VAM-PDU-Descriptions.asn: 298 added lines, 47 removed lines.
Original line number Diff line number Diff line
-- ETSI TS 103 300-3 V0.5.0 (2020-09)

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) vam(1) version1(1)}
DEFINITIONS AUTOMATIC TAGS ::=
BEGIN

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

@@ -15,88 +17,337 @@ BEGIN
    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) temp-imports(255) version1(1)}
        WITH SUCCESSORS

    IntersectionReferenceID, LaneID 
    FROM DSRC {iso (1) standard (0) signalizedIntersection (19091) profilec(2)
        dsrc (2) version (2)}

    ;


    VAM ::= SEQUENCE {
        header ItsPduHeaderVam,
        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 {
        ...,
        messageID(vam)
    })

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

    VamParameters ::= SEQUENCE {
        activeProfile      VruProfileId,
        physicalProperties VruPhysicalProperties,
        dyanmicProperties  VruDynamicProperties,
        basicContainer                 BasicContainer, -- from VAM-Temp-Imports
        vruHighFrequencyContainer      VruHighFrequencyContainer OPTIONAL, 
        vruLowFrequencyContainer       VruLowFrequencyContainer OPTIONAL,
        vruClusterInformationContainer VruClusterInformationContainer OPTIONAL,
        vruClusterOperationContainer   VruClusterOperationContainer OPTIONAL,
        vruMotionPredictionContainer   VruMotionPredictionContainer OPTIONAL,
        ...
    }
 
    VruProfileId ::= ENUMERATED { 
        pedestrian(1), lowSpeedTwoWheel(2), fullSpeedTwoWheel(3), animal(4), ...

    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,
        ...
    }

    VruPhysicalProperties ::= CHOICE {
        singleVruPhysInfo   SingleVruPhysicalInfo,
        clusterPhysInfo     VruClusterPhysicalInfo,
    VruLanePosition ::= CHOICE {
        offRoadLanePosition    OffRoadLanePosition,
        vehicularLanePosition  LanePosition, -- from ITS-Container
        trafficIslandPosition  TrafficIslandPosition,
        mapPosition            MapPosition,
        ...
    }

    SingleVruPhysicalInfo ::= SEQUENCE {
        referencePoint     ReferencePosition,
        orientation        Heading,
    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),
        brakingAndStopPedaling(4), hardBrakingAndStopPedaling (5), 
        noReaction(6),   max (255)
        -- values 7-254 reserved for later use
    }

    VruOrientation ::= Heading -- from ITS-Container

    VruRollAngle ::= Heading -- 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), wild-animal(1), farm-animal(2), service-animal(3),   max(15)
    }

    VruExteriorLights ::= SEQUENCE {
        vruSpecific     VruSpecificExteriorLights, -- defined below
        vehicular         ExteriorLights
    }

    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        ClusterCardinalitySize, -- 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
        ...
    }

    ClusterCardinalitySize   ::= INTEGER {unavailable(0), onlyLeader(1)} (0..255) 

    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,
        clusterExitInfo    StationID OPTIONAL,
        clusterLeaveInfo        ClusterLeaveInfo OPTIONAL,
        clusterBreakupInfo      ClusterBreakupInfo OPTIONAL,
        clusterIdChangeTimeInfo VruClusterOpTimestamp OPTIONAL,
        ...
    }

    VruClusterOpTimestamp ::= INTEGER (1..255)

    ClusterJoinInfo ::= SEQUENCE {
        clusterId       StationID,
        countdown       INTEGER(0..7),
        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),
         cancelledJoin                 (6),
         failedJoin                    (7),
         safetyCondition               (8),
         max(15)            
    }

    ClusterBreakupReason ::= ENUMERATED {
         notProvided                        (0),
         clusteringPurposeCompleted         (1),
         leaderMovedOutOfClusterBoundingBox (2),    
         joiningAnotherCluster              (3),
         enteringLowRiskAreaBasedOnMaps     (4),
         receptionOfCpmContainingCluster    (5),
         max(15)                                                                 
    }

    VruMotionPredictionContainer ::= SEQUENCE {
        pathHistory                      PathHistory OPTIONAL,
        pathPrediction                   SequenceOfVruPathPoint OPTIONAL,
        safeDistance                     SequenceOfVruSafeDistanceIndication OPTIONAL,
        trajectoryInterceptionIndication SequenceOfTrajectoryInterceptionIndication OPTIONAL,
        accelerationChangeIndication     AccelerationChangeIndication OPTIONAL,
        headingChangeIndication          HeadingChangeIndication OPTIONAL,
        stabilityChangeIndication        StabilityChangeIndication OPTIONAL,
        ...
    }

    SequenceOfVruPathPoint ::= SEQUENCE OF VruPathPoint

    VruPathPoint ::=  SEQUENCE {
        pathPosition           ReferencePosition,                   
        pathDeltaTime          PathDeltaTime     OPTIONAL
    }


    SequenceOfVruSafeDistanceIndication ::= 
        SEQUENCE(SIZE(1..8)) OF VruSafeDistanceIndication

    VruSafeDistanceIndication ::= SEQUENCE {
        subjectStation                 StationID OPTIONAL,
        stationSafeDistanceIndication  StationSafeDistanceIndication,
        timeToCollision                ActionDeltaTime OPTIONAL,
        ...
    }

    VruClusterPhysicalInfo ::= SEQUENCE {
        referencePoint     ReferencePosition, -- middle of front edge of cluster
        heading            HeadingValue, -- direction of perp. line through referencePoint
        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
    StationSafeDistanceIndication ::= BOOLEAN

    SequenceOfTrajectoryInterceptionIndication ::= 
        SEQUENCE (SIZE(1..8)) OF TrajectoryInterceptionIndication

    TrajectoryInterceptionIndication  ::= SEQUENCE {
        subjectStation                    StationID OPTIONAL, 
        trajectoryInterceptionProbability TrajectoryInterceptionProbability,
        trajectoryInterceptionConfidence  TrajectoryInterceptionConfidence OPTIONAL,
        ... 
    }

    VruClusterSideLength ::= INTEGER {tenCentimeters(1), outOfRange(61), unavailable(62)} (1..62)
    TrajectoryInterceptionProbability ::= INTEGER { zero(0), twoPercent(1), 
        fourPercent(2), oneHundredPercent(50), unavailable (63) } (0..63) 

    TrajectoryInterceptionConfidence ::= INTEGER { lessthan50percent(0), 
        between50and70Percent(1), between70and90Percent(2), above90Percent(3) } (0..3)

    -- none of these fields are OPTIONAL as each of the types below has an "unknown" value, which
    -- should be used if the value isn't provided.
    VruDynamicProperties ::= SEQUENCE {
        heading                  Heading,
        speed                    Speed,
        longitudinalAcceleration LongitudinalAcceleration,
        laterialAcceleration     LateralAcceleration,
        verticalAcceleration     VerticalAcceleration,
        yawRate                  YawRate,
        pastLocations            PathHistory,
        predictedLocations       PathHistory,
    HeadingChangeIndication ::= SEQUENCE {
        direction        LeftOrRight,
        actionDeltaTime  ActionDeltaTime,
        ...
    }

    VamExtension ::= CHOICE {
        dummy        NULL,
    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

VAM-Temp-Imports.asn

0 → 100644
+110 −0
Changes for VAM-Temp-Imports.asn: 110 added lines, 0 removed lines.
Original line number Diff line number Diff line
-- ETSI TS 103 300-3 V0.5.0 (2020-09)

-- Note: This module defines types that are intended to be updated within 
-- 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
-- updated. Once the CDD has been updated, this module will also be 
-- updated to import the new types directly from the CDD, and the
-- version number of this module will be incremented.

VAM-Temp-Imports {itu-t(0) identified-organization(4) etsi(0) itsDomain(5)
    wg1(1) ts(103300) temp-imports(255) version1(1)}

DEFINITIONS AUTOMATIC TAGS ::=

BEGIN

IMPORTS

ReferencePosition, StationID
FROM ITS-Container 
  {itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) 
   ts (102894) cdd (2) version (2)}

NodeOffsetPointXY, Offset-B10, Offset-B11, Offset-B12, Offset-B13, 
Offset-B14, Offset-B16
FROM DSRC 
  {iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) 
   version (2)}

;

-- identical to BasicContainer as used in CAM 
BasicContainer ::= SEQUENCE {
    stationType       StationType, -- from VAM-Temp-Imports
    referencePosition ReferencePosition, -- from ITS-Container
    ...
}

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 {
    nodeCenterPoint      OffsetPoint OPTIONAL,
    radius               Radius
}

AreaPolygon ::= SEQUENCE {
    polyPointList   PolyPointList
}

AreaRectangle ::= SEQUENCE {
    nodeCenterPoint             OffsetPoint OPTIONAL,
    semiMajorRangeLength        SemiRangeLength,
    semiMinorRangeLength        SemiRangeLength,
    semiMajorRangeOrientation   WGS84AngleValue,
    semiHeight                  SemiRangeLength OPTIONAL
}

OffsetPoint ::= SEQUENCE{
    nodeOffsetPointXY   NodeOffsetPointXY (WITH COMPONENTS {..., node-LatLon ABSENT, regional ABSENT}),
    nodeOffsetPointZ    NodeOffsetPointZ OPTIONAL
}


NodeOffsetPointZ ::= CHOICE {
    node-Z1 Offset-B10, -- node is within 5.11m of last node
    node-Z2 Offset-B11, -- node is within 10.23m of last node
    node-Z3 Offset-B12, -- node is within 20.47m of last node
    node-Z4 Offset-B13, -- node is within 40.96m of last node
    node-Z5 Offset-B14, -- node is within 81.91m of last node
    node-Z6 Offset-B16  -- node is within 327.67m of last node
}


Radius ::= INTEGER {
    zeroPointOneMeter   (1),
    oneMeter            (10)
}  (0..10000)


PolyPointList ::= SEQUENCE (SIZE(3..16, ...)) OF OffsetPoint

SemiRangeLength ::= INTEGER {
    zeroPointOneMeter   (1),
    oneMeter            (10)
} (0..10000)

WGS84AngleValue ::= INTEGER {
    wgs84North          (0),
    wgs84East           (900),
    wgs84South          (1800),
    wgs84West           (2700),
    unavailable         (3601)
} (0..3601)

StationType ::= INTEGER {
    unknown(0), pedestrian(1), cyclist(2), moped(3), motorcycle(4),
    passengerCar(5), bus(6), lightTruck(7), heavyTruck(8), trailer(9), 
    specialVehicles(10), tram(11), lightVruVehicle(12), animal(13), 
    roadSideUnit(15)
}
(0..255)

END
+41 −0
Changes for motorcyclist-special-container.asn: 41 added lines, 0 removed lines.
Original line number Diff line number Diff line
-- ETSI TS 103 300-3 V0.5.0 (2020-09s)

-- This module defines a special container for motorcycles, to be integrated into the 
-- Cooperative Awareness Message (CAM) defined in EN 302 637-2

VRU-Motorcyclist-Special-Container {itu-t(0) identified-organization(4) etsi(0) itsDomain(5)
    wg1(1) ts(103300) motorcyclist-special-container(2) version1(1)}


DEFINITIONS AUTOMATIC TAGS ::= 

BEGIN

IMPORTS
    SequenceOfVruPathPoint, SequenceOfVruSafeDistanceIndication,
    StabilityChangeIndication, VruOrientation, VruRollAngle,
    VruSizeClass, VruSubProfileMotorcyclist
FROM VAM-PDU-Descriptions 
    {itu-t(0) identified-organization(4) etsi(0) itsDomain(5)
     wg1(1) ts(103300) vam(1) version1(1)}

    PathHistory
FROM ITS-Container 
    {itu-t(0) identified-organization(4) etsi(0)
     itsDomain(5) wg1(1) ts(102894) cdd(2) version(2)}
;

MotorcylistSpecialContainer ::= SEQUENCE {
   vruSubProfileMotorcyclist   VruSubProfileMotorcyclist,
   vruSizeClass                VruSizeClass,
   rollAngle                   VruRollAngle OPTIONAL, 
   orientation                 VruOrientation OPTIONAL,
   vruSafeDistance             SequenceOfVruSafeDistanceIndication OPTIONAL,
   pathPrediction              SequenceOfVruPathPoint OPTIONAL,
   stabilityChangeIndication   StabilityChangeIndication OPTIONAL,
   ...
}



END
Loading