ros2_medkit_diagnostic_bridge
This section contains design documentation for the ros2_medkit_diagnostic_bridge package.
Overview
The Diagnostic Bridge converts standard ROS 2 /diagnostics messages into fault events
for the FaultManager. This enables integration with existing ROS 2 diagnostic infrastructure
while leveraging the centralized fault management capabilities of ros2_medkit.
Architecture
The following diagram shows the data flow and component relationships.
ROS 2 Medkit Diagnostic Bridge Architecture
Data Flow
Diagnostic Bridge Data Flow
Severity Mapping
The bridge maps DiagnosticStatus levels to FaultManager severities:
DiagnosticStatus |
Fault Severity |
Description |
|---|---|---|
OK (0) |
PASSED event |
Sends healing event to clear fault |
WARN (1) |
WARN (1) |
Warning-level fault |
ERROR (2) |
ERROR (2) |
Error-level fault |
STALE (3) |
CRITICAL (3) |
Stale data treated as critical |
Main Components
DiagnosticBridgeNode - The main ROS 2 node - Subscribes to
/diagnosticstopic (configurable) - Processes each DiagnosticStatus in incoming arraysFault Code Generation - Converts diagnostic names to fault codes - Custom mappings via
name_to_code.<name>parameters take precedence - Auto-generation converts to UPPER_SNAKE_CASE:"motor temp"→"MOTOR_TEMP"- Can be disabled withauto_generate_codes: falseFaultReporter Integration - Bridges to FaultManager - OK status →
report_passed()for healing - WARN/ERROR/STALE →report()with mapped severity
Configuration
Parameters
Parameter |
Default |
Description |
|---|---|---|
|
|
Topic to subscribe for diagnostic messages |
|
|
Auto-generate fault codes from diagnostic names |
|
(none) |
Custom mapping from diagnostic name to fault code |
Example Launch Configuration
diagnostic_bridge:
ros__parameters:
diagnostics_topic: "/diagnostics"
auto_generate_codes: true
# Custom mappings override auto-generation
"name_to_code.motor_controller: Status": "MOTOR_001"
"name_to_code.battery_monitor": "BATTERY_LOW"
Design Decisions
Fault Code Auto-Generation
Diagnostic names are converted to fault codes using these rules:
Convert to uppercase
Replace non-alphanumeric characters with underscores
Collapse multiple separators to single underscore
Remove leading/trailing underscores
Examples:
"motor temp"→"MOTOR_TEMP""/robot/arm"→"ROBOT_ARM""sensor: status"→"SENSOR_STATUS"
STALE as CRITICAL
STALE diagnostics are mapped to CRITICAL severity because stale data typically indicates a communication failure or node crash, which is a serious system health issue.