Updated 2026-10-09
What it is and who sends it
The Personal Safety Message is the vulnerable road user's counterpart of the BSM. A pedestrian's phone, a cyclist's handlebar unit, a road worker's vest beacon or a wheelchair-mounted device broadcasts its position, speed, heading and what kind of user it is, so that vehicles can warn their drivers of someone in or about to enter the roadway, and so that a roadside unit can request a pedestrian phase or extend a crossing. The type is PersonalSafetyMessage, DSRCmsgID 32. SAE J2945/9 gives the performance requirements for VRU devices: when to transmit, how accurate the position must be, and how to avoid flooding the channel with hundreds of phones in a crowd.
A related 2024 addition, PSM2 (DSRCmsgID 44, J2945/9's second-generation message), is listed in other messages.
When it is broadcast
| Property | Value |
|---|---|
| Rate | 1 to 10 Hz, adapted to risk: faster when near a roadway and moving, slower when stationary on a sidewalk; J2945/9 also allows clustering so one device speaks for a group |
| PSID | 0x27 (p-encoded 27) |
| Channel | Same C-V2X channel as vehicles |
| Signing | Signed with pseudonym certificates like a BSM; the id rotates for privacy |
| Size | 40 to 120 bytes |
Structure, section by section
| Field | Meaning | Units and range | Typical value | Where it comes from |
|---|---|---|---|---|
basicType | aPEDESTRIAN, aPEDALCYCLIST, aPUBLICSAFETYWORKER, anANIMAL, unavailable | enum | aPEDESTRIAN | device configuration |
secMark | Milliseconds within the UTC minute | 0 … 59999 | 12345 | device clock |
msgCnt | Sequence number | 0 … 127 | 9 | device |
id | Temporary identifier | 4 bytes hex | C0FFEE01 | device, rotates |
position | lat, long, elevation | 1/10 microdegree, 0.1 m | GNSS | |
accuracy | Error ellipse | 0.05 m | GNSS | |
speed | Ground speed | 0.02 m/s; 8191 unavailable | 65 (1.3 m/s, a walk) | GNSS |
heading | Direction of travel | 0.0125° | 0 (north) | GNSS or compass |
accelSet | Acceleration set | optional | sensors | |
pathHistory, pathPrediction | Trail and curvature, as in a BSM | optional | device | |
propulsion | CHOICE human (onFoot, skateboard, pushOrKickScooter, wheelchair…), animal, motor (wheelChair, bicycle, scooter, selfBalancingDevice…) | optional | human: onFoot | device configuration |
useState | 9-bit PersonalDeviceUsageState: idle, listeningToAudio, typing, calling, playingGames, reading, viewing | optional | the phone | |
crossRequest | The user wants to cross (a virtual push button) | boolean | true | app |
crossState | The user is crossing now | boolean | false | app |
clusterSize, clusterRadius | small, medium, large; radius in meters | optional | J2945/9 clustering | |
eventResponderType, activityType, activitySubType | For public-safety and road workers: responder kind, workingOnRoad, settingUpClosures, directingTraffic… | optional | worker configuration | |
assistType | 6-bit PersonalAssistive: vision, hearing, movement, cognition | optional | user profile | |
sizing | Size and behavior hints | optional | ||
attachment, attachmentRadius | stroller, bicycleTrailer, cart, wheelchair, pet; radius in 0.1 m | optional | user profile | |
animalType | serviceUse, pet, farm | optional |
The fields a vehicle acts on are basicType, position, speed, heading, crossRequest and crossState. The rest help a vehicle tune its warning: a cyclist at 7 m/s is treated differently from a pedestrian at 1 m/s, and useState typing suggests a distracted user. Road worker fields let a vehicle raise a work-zone warning when workers are present even without a TIM or RSM.
How to create one in this portal
- Open the creator and load PSM. The template is a pedestrian waiting to cross at the Broad St & West St crosswalk with
crossRequest true. - Set
basicType, the position (place it at the curb, not in the lane, unless you are demonstrating a crossing in progress),speedandheading. - Toggle optional parts in the structure explorer: add
propulsionwithmotor: bicyclefor a cyclist, oreventResponderTypeandactivityTypefor a worker. - Encode / Validate. The hex begins
0020(messageId 32). The summary shows the user type, position and crossing flags. - For a roadside test, push it on PSID 0x27 with a short window so a vehicle's VRU warning can be exercised from an RSU; some pilots do exactly this to simulate pedestrians at a crosswalk.
How to read a decoded one
basicType unavailablewith nopropulsionis a device that has not been configured.- A PSM at 15 m/s is not a pedestrian; check
basicTypeandpropulsionbefore trusting the speed, or suspect a phone in a car. crossRequest truewhilepositionis far from any crosswalk is a mis-located device.idshould rotate; a device that keeps oneidfor an hour is a privacy problem and probably a development unit.- As with BSMs, compare
secMarkto the receive time and watchmsgCntfor gaps.
Related standards and further reading
- SAE J2735_202409, PersonalSafetyMessage module; SAE J2945/9, Vulnerable Road User Safety Message Minimum Performance Requirements.
- BSM, SDSM for how a roadside sensor describes pedestrians who carry nothing, MAP for crosswalk lanes, units cheat sheet.