Fehler #20
geschlossenTrägheitsmodell Fahrrad — Einheitenfehler in CalculateNextBikeSpeed führt zu unrealistisch schneller Beschleunigung
100%
Beschreibung
Beschreibung¶
Die trägheitsbehaftete Geschwindigkeitsanpassung im Fahrrad-Ergometer rechnet Leistung wie Energie und erzeugt so eine physikalisch falsche Beschleunigung.
ErControl.Core/Model/ErgometerSpeedCalculator.cs:67 (CalculateNextBikeSpeed):
decimal pDiff = powerActual - pSoll;
if (pDiff > 0)
{
speed += (decimal)Math.Sqrt(2 * (double)pDiff / (BikeWeight + userWeight));
speed = Math.Min(speedSoll, speed);
}
else
{
speed -= (decimal)Math.Sqrt(-2 * (double)pDiff / (BikeWeight + userWeight));
speed = Math.Max(speedSoll, speed);
}
Problem¶
Die Formel lautet im Kern:
$$v_{\text{neu}} = v \pm \sqrt{\frac{2,|P_{\text{ist}} - P_{\text{soll}}|}{m}}$$
Das ist dimensional falsch: $\sqrt{P/m}$ liefert $\frac{\text{m}^{3/2}}{\text{s}^{3/2}}$, nicht m/s – Leistung $P$ wird wie Energie $E$ behandelt. Korrekt ist die Energiebilanz pro Tickschritt $\Delta t$:
$$v_{\text{neu}} = \sqrt{v^2 \pm \frac{2,\Delta P,\Delta t}{m}}$$
(mit $\Delta t$ = Intervall in Sekunden; ohne $\Delta t$ bleibt der Fehler bestehen, da $v^2$ in der Wurzel fehlt).
Auswirkung / Zahlenbeispiel¶
75 kg Fahrer + 10 kg Rad, 250 W, flach (cwA 0,25, cr 0,006, ρ 1,2041 kg/m³), Takt 1 s. Stationäre Endgeschwindigkeit ≈ 11,76 m/s (~42 km/h):
| Sekunde | Aktuell (Code) | Korrekt (Energiebilanz) |
|---|---|---|
| 1 | 2,43 | 2,43 |
| 3 | 7,00 | 4,10 |
| 6 | 11,24 | 5,63 |
| 7 | 11,76 (Soll erreicht) | 6,02 |
| 20 | 11,76 | 8,94 |
| 40 | 11,76 | 10,39 |
- Aktuell: Beschleunigung 0 → 42 km/h in ~7 s (zu schnell, reale Räder brauchen 20–40 s).
- Ausrollen mit 0 W ab 10 m/s: aktueller Stoß auf ~1 m/s in ~10 s, physikalisch dauert ~40 s+.
Vorschlag Fix¶
// Simulationstakt (s) als Parameter/konstante annehmen, z. B. dt = 1.0
double v2 = (double)speed * (double)speed;
double dv2 = 2 * (double)pDiff * dt / (BikeWeight + userWeight);
speed = (decimal)Math.Sqrt(Math.Max(0, v2 + Math.Sign(pDiff) * dv2));
// anschließend Clamp wie bisher
Hinweis: delta t berücksichtigen (aktuell implizit 1 s) und untere Grenze (≥ 0) sichern, da bei starkem Überschuss der Radikand negativ werden kann.
Akzeptanzkriterien¶
- Einheitenkorrektur umgesetzt ($v^2 + 2\Delta P \Delta t / m$ unter der Wurzel)
- Kein Absturz bei negativem Radikanden (Clamp auf 0)
- Clamping auf
speedSollweiterhin aktiv (Bestandsverhalten bei Sollwert) - Anfahr-/Ausroll-Verlauf im Simulator geprüft (20–40 s Anfahrzeit)