SkyV2X/v2json

v2json / messages / CPM

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:

ContainerHoldsClause (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.

POST /api/v1/decode → JSON (excerpt)
{
  "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
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?

Standard
ETSI TS 103 324 V2.1.1
messageID
14
Data types
Common Data Dictionary, TS 102 894-2 V2.1.1
Analysis
TR 103 562

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.

Open the workbench All message types