Projekt

Allgemein

Profil

Aktionen

Fehler #20

geschlossen
JH

Trägheitsmodell Fahrrad — Einheitenfehler in CalculateNextBikeSpeed führt zu unrealistisch schneller Beschleunigung

Fehler #20: Trägheitsmodell Fahrrad — Einheitenfehler in CalculateNextBikeSpeed führt zu unrealistisch schneller Beschleunigung

Von Julius Haman vor 22 Tagen hinzugefügt. Vor 21 Tagen aktualisiert.

Status:
Erledigt
Priorität:
Normal
Zugewiesen an:
-
Zielversion:
Beginn:
Abgabedatum:
% erledigt:

100%

Geschätzter Aufwand:
Gefunden in Version:

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 speedSoll weiterhin aktiv (Bestandsverhalten bei Sollwert)
  • Anfahr-/Ausroll-Verlauf im Simulator geprüft (20–40 s Anfahrzeit)
Aktionen

Auch abrufbar als: PDF Atom