vehicles SEQUENCE (SIZE(1..32)) OF VehicleContainer, -- Max. 32 vehicles at a time based on size of VehicleContainerSeq options.
... -- extension marker
}
VehicleContainer ::= SEQUENCE {
currentSessionID SessionMissionID, -- up to 32 character ID
currentMissionID SessionMissionID OPTIONAL, -- optional missionID 32 character ID
-- Option: smaller data size might be sufficient
rollingCounterFromPcvm RollingCounter, -- PCVM Rolling counter signal paired with serverTimeAtPcvm
vehicleIdentification VidRequest OPTIONAL, -- for generating a blinking pattern for the direction indicator lights
drivingPermission DrivingPermission OPTIONAL, -- Defines the bounds within which the vehicle is allowed to drive.
safetyTimeSyncRequest SafetyTimeSyncRequest OPTIONAL, -- Functional Safety related container
driveCommand DriveCommand, -- Contains commands for the automated drive.
detectedVehiclePose DetectedVehiclePose OPTIONAL, -- Contains the most recent pose of the vehicle in the fixed infrastructure coordinate system.
controlInterface ControlInterface, -- Specifies which interface is used to control the vehicle.
oemSpecific OEMSpecificData OPTIONAL, -- OEM specific 16 bit container for special purposes.
... -- extension marker
}
VidRequest ::= CHOICE { -- We proposed a change here: now we are flexible with identification technologies
blinking Blinking,
...
}
SafetyTimeSyncRequest ::= SEQUENCE {
challenge UInt16, -- Challenge chosen by the Remote Vehicle Operation in accordance with the safety requirements.
-- The Remote Vehicle Operation shall use this challenge to relate the response to this request.
checksum UInt32 -- See safety checksum calculation
}
BlinkingSeed ::= INTEGER(0..18446744073709551615)
Blinking ::= SEQUENCE {
seed BlinkingSeed, -- Seed for calculating codes for flashing indicator lights .
codeLength UInt8, -- Value that indicated how many bits (8 - 20) from the seed shall be used for blinking.
currentState VidRequestStateEnum -- current authorization request status
-- For now, we kept the authorization state technology-agnostic.
}
DrivingPermission ::= SEQUENCE {
expirationTime TimestampIts, -- ETSI format from 1.1.2004 onwards.
velocityMax CentimetrePerSecond, -- Maximum allowed vehicle velocity.
curvatureMin HighResCurvature, -- Right curvature bounds.
curvatureMax HighResCurvature, -- Left curvature bounds.
checksum UInt32 -- See safety checksum calculation
}
DriveCommand ::= SEQUENCE {
driveCommandAction DriveCommandActionEnum, -- Current driving command.
terminateReason TerminateReasonEnum, -- If action equals terminate, indicates whether a terminate is requested because the vehicle reached the destination or because of an error.
-- Option: terminateReason is mandatory. It only encodes terminate if the drive command is terminate
-- Possible resolution: rename to health status, or use CHOICE in driveCommand and use this as a property of terminate drive command
selectGear GearEnum OPTIONAL, -- Requested gear (in line with the driving direction request), incl. request for neutral gear.
directionIndicator VehicleDirIndicatorEnum, -- The currently requested direction indicator.
-- Option: Using CDD's ExteriorLights can be considered as well. It would support multiple light request commands.
emergencyStopRequest EmergencyStopEnum OPTIONAL -- Signal for triggering an emergency stop or brake prefill.
}
DetectedVehiclePose ::= SEQUENCE {
detectedPose Pose,
poseMeasurementTime TimestampIts
}
ControlInterface ::= CHOICE {
pathSnippet PathSnippet,
directControl DirectControl,
trajectoryControl TrajectoryControl
}
PathSnippet ::= SEQUENCE (SIZE(0..5)) OF WayPoint
WayPoint ::= SEQUENCE {
index WaypointIndex, -- Index of 0 means that the WayPoint is not valid/not treated on vehicle side.
curvatureReq HighResCurvature -- Signed curvature value.
}
TrajectoryControl ::= SEQUENCE {
timeReference TimestampIts,
controlTrajectory ControlTrajectory,
stateTrajectory StateTrajectory OPTIONAL
}
ControlTrajectory ::= SEQUENCE (SIZE(0..50)) OF ControlPoint
ControlPoint ::= SEQUENCE {
curvature HighResCurvature, -- Signed curvature value.
acceleration LongitudinalAccelerationValue -- Signed acceleration value.
-- To be discussed in the members groups
}
StateTrajectory ::= SEQUENCE (SIZE(0..50)) OF StatePoint
StatePoint ::= SEQUENCE {
statePose Pose,
velocity CentimetrePerSecond -- Vehicle speed
}
-- *************** PCIM-SPECIFIC DATA DICTONARY ************************************
DriveCommandActionEnum ::= ENUMERATED {
unknown(0), -- No command given by the RVO.
initialize(1), -- The vehicle shall initialize and prepare for a driving job
drive(2), -- The vehicle shall actively drive and follow the path
terminate(3) -- The vehicle shall disable all interfaces and shutdown as soon as possible
}
TerminateReasonEnum ::= ENUMERATED {
proceed(0), -- Everything is okay. Proceed, do not terminate.
destination-reached(1), -- Vehicle has reached its destination
infrastructure-error(2), -- Error in infrastructure
vehicle-error(3), -- Vehicle has sent an error code
backend(4) -- Error in backend
}
EmergencyStopEnum ::= ENUMERATED {
inactive(0), -- The vehicle shall not use EmergencyStop at this stage
precharge(1), -- The vehicle shall stay in standby (brake prefill) and wait for an active command
active(2) -- The vehicle shall initiate an emergency stop using the maximum possible deceleration
}
VehicleDirIndicatorEnum ::= ENUMERATED {
dir-indicator-off(0), -- Do not flash lights
dir-indicator-right(1), -- Flash right
dir-indicator-left(2), -- Flash left
dir-indicator-both(3), -- Flash left and right
dir-indicator-unknown(4) -- Direction indicator state is unknown
}
VidRequestStateEnum ::= ENUMERATED {
undefined(0), -- Default value
flashing(1), -- Infrastructure is prepared and waiting for the Subject Vehicle to flash the code.
successful(2), -- The Subject Vehicle was recognized correctly and the identification is completed.
new-code(3) -- A new Subject Vehicle identification cycle was started.
}
-- ******************** Imports from AVP_commons ***************************
UInt8 ::= INTEGER (0..255)
Int16 ::= INTEGER (-32768..32767)
Int20 ::= INTEGER (-524288..524287)
UInt16 ::= INTEGER (0..65535)
UInt32 ::= INTEGER (0..4294967295)
RollingCounter ::= UInt16
OEMSpecificData ::= UInt16
WaypointIndex ::= UInt16
Pose ::= SEQUENCE { -- Projected to the ground, elevation not considered
-- x and y are cartesian coordinates
x Centimetre,
y Centimetre, -- The reference point of the vehicle is in the center of the rear axle
psi Psi -- Attitude of the vehicle relative to the x axis.
-- Angle between the longitudinal axis of the vehicle and the
-- x (North) axis of the reference coordinate system
}
Psi ::= INTEGER {
xDirection (0) -- 0.0001 radian
} (0..62831) -- Counter-clockwise
-- Option: the range and enumerated values can be fine-tuned
-- UNIT FACTOR
CentimetrePerSecond ::= Int16 -- [cm/s] Option: the range and enumerated values can be fine-tuned
Centimetre ::= Int20 -- [cm] Option: the range and enumerated values can be fine-tuned
HighResCurvature ::= Int16 -- [1/m] 0.00001 Option: CAM's curvature was not precise enough
Millisecond16 ::= Int16 -- [ms] 1 Option: CPM's relative time might not precise enough
GearEnum ::= ENUMERATED {
neutral(0), -- N: Neutral / Driving direction is unknown
forwards(1), -- D: Vehicle is driving forwards
backwards(2), -- R: Vehicle is driving backwards
park(3) -- P: Vehicle is in secure standstill, e.g. in PARK gear
}
VehicleOperationModeEnum ::= ENUMERATED {
unknown(0),
initializing(1), -- The vehicle is preparing for the mission, but hasn’t entered automted mode yet.
prepared(2), -- The vehicle is in automted mode, but currently doesn’t follow one of the control interfaces (waypoints, direct control, ...).
driving(3), -- The vehicle is in automted mode and actively follows one of the control interfaces (waypoints, direct control, ...). It hasn’t reached the end of the given path yet. Also applies if the vehicle stopped temporarily.
terminating(4) -- The vehicle left automated mode and is terminating related functions.
}
VidVehicleStateEnum ::= ENUMERATED {
vehicle-undefined(0), -- Default value
vehicle-ready(1), -- Vehicle is ready to get flashing code
vehicle-flashing-completed(2), -- Flashing is finished
vehicle-authorized(3) -- Vehicle identification was successful and vehicle has switched its state
}
SafetyViolationsEnum ::= ENUMERATED {
no-violation(0),
no-driving-permission-received(1),
last-driving-permission-too-old(2),
crc-violation-clock-sync-response(3),
crc-violation-driving-permission(4),
expiration-time-violation(5),
driving-direction-mismatch(6),
velocity-violation(7),
curvature-min-violation(8),
curvature-max-violation(9),
clocks-not-synchronized(10),
expiration-time-too-high(11),
monitoring(12)
}
SessionMissionID ::= IA5String (SIZE(17..32)) -- Session ID response, also suitable to carry VIN for special use cases!
safetyTimeSyncResponse SafetyTimeSyncResponse OPTIONAL, -- Functional Safety related container
safeVehicleTypeConfirmation SafeVehicleTypeConfirmation OPTIONAL, -- Functional Safety related container
vehicleError VehicleError OPTIONAL, -- Optional error information. Depending on the given error, the infrastructure either tries to resolve the issue or aborts the mission.
vehicleSafetyFeedback VehicleSafetyFeedback OPTIONAL, -- Relevant safety information from vehicle
oemSpecific OEMSpecificData OPTIONAL, -- OEM specific 16 bit container for special purposes.
... -- extension marker
}
VehicleState ::= SEQUENCE {
operationMode VehicleOperationModeEnum, -- The current operation mode or state of the vehicle.
vehicleAutorizationState VidVehicleStateEnum, -- The current authorization/vehicle identification state
gearSelected GearEnum, -- Direction in which the vehicle is currently driving or about to drive.
currentVelocity CentimetrePerSecond, -- Current vehicle velocity. Negative when driving backwards.
currentCurvature HighResCurvature, -- Current vehicle curvature.
secureStandstill BOOLEAN, -- True if the vehicle is currently in secure standstill (i.e. standstill and secured against rolling, even when vehicle is powered down and even on ramps).
idxLastWayPoint WaypointIndex OPTIONAL, -- Index of last WayPoint that has been received from infrastucture. 0 if not applicable.
localizedPose Pose OPTIONAL -- The current vehicle pose estimated by the vehicle. (Usually close to the pose estimated by the GMS, prediction by the vehicle)
}
VehicleError ::= SEQUENCE {
time TimestampIts, -- Timestamp when the error occurred.
vehCode VehCodeEnum, -- Depending on the given error, the infrastructure either tries to resolve the issue or aborts the mission, saves this message for logging and forwards its content to the backend.
customCode UInt8 -- Customer specific error code. The infrastructure won't further interpret this value.
}
VehCodeEnum ::= ENUMERATED {
unspecified(0), -- Any kind of error that is not specified otherwise. Infrastructure aborts the mission.
path-not-driveable(1) -- The vehicle can’t follow the given waypoints, based on the given DetectedVehiclePose. Infrastructure tries to plan a different path or aborts the mission otherwise.
}
VehicleDebug ::= SEQUENCE { -- Optional information from the vehicle that might help debugging and analysis
requestedVelocity CentimetrePerSecond, -- The currently requested velocity sent to the vehicle. Negative when driving backwards.
requestedCurvature HighResCurvature, -- The currently requested curvature sent to the vehicle.
powertrainActive BOOLEAN -- True if the power train is active, e.g. the engine is running/e-motor ready.
}
VehicleSafetyFeedback ::= SEQUENCE (SIZE(1..5)) OF VehicleSafetyFeedbackContainer -- up to 5 VehicleSafetyFeedback containers for 20 ms monitoring, logging and debugging
VehicleSafetyFeedbackContainer ::= SEQUENCE {
remainingTimeToDrive Millisecond16, -- The time which the vehicle is allowed to keep driving until brakes must be engaged. Signed value.
-- Option: CPM's relative time unit could be used if -1500..1500 is enough
drivingAllowed BOOLEAN, -- True if the vehicle is currently allowed to drive, false if a safety stop happened.
safetyViolations SafetyViolationsContainer, -- List of violations which currently lead to stopping the vehicle.
currentVehicleSafetyClockTime TimestampIts -- Time when safety component created this container
}
SafetyViolationsContainer ::= SEQUENCE (SIZE(0..5)) OF SafetyViolationsEnum -- up to 5 safety violations can be reported per cycle
SafetyTimeSyncResponse ::= SEQUENCE {
challenge UInt16, -- Challenge received in the SafetyTimeSyncRequest message
currentVehicleSafetyClockTime TimestampIts, -- Time of the Vehicle Safety Clock when SafetyTimeSyncRequest was received
checksum UInt32 -- See safety checksum calculation
}
SafeVehicleTypeConfirmation ::= SEQUENCE {
vehicleType IA5String (SIZE(32)), -- vehicle type identifier
checksum UInt32 -- See safety checksum calculation
}
-- ******************** Imports from AVP_commons ***************************
UInt8 ::= INTEGER (0..255)
Int16 ::= INTEGER (-32768..32767)
Int20 ::= INTEGER (-524288..524287)
UInt16 ::= INTEGER (0..65535)
UInt32 ::= INTEGER (0..4294967295)
RollingCounter ::= UInt16
OEMSpecificData ::= UInt16
WaypointIndex ::= UInt16
Pose ::= SEQUENCE { -- Projected to the ground, elevation not considered
-- x and y are cartesian coordinates
x Centimetre,
y Centimetre, -- The reference point of the vehicle is in the center of the rear axle
psi Psi -- Attitude of the vehicle relative to the x axis.
-- Angle between the longitudinal axis of the vehicle and the
-- x (North) axis of the reference coordinate system
}
Psi ::= INTEGER {
xDirection (0) -- 0.0001 radian
} (0..62831) -- Counter-clockwise
-- Option: the range and enumerated values can be fine-tuned
-- UNIT FACTOR
CentimetrePerSecond ::= Int16 -- [cm/s] Option: the range and enumerated values can be fine-tuned
Centimetre ::= Int20 -- [cm] Option: the range and enumerated values can be fine-tuned
HighResCurvature ::= Int16 -- [1/m] 0.00001 Option: CAM's curvature was not precise enough
Millisecond16 ::= Int16 -- [ms] 1 Option: CPM's relative time might not precise enough
GearEnum ::= ENUMERATED {
neutral(0), -- N: Neutral / Driving direction is unknown
forwards(1), -- D: Vehicle is driving forwards
backwards(2), -- R: Vehicle is driving backwards
park(3) -- P: Vehicle is in secure standstill, e.g. in PARK gear
}
VehicleOperationModeEnum ::= ENUMERATED {
unknown(0),
initializing(1), -- The vehicle is preparing for the mission, but hasn’t entered automted mode yet.
prepared(2), -- The vehicle is in automted mode, but currently doesn’t follow one of the control interfaces (waypoints, direct control, ...).
driving(3), -- The vehicle is in automted mode and actively follows one of the control interfaces (waypoints, direct control, ...). It hasn’t reached the end of the given path yet. Also applies if the vehicle stopped temporarily.
terminating(4) -- The vehicle left automated mode and is terminating related functions.
}
VidVehicleStateEnum ::= ENUMERATED {
vehicle-undefined(0), -- Default value
vehicle-ready(1), -- Vehicle is ready to get flashing code
vehicle-flashing-completed(2), -- Flashing is finished
vehicle-authorized(3) -- Vehicle identification was successful and vehicle has switched its state
}
SafetyViolationsEnum ::= ENUMERATED {
no-violation(0),
no-driving-permission-received(1),
last-driving-permission-too-old(2),
crc-violation-clock-sync-response(3),
crc-violation-driving-permission(4),
expiration-time-violation(5),
driving-direction-mismatch(6),
velocity-violation(7),
curvature-min-violation(8),
curvature-max-violation(9),
clocks-not-synchronized(10),
expiration-time-too-high(11),
monitoring(12)
}
SessionMissionID ::= IA5String (SIZE(17..32)) -- Session ID response, also suitable to carry VIN for special use cases!