feat: Safety Goals + Drive-Away-Assist + vollst. Traceability
Validate / build-test (macos-latest) (push) Failing after 4s
Validate / build-test (windows-latest) (push) Failing after 17s
Validate / build-test (ubuntu-latest) (push) Successful in 16s
Validate / reports (push) Has been skipped
Release / release (push) Successful in 48s
Validate / build-test (macos-latest) (push) Failing after 4s
Validate / build-test (windows-latest) (push) Failing after 17s
Validate / build-test (ubuntu-latest) (push) Successful in 16s
Validate / reports (push) Has been skipped
Release / release (push) Successful in 48s
Neue Layer: - safety/sg/SG-001..005 als eigene Doorstop-Items (ASIL D/D/A/C/B) - SYS-Reqs verlinken nach oben auf SG via frontmatter - Kette ist jetzt: SG -> SYS -> SA, SWE -> SWA -> Code (@arch) + Test (@reqs) Drive-Away-Assist im Safety Manager: - SWE-011 (Anfahrabsicht erkennen) implementiert - SWE-012 (Sicherheits-Check Tuer + Gurt) implementiert - Neuer State SAFETY_DRIVE_AWAY + safety_mgr_release_requested() - SafetyInputs erweitert um gas_pedal_percent, gear_in_drive, door_closed, seatbelt_fastened - 5 neue Tests (DRIVE_AWAY armed/blocked/end-conditions) - Test-Header @reqs erweitert auf SWE-007..012 traceability.py erweitert: - SG als neuer Top-Level - Code-Mapping-Check: @arch im Header von src/*.c muss SWA-id matchen - Test-Mapping-Check: @reqs im Header der Tests muss alle SWE der zugehoerigen SWA abdecken - HTML zeigt 7 Spalten: SG | SYS | SA | SWE | SWA | Code | Test - 2 zusaetzliche Tabellen: Code->Arch und Test->Reqs test_apply_controller.c: - @reqs Header um SWE-005 ergaenzt (war funktional drin, nur Tag fehlte) Counts: - 55 doorstop-Items (war 50) - 46 Unit-Tests (war 41) - Traceability vollstaendig in beide Richtungen
This commit is contained in:
+16
-5
@@ -1,20 +1,23 @@
|
||||
/**
|
||||
* @file safety_manager.h
|
||||
* @brief Safety Manager — Hill-Hold + Auto-Apply Logik.
|
||||
* @brief Safety Manager — Hill-Hold, Auto-Apply, Drive-Away-Assist.
|
||||
*
|
||||
* @arch SWA-001
|
||||
* @reqs SWE-007 SWE-008 SWE-009 SWE-010
|
||||
* @reqs SWE-007 SWE-008 SWE-009 SWE-010 SWE-011 SWE-012
|
||||
*
|
||||
* ASIL: D.
|
||||
*
|
||||
* State Machine:
|
||||
* IDLE --(engine_off & v<0.5)--> AUTO_APPLY_ARMED
|
||||
* IDLE --(engine_off & v<0.5 & !APPLIED)--> AUTO_APPLY_ARMED
|
||||
* AUTO_APPLY_ARMED --(40 * 50ms = 2s)--> AUTO_APPLY_TRIGGERED
|
||||
* AUTO_APPLY_TRIGGERED --(state==APPLIED)--> IDLE
|
||||
*
|
||||
* IDLE --(grade>5% & v<0.5 & brake)--> HILL_HOLD_ARMED
|
||||
* HILL_HOLD_ARMED --(!brake)--> HILL_HOLD_ACTIVE
|
||||
* HILL_HOLD_ACTIVE --(v>2 km/h | state==APPLIED)--> IDLE
|
||||
*
|
||||
* IDLE --(APPLIED & gas>10% & gear_drive & engine & door & belt)--> DRIVE_AWAY
|
||||
* DRIVE_AWAY --(state==RELEASED|RELEASING)--> IDLE
|
||||
*/
|
||||
#ifndef SAFETY_MANAGER_H
|
||||
#define SAFETY_MANAGER_H
|
||||
@@ -26,7 +29,8 @@ typedef enum {
|
||||
SAFETY_HILL_HOLD_ARMED = 1,
|
||||
SAFETY_HILL_HOLD_ACTIVE = 2,
|
||||
SAFETY_AUTO_APPLY_ARMED = 3,
|
||||
SAFETY_AUTO_APPLY_TRIGGERED = 4
|
||||
SAFETY_AUTO_APPLY_TRIGGERED = 4,
|
||||
SAFETY_DRIVE_AWAY = 5
|
||||
} SafetyState;
|
||||
|
||||
typedef struct {
|
||||
@@ -34,7 +38,12 @@ typedef struct {
|
||||
bool brake_pedal_pressed;
|
||||
float vehicle_speed_kmh;
|
||||
float grade_percent;
|
||||
EpbState current_state; /* aus Apply Controller */
|
||||
EpbState current_state; /* aus Apply Controller */
|
||||
/* Drive-Away-Assist Inputs (SWE-011, SWE-012) */
|
||||
float gas_pedal_percent; /* 0..100 */
|
||||
bool gear_in_drive; /* Vorwaerts oder Rueckwaerts */
|
||||
bool door_closed; /* Fahrertuer */
|
||||
bool seatbelt_fastened; /* Fahrer-Gurt */
|
||||
} SafetyInputs;
|
||||
|
||||
/* Schwellwerte als Konstanten, damit Tests darauf zugreifen koennen. */
|
||||
@@ -42,10 +51,12 @@ typedef struct {
|
||||
#define SAFETY_STANDSTILL_KMH 0.5f
|
||||
#define SAFETY_RELEASE_KMH 2.0f
|
||||
#define SAFETY_HILLHOLD_GRADE_PCT 5.0f
|
||||
#define SAFETY_DRIVE_INTENT_GAS_PCT 10.0f /* Gaspedal > 10% = Anfahrabsicht */
|
||||
|
||||
EpbStatus safety_mgr_init(void);
|
||||
void safety_mgr_step_50ms(const SafetyInputs* in);
|
||||
bool safety_mgr_apply_requested(void);
|
||||
bool safety_mgr_release_requested(void); /* Drive-Away-Assist */
|
||||
SafetyState safety_mgr_get_state(void);
|
||||
|
||||
#endif /* SAFETY_MANAGER_H */
|
||||
|
||||
Reference in New Issue
Block a user