Skip to main content

Architecture

The E2E Demo Blueprint spans multiple physical devices connected over Wi-Fi and CAN bus. This page describes the full component architecture and how each piece interacts.

High-Level Architecture

Component Descriptions

Raspberry Pi 5 — Signal Workloads (Eclipse Ankaios)

All in-vehicle signal workloads are managed as Podman containers by Eclipse Ankaios 0.7.0. The Ankaios manifest (vehicle-signals.yaml) defines the following workloads:

WorkloadContainer ImagePurpose
mosquitto-brokereclipse-mosquitto:latestMQTT broker for driver-input ECUs
grpc-mqtt-bridgegrpc-mqtt-bridge:mainTranslates MQTT JSON payloads to Kuksa gRPC Val/Set updates
kuksa-databrokerkuksa-databroker:0.6.0Central VSS signal store
kuksa-can-providercan-provider:0.4.4Bidirectional CAN ↔ VSS mapping via DBC files
pi5-demo-websitepi5-demo-website:latestLive architecture / signal-flow dashboard at :8090

All workloads run with --net=host so they share the host network namespace and can reach each other at localhost.

Raspberry Pi 5 — Fleet Management Stack (Docker Compose)

The Fleet Management Blueprint services run via Docker Compose alongside the Ankaios workloads:

ServicePurpose
fms-forwarderReads VSS signals from Kuksa Databroker and forwards them via uProtocol
fms-zenoh-routerZenoh transport layer
fms-consumerReceives telemetry and writes to InfluxDB
fms-serverrFMS HTTP API at :8081
fleet-analysis-backendJakarta EE analytics API at :8082
influxdbTime-series database
grafanaDashboards at :3000
csv-providerOptional simulated vehicle data source

Arduino Joystick ECU

An Arduino Uno R4 WiFi reads an analog joystick (left/right + button press) and publishes VSS-aligned JSON on MQTT topic InVehicleTopics. The payload directly maps to:

  • Vehicle.Body.Lights.DirectionIndicator.Left.IsSignaling (boolean)
  • Vehicle.Body.Lights.DirectionIndicator.Right.IsSignaling (boolean)
  • Vehicle.Body.Lights.Brake.IsActive (string: INACTIVE / ACTIVE / ADAPTIVE)

Full device guide: Joystick Input ECU

Arduino RFID Door ECU

An Arduino with an RC522 RFID reader publishes the scanned card UID as:

  • Vehicle.Driver.Identifier.Subject (string)

Full device guide: RFID Door ECU

MCU1 LED Control ECU

An Arduino Uno with an MCP2515 CAN transceiver listens for BlinkerCommand frames on CAN ID 0x120 and drives a WS2812 8-LED strip:

LEDs (0-based)Function
0–1Left indicator
3–4Brake light
6–7Right indicator

The MCU sends BlinkerStatus frames on CAN ID 0x121 back to the Raspberry Pi.

Full device guide: LED Control ECU

ThreadX SOME/IP Extension (Optional)

Two MXChip AZ3166 boards form a SOME/IP peer pair:

  • Device 1 subscribes to MQTT blinker topics, maps the payload to SOME/IP events, and forwards button A/B state.
  • Device 2 receives SOME/IP events and updates its LED/OLED display, also sending its own button state back.

Full device guide: ThreadX SOME/IP ECU

Network Topology

All Wi-Fi devices connect to the same network. The Raspberry Pi 5 bridges Wi-Fi (MQTT) and CAN (SocketCAN) traffic. The CAN bus operates at 500 kbit/s with an 8 MHz oscillator on the MCP2515 module.