V2X message reference
The Collective Perception Message
A CPM is how a vehicle or roadside unit tells its neighbours what its sensors see. Below: what it carries, the ETSI clauses that define each part, and a real one decoded to JSON.
What is a Collective Perception Message?
A CPM is the ETSI V2X message a station broadcasts to share its perception of the world around it:
the other road users and objects its sensors detect, each with a position, kinematics and a
confidence. It lets a station warn its neighbours about traffic they cannot see for themselves. It
is defined in ETSI TS 103 324
and carries messageID 14.
What is inside a CPM?
The message is a header plus a set of containers. The ones that matter most:
| Container | Holds | Clause (TS 103 324) |
|---|---|---|
| Management | The sender's referencePosition and reference time. Every perceived object is expressed relative to this anchor. |
7.1.3 |
| Originating station | The sender's own orientation and, for a vehicle, its dimensions, so a receiver can place the anchor. | 7.1.4 |
| Perceived object | Each detected object: an objectId, a Cartesian offset from the reference position, kinematics, and a per-object confidence. |
7.1.8 |
One field to read with care is measurementDeltaTime
(7.1.8.2):
it is per object, so two objects in the same message can be dated at different instants. The
reconstruction of a 95% confidence from the reported components is set out in
Annex C.
A real CPM, decoded
A vendor reference CPM (66 bytes) through the API, with enrich: true. Enriched siblings appear next to coded fields: coordinates in decimal degrees, enums resolved.
{
"header": { "protocolVersion": 2, "messageId": 14, "stationId": 99999,
"_messageId_name": "CPM" },
"payload": {
"managementContainer": {
"referenceTime": 689686032850,
"referencePosition": {
"latitude": 488700000, "longitude": 23500000,
"_latitude_decoded": "48.8700000", "_longitude_decoded": "2.3500000" // degrees
}
},
"cpmContainers": [
{ "containerId": 5, "containerData": {
"numberOfPerceivedObjects": 1,
"perceivedObjects": [
{ "objectId": 1, "measurementDeltaTime": 0,
"position": { "xCoordinate": { "value": 1000, "confidence": 100 } } }
] } }
]
}
}
… full container tree in the workbench.
Open this message in the workbench →
How do I decode a CPM message?
Send the hex to /api/v1/decode. No SDK, no local ASN.1 toolchain.
curl -s -X POST https://v2json.skyv2x.com/api/v1/decode \
-H 'Content-Type: application/json' \
-d '{"hex":"<your CPM hex>","type":"cpm","enrich":true}'
The integration guide has the same in Python, JavaScript and Node.js, plus encode and round-trip.
Which standard defines the CPM?
The CPM is a perception message an intersection or roadside unit broadcasts as readily as a vehicle does. For where it sits in an infrastructure deployment, see V2X for infrastructure.