MEDWEAR Physiological Signal Schemas
Below are the core MEDWEAR message types for common physiological signals. JSON Schemas are maintained in the ord_schemas repository. ROS 2 message definitions are in the healthcare_msgs repository.
| Signal | JSON Schema | ROS 2 Message |
|---|---|---|
| Ballistocardiogram (BCG) | bcg_schema.json | BCG.msg |
| Electrocardiogram (ECG) | ecg_schema.json | ECG.msg |
| Electrodermal Activity (EDA) | eda_schema.json | EDA.msg |
| Electroencephalogram (EEG) | eeg_schema.json | EEG.msg |
| Electromyography (EMG) | emg_schema.json | EMG.msg |
| Electrooculogram (EOG) | eog_schema.json | EOG.msg |
| Impedance Cardiogram (ICG) | icg_schema.json | ICG.msg |
| Photoplethysmogram (PPG) | ppg_schema.json | PPG.msg |
BCG Example Schema Reference
The BCG schema represents waveform data from a specific lead with signal quality and temporal context.
The BCGInfo schema captures metadata about the sensor and acquisition parameters.
Every BCG data message references a BCGInfo session via session_id.
JSON Schemas
BCG.json - waveform data
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "BCG Data",
"description": "Waveform data from a specific BCG lead with signal quality and temporal context.",
"type": "object",
"definitions": {
"time_frame": { "$ref": "time-frame-1.0.json" },
"time_interval": { "$ref": "time-interval-1.0.json" }
},
"properties": {
"session_id": {
"type": "string",
"description": "Session identifier matching BCGInfo's session_id"
},
"sample_size": {
"type": "integer",
"minimum": 0,
"maximum": 65535,
"description": "Number of samples in the bcg and signal_quality arrays"
},
"bcg": {
"type": "array",
"items": { "type": "number" },
"description": "Raw or filtered BCG values"
},
"signal_quality": {
"type": "array",
"items": { "type": "number", "minimum": 0, "maximum": 1 },
"description": "Signal quality per sample, from 0 (poor) to 1 (excellent)"
}
},
"required": ["session_id", "sample_size", "bcg", "signal_quality"]
}
BCGInfo.json - acquisition metadata
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "BCGInfo",
"description": "Metadata describing BCG data acquisition parameters and sensor characteristics.",
"type": "object",
"definitions": {
"device_info": {
"type": "object",
"properties": {
"manufacturer": { "type": "string" },
"model": { "type": "string" },
"serial_number": { "type": "string" }
},
"required": ["manufacturer", "model"]
},
"filter_base": {
"type": "object",
"properties": {
"filter_type": { "type": "string" },
"cutoff_frequency_hz": { "type": "number" },
"order": { "type": "integer" }
}
}
},
"properties": {
"device_info": { "$ref": "#/definitions/device_info" },
"session_id": { "type": "string" },
"sampling_frequency": { "type": "number", "minimum": 0 },
"window_size_samples": { "type": "integer", "minimum": 1 },
"quality_window_size_samples": { "type": "integer", "minimum": 1 },
"units": {
"type": "string",
"enum": ["UNIT_UNKNOWN","UNIT_MV","UNIT_UV","UNIT_COUNTS","UNIT_M_S2","UNIT_NEWTON"]
},
"gain": { "type": "number" },
"adc_resolution": { "type": "integer", "minimum": 1, "maximum": 32 },
"sensor_placement": {
"type": "string",
"enum": ["PLACEMENT_UNKNOWN","PLACEMENT_CHEST","PLACEMENT_BACK","PLACEMENT_MATTRESS",
"PLACEMENT_CHAIR","PLACEMENT_ANKLE","PLACEMENT_FOOT","PLACEMENT_WRIST",
"PLACEMENT_ARM","PLACEMENT_DESK","PLACEMENT_CLOTHING","PLACEMENT_CUSTOM"]
},
"sensing_direction": {
"type": "string",
"enum": ["DIRECTION_UNKNOWN","DIRECTION_DORSO_VENTRAL","DIRECTION_LONGITUDINAL",
"DIRECTION_MEDIO_LATERAL","DIRECTION_CUSTOM"]
},
"sensing_modality": {
"type": "string",
"enum": ["MODALITY_UNKNOWN","MODALITY_PIEZOELECTRIC_FILM","MODALITY_FORCEPLATE",
"MODALITY_ACCELEROMETER","MODALITY_PIEZOELECTRIC_CRYSTAL","MODALITY_CUSTOM"]
},
"measurement_system": {
"type": "string",
"enum": ["SYSTEM_UNKNOWN","SYSTEM_STARR","SYSTEM_NICKERSON","SYSTEM_DOCK","SYSTEM_CUSTOM"]
},
"filter": { "$ref": "#/definitions/filter_base" }
},
"required": [
"device_info","session_id","sampling_frequency","window_size_samples",
"quality_window_size_samples","units","gain","adc_resolution",
"sensor_placement","sensing_direction","sensing_modality","measurement_system"
]
}
ROS 2 Message Definitions
BCG.msg
std_msgs/Header header
string session_id # Match BCGInfo's session_id
uint16 sample_size
float32[] bcg # Raw or filtered BCG values
float32[] signal_quality # 0 (poor) to 1 (excellent)
BCGInfo.msg
DeviceInfo device_info
string session_id
float32 sampling_frequency # Hz
uint32 window_size_samples
uint32 quality_window_size_samples
uint8 UNIT_UNKNOWN=0
uint8 UNIT_MV=1 uint8 UNIT_UV=2 uint8 UNIT_COUNTS=3
uint8 UNIT_M_S2=4 uint8 UNIT_NEWTON=5
uint8 units
float32 gain
uint8 adc_resolution
uint8 PLACEMENT_UNKNOWN=0 uint8 PLACEMENT_CHEST=1 uint8 PLACEMENT_BACK=2
uint8 PLACEMENT_MATTRESS=3 uint8 PLACEMENT_CHAIR=4 uint8 PLACEMENT_ANKLE=5
uint8 PLACEMENT_FOOT=6 uint8 PLACEMENT_WRIST=7 uint8 PLACEMENT_ARM=8
uint8 PLACEMENT_DESK=9 uint8 PLACEMENT_CLOTHING=10 uint8 PLACEMENT_CUSTOM=255
uint8 sensor_placement
uint8 DIRECTION_UNKNOWN=0 uint8 DIRECTION_DORSO_VENTRAL=1
uint8 DIRECTION_LONGITUDINAL=2 uint8 DIRECTION_MEDIO_LATERAL=3
uint8 DIRECTION_CUSTOM=255
uint8 sensing_direction
uint8 MODALITY_UNKNOWN=0 uint8 MODALITY_PIEZOELECTRIC_FILM=1
uint8 MODALITY_FORCEPLATE=2 uint8 MODALITY_ACCELEROMETER=3
uint8 MODALITY_PIEZOELECTRIC_CRYSTAL=4 uint8 MODALITY_CUSTOM=255
uint8 sensing_modality
uint8 SYSTEM_UNKNOWN=0 uint8 SYSTEM_STARR=1 uint8 SYSTEM_NICKERSON=2
uint8 SYSTEM_DOCK=3 uint8 SYSTEM_CUSTOM=255
uint8 measurement_system
FilterBase filter