Anforderungsliste L1 – Autonomer Mobiler Roboter (AMR)
Kopfbereich
| Feld | Inhalt |
| Projekt | Autonomer Mobiler Roboter (AMR) fuer Intralogistik mit KLT-Transport |
| Dokumenttyp | Anforderungsliste nach VDI 2206, Stufe L1 (Lastenheft) |
| Version | 1.0 |
| Datum | 2026-03-22 |
| Autor | Jan |
| VDI-2206-Stufe | L1 – Anforderungen definieren |
| Projektfragen | PF1 (Echtzeitarchitektur), PF2 (Navigationsgenauigkeit), PF3 (Navigation und Bedien- und Leitstandsebene) |
| Firmware-Versionen | config_drive.h v4.0.0, config_sensors.h v3.0.0 |
| Nav2-Konfiguration | nav2_params.yaml, mapper_params_online_async.yaml |
Kfz-Analogie (Einordnung)
Die vorliegende Anforderungsliste orientiert sich an der Denkweise einer Kfz-Typgenehmigung (Homologation) nach europaeischem Recht. Im Automobilbereich definiert ISO 26262 die funktionale Sicherheit ueber ASIL-Stufen (Automotive Safety Integrity Level), wobei jedes Sicherheitsziel eine Fehlertoleranzzeit und eine Pruefvorschrift erhaelt. Das AMR-Projekt nutzt keine formale ASIL-Einstufung, uebertraegt jedoch die Struktur: Jede Anforderung benennt eine Funktion oder Gefaehrdung, einen messbaren Schwellwert und einen Nachweis. Die Spalte "Kfz-Pendant" ordnet jede AMR-Anforderung einem bekannten Automobilkonzept zu, damit der Leser die Parallele zwischen Roboter und Fahrzeug nachvollziehen kann. Wie bei einer Kfz-Einzelabnahme (HU/TUeV) erfordert jede Anforderung einen dokumentierten Nachweis — fehlt dieser, entspricht das einer fehlenden Bremswegmessung im Pruefbericht. Die Rueckverfolgbarkeitsmatrix am Ende dieses Dokuments ordnet jede Anforderung einer V-Modell-Pruefebene (Pruefstandtest, Fahrversuch, Typgenehmigung) zu, analog zu den drei Stufen einer Kfz-Zulassung.
Einsatzszenario
Der AMR operiert in einer strukturierten Indoor-Umgebung (Buero, Labor, Lager) auf ebenem Boden mit bekannten, kartierbaren Strukturen. Diese Operational Design Domain (ODD) entspricht einem Level-4-Fahrzeug auf einem abgesperrten Betriebsgelaende: Der Roboter navigiert autonom innerhalb der definierten Umgebung, benoetigt jedoch keinen Betrieb auf oeffentlichen Strassen oder unter Witterungseinfluss.
| Merkmal | Auspraegung | Kfz-Vergleich |
| Antriebskonzept | Differentialantrieb, zwei Motoren JGA25-370 (1:34) | Heckantrieb mit Differentialsperre |
| Rechenarchitektur | Raspberry Pi 5 (zentral) + 2x ESP32-S3 (dezentral) | ADAS-Zentralrechner + ECU-Verbund |
| Kommunikation | micro-ROS/UART 921600 Baud + CAN-Bus 1 Mbit/s | CAN-FD + Ethernet (Dual-Path) |
| Sensorik | LiDAR, IMU, Ultraschall, Cliff, Kamera + Hailo-8L | Lidar, ESP, ABS, PDC, Frontkamera |
| Geschwindigkeit | 0,15 m/s autonom / 0,40 m/s manuell | v_max autonom (L4) / manuell (L0) |
| Sicherheitskonzept | Cliff-Safety-Knoten + CAN-Direktpfad + Failsafe | AEB + redundanter Bremskreis + Watchdog |
| Benutzeroberflaeche | React-Dashboard (WebSocket + MJPEG) | Kombiinstrument + Infotainment |
| Sprachschnittstelle | ReSpeaker + Gemini Audio-STT / faster-whisper Fallback → Intent → Missionskommando | Sprachsteuerung im Fahrzeuginnenraum (Cloud + Offline-Fallback) |
4 Funktionale Anforderungen (FA)
4.1 Ebene A – Fahrkern
| ID | PF | Prio | Beschreibung | Messgroesse | Schwellwert | Kfz-Pendant | Referenz | Testfall-ID | Status |
| FA-01 | PF2 | MUSS | SLAM Toolbox erzeugt konsistentes Occupancy Grid der Einsatzumgebung | Raumabdeckung, Kartenaufloesung | >= 95 % Abdeckung, 0,05 m Raster | HD-Karte | mapper_params (resolution: 0,05) | IT-04 (slam_validation) | Erfuellt |
| FA-02 | PF2 | MUSS | Lokalisierungsfehler bei Geradeausfahrt mit IMU-Korrektur | Lateralversatz, Heading-Fehler | <= 5 cm lateral, <= 5 Grad Heading (Ist: 2,1 cm / 0,06 Grad) | GPS-Genauigkeit | Messprotokoll P1/P2, config_drive.h | IT-03 (straight_drive_test) | Erfuellt |
| FA-03 | PF2 | MUSS | Zielpunktanfahrt mit definierter Genauigkeit | XY-Abweichung, Gier-Abweichung | <= 0,03 m xy, <= 0,05 rad yaw (Ist: 0,0101 m / 0,0339 rad) | Parkgenauigkeit APA | nav2_params (Goal Checker), Messprotokoll P4 | IT-06 (nav_square_test) | Erfuellt |
| FA-04 | PF2 | MUSS | Statische Hindernisse umfahren ohne Kontakt | Kollisionsereignisse, Inflationsradius | 0 Kollisionen, Inflation >= 0,25 m | Abstandswarnung | nav2_params (inflation_radius: 0,25) | IT-05 (nav_test) | Erfuellt |
| FA-05 | PF2 | SOLL | Dynamischen Hindernissen (Personen) ausweichen | Passierabstand | >= 12 cm (Ist: 12 cm, qualitativ) | AEB-Teilbremsung | Messung Kap. 6 (kein Protokoll, A-F02) | IT-05 (nav_test) | Teilweise erfuellt |
| FA-06 | PF1 | MUSS | Geradeausfahrt 1 m mit reproduzierbarem Ergebnis | Lateralversatz, Heading-Fehler | < 5 cm Drift, < 5 Grad Heading (Ist: 2,1 cm / 0,06 Grad mit IMU) | Spurhaltung LKA | Messprotokoll P1/P2, config_drive.h (wheel_diameter: 65,67 mm) | IT-03 (straight_drive_test) | Erfuellt |
| FA-07 | PF1 | MUSS | Rotation 360 Grad mit definierter Winkeltreue | Winkelfehler | < 5 Grad (Ist: 1,88 Grad) | Lenkwinkelkalibrierung | Messprotokoll P1/P2, config_drive.h (wheel_base: 178,0 mm) | IT-02 (rotation_test) | Erfuellt |
| FA-08 | ueberg. | MUSS | Teleop-Fernsteuerung ueber /cmd_vel im manuellen Modus | Maximalgeschwindigkeit | max 0,40 m/s (Joystick) | Manueller Fahrmodus L0 | Dashboard-Konfiguration | IT-09 (dashboard_latency_test) | Erfuellt |
| FA-09 | PF2 | SOLL | Gespeicherte Karte beim Neustart laden (map_server) | Kartenverfuegbarkeit | Karte nach Neustart nutzbar | Karten-Update Navi | SLAM Toolbox (Serialize/Deserialize) | IT-04 (slam_validation) | Offen |
| FA-10 | PF2 | MUSS | 10 Zielanfahrten ohne Kollision absolvieren | Kollisionsfreie Anfahrten | 10/10 kollisionsfrei (Ist: 4/4 WP + 10/10 Docking) | Typ-Fahrversuch | Messprotokoll P4, kapitel_03 (F04) | SV-01 | Erfuellt |
| FA-11 | PF2 | SOLL | Recovery-Verhalten loest Blockaden und Sackgassen | Recovery-Erfolgsquote | >= 80 % (Ist: 80 %, qualitativ) | Ausfallbehandlung | Messung Kap. 6 (kein Protokoll, A-F02) | IT-05 (nav_test) | Teilweise erfuellt |
4.2 Ebene B – Bedien- und Leitstandsebene
| ID | PF | Prio | Beschreibung | Messgroesse | Schwellwert | Kfz-Pendant | Referenz | Testfall-ID | Status |
| FA-12 | ueberg. | MUSS | Echtzeit-Telemetrie ueber WebSocket und MJPEG-Stream | Telemetrie-Rate, Ports | >= 4 Hz Telemetrie, WS 9090, MJPEG 8082 (Ist: 9,9 Hz) | Kombiinstrument | Messprotokoll P5 (Test 5.2), dashboard_bridge.py | SV-03 | Erfuellt |
| FA-13 | ueberg. | MUSS | Joystick-Fernsteuerung mit Deadman-Sicherung | Befehlslatenz, Deadman-Timeout | Latenz < 300 ms, Deadman < 500 ms (Ist: 5,9 ms / 251,6 ms) | Fernbedienung | Messprotokoll P5 (Test 5.1, 5.3) | IT-09 (dashboard_latency_test) | Erfuellt |
| FA-14 | ueberg. | SOLL | Validierungstab zeigt Phase-5-Testergebnisse an | Dargestellte Testfaelle | >= 5 Phase-5-Tests sichtbar | Diagnosemodus OBD | Messprotokoll P5, Dashboard TestPanel | SV-03 | Erfuellt |
4.3 Ebene C – Intelligente Interaktion
| ID | PF | Prio | Beschreibung | Messgroesse | Schwellwert | Kfz-Pendant | Referenz | Testfall-ID | Status |
| FA-15 | PF3 | SOLL | Kameraobjekterkennung ueber Hailo-8L und Gemini-Semantik | Inferenzzeit | < 50 ms (Ist: 34 ms) | ADAS-Objekterkennung | Messung Kap. 6 (kein eigenes Protokoll) | SV-02 | Erfuellt |
| FA-16 | PF3 | MUSS | ArUco-Docking mit reproduzierbarer Genauigkeit | Erfolgsquote, lateraler Versatz | >= 80 % Erfolg, < 2 cm Versatz (Ist: 100 % / 0,73 cm) | Einparken APA | Messprotokoll P4 (Test 4.2) | IT-07 (docking_test) | Erfuellt |
| FA-17 | PF3 | KANN | Sprachschnittstelle wandelt Sprache in Missionskommandos | Befehlsannahme | Intent-Erkennung und Missionsausloesung | Sprachsteuerung HMI | voice_command_node, kapitel_03 (F07) | SV-03 | Erfuellt |
5 Nicht-funktionale Anforderungen (NFA)
| ID | PF | Prio | Beschreibung | Messgroesse | Schwellwert | Kfz-Pendant | Referenz | Testfall-ID | Status |
| NFA-01 | PF1 | MUSS | PID-Regelfrequenz im Fahrkern deterministisch | Zyklusrate, Jitter | >= 50 Hz, Jitter < 2 ms (Ist: 50 Hz, < 2 ms) | ECU-Zykluszeit | config_drive.h (control_loop_hz: 50), Messprotokoll P1/P2 | T-01 (motor_test) | Erfuellt |
| NFA-02 | PF2 | MUSS | LiDAR-Scan-Rate genuegt fuer SLAM und Navigation | Scan-Frequenz | >= 5 Hz (Ist-Messwert: 7,7 Hz; Datenblatt: 5,5 Hz typ.) | Lidar-Scanrate | Datenblatt RPLIDAR A1, Messprotokoll P3 | T-06 (rplidar_test) | Erfuellt |
| NFA-03 | PF1 | MUSS | Odometrie-Publikationsrate genuegt fuer Regelkreis | Odometrie-Rate | >= 10 Hz (Soll: 20 Hz, Ist: 18,3–18,8 Hz) | ABS-Raddrehzahl-Zyklus | config_drive.h (odom_publish_hz: 20), Messprotokoll P3 | T-02 (encoder_test) | Erfuellt |
| NFA-04 | PF1 | MUSS | IMU-Abtastrate genuegt fuer Sensorfusion | IMU-Rate | >= 20 Hz (Soll: 50 Hz, Ist: 30–35 Hz) | ESP-Sensorrate | config_sensors.h (imu_sample_hz: 50), Messprotokoll P2 | T-04 (imu_test) | Erfuellt |
| NFA-05 | PF2 | MUSS | Autonome Maximalgeschwindigkeit (RPP-Regler) begrenzt | Lineargeschwindigkeit | <= 0,15 m/s | v_max autonom L4 | nav2_params.yaml (desired_linear_vel: 0,15) | IT-05 (nav_test) | Erfuellt |
| NFA-06 | ueberg. | MUSS | Manuelle Maximalgeschwindigkeit (Joystick) begrenzt | Lineargeschwindigkeit | <= 0,40 m/s | v_max manuell L0 | Dashboard-Konfiguration | IT-09 (dashboard_latency_test) | Erfuellt |
| NFA-07 | PF2 | MUSS | Maximale Drehrate begrenzt | Winkelgeschwindigkeit | <= 1,0 rad/s | Lenkgeschwindigkeit | nav2_params.yaml | IT-02 (rotation_test) | Erfuellt |
| NFA-08 | ueberg. | SOLL | Betriebsdauer unter Last genuegt fuer Validierungszyklus | Laufzeit | >= 30 min unter Last | Reichweite WLTP | Berechnung (Samsung INR18650-35E, 3,35 Ah, 3S1P) | — | Offen |
| NFA-09 | PF1 | SOLL | CPU-Last des Pi 5 laesst Headroom fuer Erweiterungen | CPU-Auslastung | < 80 % (Ist: < 80 %) | Rechenlast ADAS-ECU | Messung Kap. 6 (kein eigenes Protokoll) | SV-03 | Teilweise erfuellt |
| NFA-10 | PF1 | MUSS | Datenverlust auf micro-ROS-Strecke vernachlaessigbar | Paketverlustrate | < 0,1 % (Ist: < 0,1 %) | CAN-Frameverlust | Messprotokoll P1/P2 | T-08 (serial_latency_logger) | Erfuellt |
| NFA-11 | PF2 | MUSS | Absolute Trajectory Error (ATE) bei Pfadverfolgung | Mittlerer Positionsfehler | < 0,20 m (Ist: MAE 0,161 m / RMSE 0,190 m (T3.1), RMSE 0,030 m (T3.2)) | Pfadfolgefehler | Messprotokoll P3 (Achtung A-F04: ATE ≠ RMSE) | IT-04 (slam_validation) | Erfuellt |
| NFA-12 | PF1 | SOLL | RPP-Controller-Rate bietet genuegend Headroom | Controller-Ausfuehrungsrate | > 1000 Hz (Ist: > 2000 Hz) | Regler-Headroom | Messung Kap. 6 (kein eigenes Protokoll) | IT-05 (nav_test) | Teilweise erfuellt |
6 Schnittstellenanforderungen (SA)
| ID | PF | Prio | Beschreibung | Messgroesse | Schwellwert | Kfz-Pendant | Referenz | Testfall-ID | Status |
| SA-01 | PF1 | MUSS | Fahrkern-Knoten kommuniziert mit Pi 5 ueber micro-ROS/UART | Baudrate, Geraetepfad | 921600 Baud, /dev/amr_drive | CAN-FD ECU-Bus | config_drive.h, full_stack.launch.py | T-08 (serial_latency_logger) | Erfuellt |
| SA-02 | PF1 | MUSS | Sensor- und Sicherheitsbasis kommuniziert mit Pi 5 ueber micro-ROS/UART | Baudrate, Geraetepfad | 921600 Baud, /dev/amr_sensor | CAN-FD Sensor-Bus | config_sensors.h, full_stack.launch.py | T-08 (serial_latency_logger) | Erfuellt |
| SA-03 | PF1 | SOLL | CAN-Bus als redundanter Kommunikationspfad verfuegbar | Bitrate, Norm | 1 Mbit/s, ISO 11898, SN65HVD230 | Redundanter Bremskreis | config_drive.h (can::bitrate: 1000000) | IT-08 (can_validation_test) | Erfuellt |
| SA-04 | ueberg. | MUSS | ROS-2-Topics fuer Sensorik, Aktorik und Navigation definiert | Topic-Liste, QoS | /odom, /scan, /imu, /cmd_vel, /cliff, /battery, /range/front | Signalliste CAN-DB | full_stack.launch.py, nav2_params.yaml | SV-03 | Erfuellt |
| SA-05 | ueberg. | MUSS | TF-Baum bildet Sensorpositionen korrekt ab | TF-Transformationen | base_link→laser (z=0,235 m, yaw=pi), base_link→ultrasonic_link (x=0,15 m, z=0,05 m) | Sensoreinbaulage | full_stack.launch.py (Audit D-F01/D-F02) | IT-04 (slam_validation) | Erfuellt |
| SA-06 | PF1 | MUSS | I2C-Bus bedient IMU, Batteriemonitor und Servotreiber | Taktrate, Adressen | 400 kHz, MPU6050 0x68, INA260 0x40, PCA9685 0x41 | LIN-Bus | config_sensors.h (master_freq_hz: 400000) | T-05 (sensor_test) | Erfuellt |
| SA-07 | ueberg. | SOLL | Benutzeroberflaeche kommuniziert ueber WebSocket und MJPEG | Ports, Protokoll | WS 9090 (wss://), MJPEG 8082 (https://), Vite 5173 | Infotainment-Bus | dashboard_bridge.py, vite.config.ts | IT-09 (dashboard_latency_test) | Erfuellt |
| SA-08 | PF3 | SOLL | Vision-Pipeline verbindet Hailo-Host mit Docker-Container | Transportprotokoll | Hailo Host → UDP 5005 → Docker → Gemini Cloud | ADAS-Ethernet | host_hailo_runner.py, hailo_udp_receiver_node | SV-02 | Erfuellt |
| SA-09 | PF1 | MUSS | XRCE-DDS-Middleware haelt MTU-Grenzen ein | MTU, Nachrichtengroesse | MTU 512 Bytes, Odom-Nachricht 725 Bytes (fragmentiert) | SOME/IP Middleware | micro-ROS-Konfiguration | T-08 (serial_latency_logger) | Erfuellt |
7 Sicherheitsanforderungen (SIA)
| ID | PF | Prio | Beschreibung | Messgroesse | Schwellwert | Kfz-Pendant | Referenz | Testfall-ID | Status |
| SIA-01 | PF1 | MUSS | Cliff-Erkennung stoppt Motoren innerhalb definierter Latenz | End-to-End-Latenz, Bremsweg | < 50 ms (Ist: 2,0 ms), Bremsweg 1,0 cm bei 0,2 m/s | AEB-Ansprechzeit | Messprotokoll P2 (Test 2.1), cliff_safety_node.py | T-07 (cliff_latency_test) | Erfuellt |
| SIA-02 | PF1 | MUSS | Ultraschall-Naeherungsstopp mit Hysterese gegen Flattern | Stopp-Schwelle, Freigabe-Schwelle | Stopp < 100 mm, Freigabe > 140 mm | AEB-Schwellen | cliff_safety_node.py (_obstacle_stop_m: 0,10) | T-05 (sensor_test) | Erfuellt |
| SIA-03 | PF1 | MUSS | CAN-Direktpfad leitet Cliff-Signal ohne ROS 2 an Fahrkern | CAN-Latenz | < 20 ms (ohne ROS 2) | Redundanter Bremskreis | config_sensors.h (id_cliff: 0x120), config_drive.h (id_cliff_rx: 0x120) | IT-08 (can_validation_test) | Erfuellt |
| SIA-04 | PF1 | MUSS | Failsafe-Timeout stoppt Motoren bei Verbindungsverlust | Timeout-Dauer | 500 ms → Motorenstopp (v=0, omega=0) | Watchdog-Timeout ECU | config_drive.h (failsafe_timeout_ms: 500) | T-01 (motor_test) | Erfuellt |
| SIA-05 | PF1 | MUSS | Watchdog-Alive-Counter erkennt Kommunikationsausfall | Fehlende Zyklen | 50 Zyklen → Verbindungsverlust | Alive-Counter CAN | config_drive.h (watchdog_miss_limit: 50) | T-01 (motor_test) | Erfuellt |
| SIA-06 | PF2 | MUSS | Costmap-Inflation haelt Sicherheitsabstand um Hindernisse | Inflationsradius | >= 0,25 m | Sicherheitsabstand StVO | nav2_params.yaml (inflation_radius: 0,25) | IT-05 (nav_test) | Erfuellt |
| SIA-07 | PF1 | MUSS | Firmware begrenzt Geschwindigkeit auf Hardware-Ebene | Geschwindigkeitslimit | Hardware-Limit im ESP32-Fahrkern | Geschwindigkeitsbegrenzer | config_drive.h (motor_max: 255, deadzone: 35) | T-01 (motor_test) | Erfuellt |
| SIA-08 | ueberg. | MUSS | Motor-Shutdown bei Unterspannung schuetzt Batterie | Abschaltspannung | < 9,5 V → Motorenstopp | Unterspannungsschutz BMS | config_sensors.h (threshold_motor_shutdown_v: 9,5) | T-05 (sensor_test) | Erfuellt |
| SIA-09 | ueberg. | MUSS | System- und BMS-Shutdown bei kritischer Unterspannung | Abschaltspannungen | < 9,0 V → System-Shutdown, < 7,5 V → BMS-Trennung | Tiefentlade-/Trennschutz | config_sensors.h (threshold_system_shutdown_v: 9,0 / threshold_bms_disconnect_v: 7,5) | T-05 (sensor_test) | Erfuellt |
| SIA-10 | ueberg. | MUSS | Hauptsicherung begrenzt maximalen Strom | Sicherungswert | 10 A (Audit P-F05: nicht 15 A) | Kfz-Sicherung | config_sensors.h (fuse_rating_a: 10,0) | — | Erfuellt |
8 Rueckverfolgbarkeitsmatrix
8.1 Testfall-Verzeichnis
Die folgende Tabelle ordnet jedem Testfall eine V-Modell-Pruefebene und eine Kfz-Testkategorie zu. Die Entry-Points stammen aus setup.py (30 Eintraege: 12 Runtime-Knoten + 18 Validierungsskripte).
| Testfall-ID | Skript (setup.py Entry-Point) | V-Modell | Kfz-Testkategorie |
| T-01 | motor_test | R1 (Komponente) | Pruefstandtest |
| T-02 | encoder_test | R1 (Komponente) | Pruefstandtest |
| T-03 | pid_tuning | R1 (Komponente) | Pruefstandtest |
| T-04 | imu_test | R1 (Komponente) | Pruefstandtest |
| T-05 | sensor_test | R1 (Komponente) | Pruefstandtest |
| T-06 | rplidar_test | R1 (Komponente) | Pruefstandtest |
| T-07 | cliff_latency_test | R1 (Komponente) | Pruefstandtest |
| T-08 | serial_latency_logger | R1 (Komponente) | Pruefstandtest |
| IT-01 | kinematic_test | R2 (Integration) | Fahrversuch |
| IT-02 | rotation_test | R2 (Integration) | Fahrversuch |
| IT-03 | straight_drive_test | R2 (Integration) | Fahrversuch |
| IT-04 | slam_validation | R2 (Integration) | Fahrversuch |
| IT-05 | nav_test | R2 (Integration) | Fahrversuch |
| IT-06 | nav_square_test | R2 (Integration) | Fahrversuch |
| IT-07 | docking_test | R2 (Integration) | Fahrversuch |
| IT-08 | can_validation_test | R2 (Integration) | Fahrversuch |
| IT-09 | dashboard_latency_test | R2 (Integration) | Fahrversuch |
| SV-01 | nav_square_test + Full Stack | R3 (System) | Typgenehmigung |
| SV-02 | docking_test + host_hailo_runner | R3 (System) | Typgenehmigung |
| SV-03 | Gesamtsystem (alle Phasen) | R3 (System) | Typgenehmigung |
8.2 Kreuztabelle Anforderung → Testfall → Projektfrage
| Anforderung | Testfall-IDs | PF | Kfz-Testkategorie | Messprotokoll |
| FA-01 | IT-04 | PF2 | Fahrversuch | P3 |
| FA-02 | IT-03 | PF2 | Fahrversuch | P1/P2 |
| FA-03 | IT-06 | PF2 | Fahrversuch | P4 |
| FA-04 | IT-05 | PF2 | Fahrversuch | P4 |
| FA-05 | IT-05 | PF2 | Fahrversuch | Kap. 6 (A-F02) |
| FA-06 | IT-03, T-01 | PF1 | Fahrversuch | P1/P2 |
| FA-07 | IT-02 | PF1 | Fahrversuch | P1/P2 |
| FA-08 | IT-09 | ueberg. | Fahrversuch | P5 |
| FA-09 | IT-04 | PF2 | Fahrversuch | — |
| FA-10 | IT-06, IT-07, SV-01 | PF2 | Typgenehmigung | P4 |
| FA-11 | IT-05 | PF2 | Fahrversuch | Kap. 6 (A-F02) |
| FA-12 | SV-03 | ueberg. | Typgenehmigung | P5 |
| FA-13 | IT-09 | ueberg. | Fahrversuch | P5 |
| FA-14 | SV-03 | ueberg. | Typgenehmigung | P5 |
| FA-15 | SV-02 | PF3 | Typgenehmigung | Kap. 6 |
| FA-16 | IT-07 | PF3 | Fahrversuch | P4 |
| FA-17 | SV-03 | PF3 | Typgenehmigung | P5 |
| NFA-01 | T-01, T-08 | PF1 | Pruefstandtest | P1/P2 |
| NFA-02 | T-06 | PF2 | Pruefstandtest | P3 |
| NFA-03 | T-02, T-08 | PF1 | Pruefstandtest | P3 |
| NFA-04 | T-04 | PF1 | Pruefstandtest | P2 |
| NFA-05 | IT-05 | PF2 | Fahrversuch | nav2_params.yaml |
| NFA-06 | IT-09 | ueberg. | Fahrversuch | Dashboard-Config |
| NFA-07 | IT-02 | PF2 | Fahrversuch | nav2_params.yaml |
| NFA-08 | — | ueberg. | — | Berechnung |
| NFA-09 | SV-03 | PF1 | Typgenehmigung | Kap. 6 |
| NFA-10 | T-08 | PF1 | Pruefstandtest | P1/P2 |
| NFA-11 | IT-04 | PF2 | Fahrversuch | P3 (A-F04) |
| NFA-12 | IT-05 | PF1 | Fahrversuch | Kap. 6 |
| SA-01 | T-08 | PF1 | Pruefstandtest | config_drive.h |
| SA-02 | T-08 | PF1 | Pruefstandtest | config_sensors.h |
| SA-03 | IT-08 | PF1 | Fahrversuch | config_drive.h |
| SA-04 | SV-03 | ueberg. | Typgenehmigung | full_stack.launch.py |
| SA-05 | IT-04 | ueberg. | Fahrversuch | full_stack.launch.py |
| SA-06 | T-05 | PF1 | Pruefstandtest | config_sensors.h |
| SA-07 | IT-09 | ueberg. | Fahrversuch | dashboard_bridge.py |
| SA-08 | SV-02 | PF3 | Typgenehmigung | host_hailo_runner.py |
| SA-09 | T-08 | PF1 | Pruefstandtest | micro-ROS-Config |
| SIA-01 | T-07 | PF1 | Pruefstandtest | P2 |
| SIA-02 | T-05 | PF1 | Pruefstandtest | cliff_safety_node.py |
| SIA-03 | IT-08 | PF1 | Fahrversuch | config_sensors.h |
| SIA-04 | T-01 | PF1 | Pruefstandtest | config_drive.h |
| SIA-05 | T-01 | PF1 | Pruefstandtest | config_drive.h |
| SIA-06 | IT-05 | PF2 | Fahrversuch | nav2_params.yaml |
| SIA-07 | T-01 | PF1 | Pruefstandtest | config_drive.h |
| SIA-08 | T-05 | ueberg. | Pruefstandtest | config_sensors.h |
| SIA-09 | T-05 | ueberg. | Pruefstandtest | config_sensors.h |
| SIA-10 | — | ueberg. | — | config_sensors.h |
8.3 Abdeckung nach Projektfrage
| Projektfrage | Anforderungen | Anzahl | Schwerpunkt |
| PF1 (Echtzeitarchitektur) | FA-06, FA-07, NFA-01, NFA-03, NFA-04, NFA-09, NFA-10, NFA-12, SA-01, SA-02, SA-03, SA-06, SA-09, SIA-01–SIA-05, SIA-07 | 19 | Regelfrequenz, Kommunikation, Sicherheit |
| PF2 (Navigationsgenauigkeit) | FA-01–FA-05, FA-09–FA-11, NFA-02, NFA-05, NFA-07, NFA-11, SIA-06 | 13 | SLAM, Navigation, Pfadverfolgung |
| PF3 (Navigation und Bedien- und Leitstandsebene) | FA-15, FA-16, FA-17, SA-08 | 4 | Vision, Docking, Sprachschnittstelle |
| Uebergreifend | FA-08, FA-12–FA-14, NFA-06, NFA-08, SA-04, SA-05, SA-07, SIA-08–SIA-10 | 11 | Bedienung, Batterie, Infrastruktur |
9 Offene Punkte
OP-01: Navigationsmesswerte ohne separates Messprotokoll (Audit A-F02)
Die Messwerte Positionsabweichung 6,4 cm und Winkelabweichung 4,2 Grad aus Kapitel 6 stammen aus einer Gesamtfahrt, nicht aus einem eigenstaendigen Messprotokoll. Ebenso fehlen separate Protokolle fuer Passierabstand (12 cm) und Recovery-Erfolgsquote (80 %). Kfz-Analogie: Eine Bremswegmessung fehlt im TUeV-Bericht — die Typgenehmigung erfordert einen eigenstaendigen Nachweis pro Pruefkriterium. Massnahme: Separates Messprotokoll (messprotokoll_phase3_nav.md) mit 10+ Einzelmessungen erstellen.
OP-02: ATE-Kenngroesse mehrdeutig (Audit A-F04)
Kapitel 6 nennt ATE 0,16 m als mittleren Fehler (Mean Absolute Error) der ersten Fahrt und ATE 0,03 m als RMSE der zweiten Fahrt. Beide Groessen sind mathematisch verschieden und duerfen nicht verglichen werden. Kfz-Analogie: Kraftstoffverbrauchsangabe nach NEFZ vs. WLTP — der angewandte Pruefzyklus bestimmt den Referenzwert. Massnahme: Einheitlich RMSE als Leitgroesse fuer NFA-11 festlegen und beide Fahrten mit derselben Metrik auswerten.
OP-03: Costmap-Aufloesung als Tradeoff (Architekturentscheidung)
Die SLAM- und Costmap-Aufloesung betraegt 0,05 m (config: mapper_params, nav2_params). Feinere Aufloesung erhoeht den RAM-Bedarf auf dem Pi 5, groebere Aufloesung verringert die Navigationsgenauigkeit. Kfz-Analogie: Die Rasterweite einer HD-Karte bestimmt den Speicherbedarf des Navigationsgeraets — hohe Aufloesung verbraucht mehr Onboard-Speicher. Massnahme: RAM-Verbrauch bei 0,05 m und 0,03 m Aufloesung messen und dokumentieren.
OP-04: Fehlende Einzelprotokolle fuer Systemkenngroessen
Folgende Ist-Werte stammen aus Kapitel 6, besitzen jedoch kein eigenes Messprotokoll: CPU-Last (< 80 %), RPP-Controller-Rate (> 2000 Hz), Hailo-Inferenzzeit (34 ms), Docker-Anteil (~35 %). Kfz-Analogie: Die Einzelabnahme (Motorleistung, Bremskraft, Abgaswerte) fehlt im Pruefbericht — nur die Gesamtfahrt wurde dokumentiert. Massnahme: Kenngroessen in vorhandene Messprotokolle als Anhang aufnehmen oder separates Systemprotokoll erstellen.
OP-05: Phase-5-Ergebnisse nicht in Kapitel 6 dokumentiert
Die fuenf Phase-5-Testfaelle (cmd_vel-Latenz, Telemetrie-Vollstaendigkeit, Deadman-Timer, Audio-Feedback, Notaus) wurden erfolgreich durchgefuehrt (Messprotokoll P5: 5/5 PASS), erscheinen jedoch nicht im Ergebniskapitel der Projektarbeit. Kfz-Analogie: Die HMI-Abnahme (Kombiinstrument, Warnleuchten, Sprachsteuerung) wurde durchgefuehrt, aber nicht im Pruefbericht erwaehnt. Massnahme: Phase-5-Ergebnisse in Kapitel 6 aufnehmen.
OP-06: Sprachschnittstelle konsolidiert (1 Knoten statt geplante 5)
Die urspruenglich geplanten fuenf Einzelknoten (ReSpeaker DoA, VAD, STT, Intent-Parser, Missionslogik) wurden in einem konsolidierten voice_command_node zusammengefuehrt. Die funktionale Anforderung F07 (KANN) bleibt erfuellt, die Definition-of-Done der Roadmap muss angepasst werden. Kfz-Analogie: Konsolidierung von fuenf Steuergeraeten (Lenkung, ESP, ABS, ASR, Bremse) zu einem Zentralrechner — die Funktion bleibt identisch, die Komponentenstruktur aendert sich. Massnahme: Roadmap-DoD fuer Meilenstein M-08 aktualisieren.
OP-07: Batterie-Laufzeit unbelegt (NFA-08)
Der Schwellwert >= 30 min unter Last basiert auf einer Berechnung (Samsung INR18650-35E, 3,35 Ah, 3S1P), nicht auf einer Messung unter realistischer Last (SLAM + Navigation + Dashboard + Vision). Kfz-Analogie: Die Reichweitenangabe erfolgt ohne WLTP-Messzyklus — nur die theoretische Berechnung aus Kapazitaet und Durchschnittsverbrauch liegt vor. Massnahme: Laufzeitmessung unter definierter Last (Full-Stack-Betrieb) durchfuehren und dokumentieren.
Anhang: Zusammenfassung der Firmware-Referenzwerte
Die folgenden kanonischen Parameter stammen aus den Firmware-Konfigurationsdateien und bilden die Grundlage fuer die quantitativen Schwellwerte dieser Anforderungsliste.
A.1 Fahrkern (config_drive.h v4.0.0)
| Parameter | Wert | Einheit | Kfz-Pendant |
| wheel_diameter | 65,67 | mm (kalibriert) | Reifenumfang |
| wheel_base | 178,0 | mm (kalibriert) | Radstand |
| ticks_per_rev_left | 748,6 | Ticks/U | Inkrementalgeber-Aufloesung |
| ticks_per_rev_right | 747,2 | Ticks/U | Inkrementalgeber-Aufloesung |
| control_loop_hz | 50 | Hz | ECU-Regelfrequenz |
| odom_publish_hz | 20 | Hz | CAN-Zykluszeit Radsensor |
| kp / ki / kd | 0,4 / 0,1 / 0,0 | PID-Koeffizienten | Motorsteller-Regelung |
| ema_alpha | 0,3 | Filterkoeffizient | Signalglaettung |
| max_accel_rad_s2 | 5,0 | rad/s^2 | Beschleunigungsbegrenzung |
| deadzone | 35 | PWM (0–255) | Totbereich Stellglied |
| motor_freq_hz | 20000 | Hz | PWM-Frequenz Inverter |
| failsafe_timeout_ms | 500 | ms | Watchdog-Timeout ECU |
| watchdog_miss_limit | 50 | Zyklen | Alive-Counter CAN |
A.2 Sensor- und Sicherheitsbasis (config_sensors.h v3.0.0)
| Parameter | Wert | Einheit | Kfz-Pendant |
| imu_sample_hz | 50 (eff. 30–35) | Hz | Abtastrate Beschleunigungssensor |
| cliff_publish_hz | 20 | Hz | Zykluszeit Kantenerkennung |
| us_publish_hz | 10 | Hz | PDC-Abtastrate |
| battery_publish_hz | 2 | Hz | BMS-Telemetrie |
| complementary_alpha | 0,98 | Gyro-Gewicht | Sensorfusionsfilter |
| threshold_motor_shutdown_v | 9,5 | V | Unterspannungs-Abschaltung |
| threshold_system_shutdown_v | 9,0 | V | System-Notabschaltung |
| threshold_bms_disconnect_v | 7,5 | V | BMS-Trennschuetz |
| pack_charge_max_v | 12,60 | V | Ladeschlussspannung |
| fuse_rating_a | 10,0 | A | Kfz-Hauptsicherung |
Erstellt nach VDI 2206, Stufe L1 (Lastenheft). Alle Schwellwerte gegen config_drive.h v4.0.0, config_sensors.h v3.0.0, nav2_params.yaml und Messprotokolle Phase 1–5 verifiziert. Kfz-Analogien dienen der didaktischen Einordnung und ersetzen keine formale ASIL-Einstufung nach ISO 26262.