Hey everyone,
Quick update on ros2_medkit. We’ve been exploring how medkit’s diagnostic data can serve VDA 5050 fleet integrations, and put together a working demo.
Context: VDA 5050 error reporting is intentionally minimal (errorType, errorLevel, errorDescription). That’s fine for fleet routing decisions, but when an engineer needs to debug a fault, there’s a gap. We wanted to see if medkit’s SOVD layer could fill it without breaking either standard.
What we did:
The new SOVD Service Interface plugin exposes medkit’s entity tree, faults, and capabilities via ROS 2 services (ListEntities, GetEntityFaults, GetCapabilities). This means any ROS 2 node can query diagnostic data (not just SOVD/REST clients).
We built a VDA 5050 agent as a separate process that:
- Handles MQTT communication with a fleet manager (orders, state, instant actions)
- Drives Nav2 for navigation
- Queries medkit’s services to report faults as VDA 5050 errors
medkit stays completely unaware of VDA 5050. The agent is just another ROS 2 service consumer (same interface a BT.CPP node or PlotJuggler plugin would use).

Demo video:
- ROSMASTER M3 Pro (Jetson Orin Nano),
- mission dispatched from VDA 5050 Visualizer,
- LiDAR fault injected mid-navigation,
- fault propagated to fleet manager + full SOVD snapshot (freeze frames, extended data records, rosbag) in medkit’s web UI.
The service interface plugin is useful beyond VDA 5050 - anything that consumes ROS 2 services can now pull diagnostic data from medkit. Curious if anyone sees other use cases.