Commit d88b54fd authored by ASN.1 Documenter's avatar ASN.1 Documenter
Browse files

Merge development branch 'v.1.1.1' into master

parents d9fdc37a 2fe61160
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
# ASN.1 module for VAM - ETSI TS 103 300-3

This repository contains Specification of the VRU Awareness Message format for the VRU Awareness Basic Service in ETSI TS 103 300-3.
This repository contains VRU Awareness Basic Service ETSI TS 103 300-3  Specification of the VRU Awareness Message format.

The asn.1 files for TS 103 300-1 V2.1.1 can be found in the tagged version : https://forge.etsi.org/rep/ITS/asn1/vam-ts103300_3/tree/v.1.1.1/

The text of the TS 103 300-1 V2.1.1 can be found using the link (still ongoing).
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

@@ -17,3 +15,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)
+353 −0
Original line number Diff line number Diff line
-- ETSI TS 103 300-3 V2.1.1 (2020-11)

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

    IMPORTS
    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)}

    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) 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
    }

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

    StationSafeDistanceIndication ::= BOOLEAN

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

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

    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)

    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

VAM-Temp-Imports.asn

0 → 100644
+110 −0
Original line number Diff line number Diff line
-- ETSI TS 103 300-3 V2.1.1 (2020-11)

-- 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
Original line number Diff line number Diff line
-- ETSI TS 103 300-3 V2.1.1 (2020-11)

-- 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