Feature #99
Von Julius Haman vor 2 Tagen aktualisiert
## Ist-Stand Standard-Gangschaltung hat 14 Gänge mit Entfaltung in m. Aus der Trittfrequenz und der Entfaltung wird eine "Sollgeschwindigkeit" berechnet. Daraus wiederum wird die Leistung berechnet, die aufgebracht werden müsste, um diese Geschwindigkeit im jeweiligen Gelände zu erreichen. Das führt zu Sprüngen in der Leistung (unruhiges Fahren) und auch dazu, dass bei einem Gefälle schnell auf die Minimalleistung (25 Watt) heruntergeregelt wird. Auch im höchsten Gang, wenn die Maximalgeschwindigkeit noch nicht erreicht ist. (Vorherige Lösungsversuche dazu: Ticket #95 - Beschleunigungsformel, verworfen wegen Leistungs-Oszillation bei normalem Trittfrequenz-Rauschen. Ticket #97 - linearer Differenz-Zuschlag, verworfen wegen Wirkungslosigkeit bei starkem Gefälle. Ticket #98 - feste Referenz-Kadenz + Gefälle-bis-Sollgeschwindigkeit-als-eben, funktionierte im Regelfall, aber Freilauf-Ausstieg in einen härteren Gang erzeugte weiterhin einen unrealistischen Leistungssprung, siehe unten.) ## Soll-Stand (beschlossenes Konzept) Statt einer Entfaltung je Gang gibt man künftig eine Wattleistung (bei 0% Steigung) direkt an - konfigurierbar über eine Basisleistung (Gang 1 bei 0%) und eine Schrittweite zwischen den Gängen. Aus dem eingelegten Gang und der Steigung im Profil kann dann berechnet werden, welche Leistung erbracht werden müsste. Zusammen mit einem konfigurierten Realitätsfaktor (10 % - 100 % einstellbar in 5 %-Schritten) kann dann die tatsächlich aufgeschaltete Leistung berechnet werden - NUR bei Steigungen (siehe Gefälle-Regel unten für Gefälle): Leistung(Gang, Steigung) = P0(Gang) + Steigungsaufschlag(Steigung) * Realitätsfaktor Wichtig (Nachbesserung nach Live-Test, ersetzt eine frühere, fehlerhafte Zwischenversion dieser Formel): Der Steigungsaufschlag wird NICHT je Gang einzeln an dessen eigener 0%-Sollgeschwindigkeit berechnet, sondern EINMAL an der festen Referenzgeschwindigkeit von Gang 1 (unabhängig vom tatsächlich eingelegten Gang) und dann auf alle Gänge gleichermaßen aufaddiert: Steigungsaufschlag(Steigung) = P_Steigung(speedRef, Steigung) - Basisleistung, mit speedRef = Geschwindigkeit von Gang 1 bei 0 % Steigung Grund: mit einer je Gang eigenen Referenzgeschwindigkeit wuchs der Steigungs-Effekt bei höheren Gängen überproportional und multiplizierte sich mit dem Realitätsfaktor in den Abstand zwischen benachbarten Gängen hinein - beim Live-Test sprang die Leistung bei steiler Steigung teils um ein Vielfaches der Schrittweite von einem Gang zum nächsten, statt exakt um die Schrittweite. Mit der festen Referenzgeschwindigkeit gilt jetzt, bei jeder Steigung (eben, bergauf, bergab) und jedem Realitätsfaktor: der Leistungsabstand zwischen benachbarten Gängen ist immer exakt die konfigurierte Schrittweite ("ein Gang rauf = 1x Schrittweite, ein Gang runter = 1x Schrittweite - egal welche Steigung"). Nur die "Giftigkeit" der Steigung selbst (wie viel Watt der GLEICHE Gang bei mehr Prozent zusätzlich braucht) bleibt vom Realitätsfaktor abhängig, jetzt für alle Gänge gleich stark statt vorher überproportional bei höheren Gängen. Bei Steigung = 0 ist der Aufschlag immer exakt 0, Gang 1 ergibt auf der Ebene also unabhängig vom Realitätsfaktor immer genau die konfigurierte Basisleistung. Beispielrechnung mit Basisleistung 80 W, W und Schrittweite 10 W, Realitätsfaktor 50 % W (Nutzergewicht 75 kg, Standard-Cr/CwA) - man beachte den überall exakt gleichen Abstand von 10 W zwischen den Zeilen, in jeder Spalte: Standard-Cr/CwA): | Gang | Leistung bei 0% | Geschwindigkeit bei 0% | Watt bei gleicher Geschw. bei 1% | Watt bei gleicher Geschw. bei 5% | Watt bei 12,9% | | ----: | ----: | ----: | ----: | ----: | | 1 | 80 W | 108,2 W 24,3 km/h | 220,5 136 W | 440,4 361 W | | 2 | 90 W | 118,2 W 25,6 km/h | 230,5 149 W | 450,4 387 W | | 3 | 100 W | 128,2 W 26,9 km/h | 240,5 162 W | 460,4 411 W | | 4 | 110 W | 138,2 W 28,0 km/h | 250,5 175 W | 470,4 434 W | | 5 | 120 W | 148,2 W 29,1 km/h | 260,5 187 W | 480,4 457 W | | 6 | 130 W | 158,2 W 30,1 km/h | 270,5 200 W | 490,4 478 W | | 7 | 140 W | 168,2 W 31,1 km/h | 280,5 212 W | 500,4 499 W | | 8 | 150 W | 178,2 W 32,0 km/h | 290,5 224 W | 510,4 520 W | | 9 | 160 W | 188,2 W 32,8 km/h | 300,5 236 W | 520,4 540 W | | 10 | 170 W | 198,2 W 33,7 km/h | 310,5 248 W | 530,4 559 W | | 11 | 180 W | 208,2 W 34,5 km/h | 320,5 260 W | 540,4 579 W | | 12 | 190 W | 218,2 W 35,2 km/h | 330,5 272 W | 550,4 597 W | | 13 | 200 W | 228,2 W 36,0 km/h | 340,5 283 W | 560,4 616 W | | 14 | 210 W | 238,2 W 36,7 km/h | 350,5 295 W | 570,4 634 W | (12,9 Aus dem eingelegten Gang und der Steigung im Profil kann dann berechnet werden, welche Leistung erbracht werden müsste. Zusammen mit einem konfigurierten Realitätsfaktor (10 % ist - 100 % einstellbar in 5 %-Schritten) kann dann die tatsächlich aufgeschaltete Leistung berechnet werden - NUR bei Steigungen (siehe Gefälle-Regel unten für Gefälle): Leistung = P0(Gang) + (P_Steigung(Gang) - P0(Gang)) * Realitätsfaktor Beispiel: Bei einem Realitätsfaktor von 50 %, Gang 1, Steigung aus Julius' Live-Test-Meldung: Gang von 1 liegt dort mit 440,4 W bereits über dem Geräte-Maximum % ergäbe sich eine Leistung von 400 80 W + (136 W - erwartungsgemäß, da bei so einer Steigung selbst der 1. Gang schon voll ausgelastet ist; erst ab etwa Gang -4 (390,4 80 W) fällt die Leistung wieder unter das Maximum.) * 50 % = 108 W. Bei 5 % Steigung: 80 W + (361 W - 80 W) * 50 % = 220,5 W, gerundet 220 W. Wichtig (Julius' Punkt 2, bestätigt): Die Rohwerte (P_Steigung) werden VOR der Realitätsfaktor-Verrechnung nicht auf Minimum/Maximum geklemmt - sonst würde die Information verzerrt, bevor überhaupt interpoliert wird. Geklemmt wird erst das fertige Mischergebnis. Negative Gänge bleiben weiterhin möglich (Basisleistung minus n * Schrittweite, nach unten durch das Geräte-Minimum begrenzt). **Gang-Anzahl nach oben UND unten offen** (entschieden, kein festes 14-Gänge-Limit mehr): Schalten Hochschalten ist in beide Richtungen erlaubt, solange die bei der AKTUELLEN Steigung tatsächlich fällige (ungeklemmte) Leistung des nächsten Gangs (Basisleistung + Gang * Schrittweite) innerhalb der aktuellen Gangs noch nicht die Geräte-Grenze in Schaltrichtung erreicht hat Geräte-Leistungsspanne bleibt (die bereits vorhandene, geräteabhängige Live-Leistungsspanne, Ticket #40) - nicht die Ebene-Leistung P0(Gang), da die sonst bei steiler Steigung ein sinnvolles Weiterschalten blockieren würde, obwohl die real anliegende Leistung noch weit von der Geräte-Grenze entfernt ist. #40). Dadurch variiert die tatsächliche Gang-Anzahl je nach Basisleistung/Schrittweite/Realitätsfaktor, Basisleistung/Schrittweite und je nach aktueller Steigung UND je nach angeschlossenem Ergometer (unterschiedliche Maximalleistung). Maximalleistung), z. B. mal 15, mal 18 nutzbare Gänge. Herunterschalten analog durch das Geräte-Minimum begrenzt. ## Gefälle und Rollen (Freilauf) Bei Gefälle wird IMMER die Standardleistung des eingelegten Gangs bei 0% (P0) aufgeschaltet - keine Realitätsfaktor-Verrechnung bei Gefälle, nur bei Steigungen. Das gilt unabhängig davon, wie steil das Gefälle ist - P0(Gang) bleibt durchgehend bestehen (wächst mit dem Gang), bis einer der beiden folgenden Freilauf-Trigger greift. **Rollen (Freilauf) greift in genau zwei Fällen:** 1. Trittfrequenz 0 (der ursprüngliche Zweck des Freilaufs, siehe die frühere Änderung "Freilauf bergab bei virtueller Gangschaltung") - Beine hören auf zu treten, das Rad rollt bei Gefälle trotzdem weiter, statt sofort auf P0(Gang)-Widerstand zu treffen bzw. auf 0 km/h gezwungen zu werden. 2. Die Rollgeschwindigkeit erreicht die konfigurierte Maximalgeschwindigkeit des Fahrrades. Klarstellung nach genauerer Prüfung: Julius' ursprüngliche dritte Formulierung ("Beschleunigung durchs Gefälle > Beschleunigung durch die aufgelegte Leistung") ist bei einem sinnvoll konfigurierten, immer positiven P0(Gang) rechnerisch nie zusätzlich erfüllbar - jede positive Leistung beschleunigt per Definition stärker als reine Schwerkraft allein. Diese dritte Bedingung entfällt daher ersatzlos; nur die zwei oben genannten Trigger bleiben. ## Neue, nutzerbezogene Einstellungen (alle auch während eines laufenden Trainings änderbar) - Basisleistung Gang 1 bei 0 % Steigung - Schrittweite zwischen den Gängen - Realitätsfaktor (10 % - 100 %, 5 %-Schritte) - Maximalgeschwindigkeit des Fahrrades (z. B. 70 km/h) ## Verifikation durchgeführt (Nachsimulation gegen echte Trainingsdaten, Training #14) Mit den Beispielwerten oben (Basisleistung 80 W, Schrittweite 10 W, Realitätsfaktor 50 %, Maximalgeschwindigkeit 70 km/h) gegen die echten, tickweise rekonstruierten Gangwechsel aus Training #14 durchgerechnet (nach Korrektur der Freilauf-Logik, siehe oben): - Bergauf (Gänge 3-5, Steigung ~4,1 %): Leistung steigt stabil und gangabhängig, gangabhängig (240-270 W in diesem Beispiel), keine Sprünge zwischen den Ticks. - Übergang ins Gefälle: Leistung sinkt sauber mit P0(Gang) mit, kein künstliches Kleben am Minimum. - Steile Abfahrt (-8,2 %), Gang schaltet automatisch bis auf 14 hoch: Widerstand bleibt die GESAMTE Abfahrt über spürbar und wächst mit dem Gang, Gang (120 W in Gang 5 bis 210 W in Gang 14), kein einziger Freilauf-Einstieg, da die simulierte Geschwindigkeit die Maximalgeschwindigkeit (70 km/h) nicht erreicht und weiterhin getreten wird. Geschwindigkeit steigt dabei sauber von 21,9 auf 50,8 km/h. - Bodenanstieg am Ende: Leistung nimmt wieder sauber zu, zu (210 auf 400 W, am Maximum geklemmt), passend zur Steigung. Insbesondere das an Ticket #98 aufgefallene Problem (Freilauf in einem Gang verlassen, in einen härteren Gang schalten, Leistung springt sofort auf ~370 W) tritt hier nicht mehr auf: P0(Gang) ist eine feste, moderate Konstante (nicht mehr aus einer physikalisch berechneten, oft extremen Zielgeschwindigkeit rückgerechnet) und wächst beim Hochschalten nur um die konfigurierte Schrittweite, nicht sprunghaft. Live-Test (2026-09-28, nach der Grundumsetzung): Basisformel bestätigt, aber zwei Nachbesserungen nötig, beide umgesetzt und wieder live zu testen: (1) die oben beschriebene Entkopplung von Gang-Spreizung und Steigungs-Giftigkeit, (2) die Schaltgrenze prüft jetzt die Leistung des AKTUELLEN statt des NÄCHSTEN Gangs gegen die Geräte-Grenze (verhindert Hängenbleiben bei extremer Steigung, siehe oben). ## Umbau In diesem Zug wird der gesamte Bereich der (Entfaltung-basierten) Gangschaltungs-Konfiguration zurückgebaut (Gearshifter/Gear-Entities, Konfigurationsoberfläche, Prefs.Gearshifter) - ersetzt durch die vier neuen Einstellungen oben. Umgesetzt und committet (siehe Commit-Historie). ## Verzögerte Leistungsänderung (asymmetrische Rampe) Beschlossen: Leistungsänderungen werden nur bei einem ANSTIEG verzögert (z. B. maximal +80 W pro Sekunde) - ein Rückgang (auch der Einstieg in den Freilauf) wirkt weiterhin sofort. Begründung: eine plötzliche Entlastung fühlt sich nie falsch an, ein plötzlicher Kraftanstieg (z. B. Freilauf verlassen, in einen härteren Gang schalten) dagegen schon. ## Zielleistung in der Live-Anzeige Beschlossen: Zusätzlich zur aktuell aufgeschalteten (ggf. noch hochlaufenden) Leistung wird in der Live-Werte-Leiste die "Zielleistung" (das ungebremste Rechenergebnis, wohin die Rampe unterwegs ist) angezeigt, solange die Gangschaltung aktiv ist - damit erkennbar ist, wohin sich die Leistung durch Steigungsänderung oder Schalten gerade entwickelt. ## Noch offen - Genaue Rampen-Geschwindigkeit (Watt pro Sekunde) - Startwert versus fest codierte Konstante oder eigene Einstellung. Wird beim Live-Test festgelegt. - Aktuell im Live-Test bei Julius: Gang-Spreizung bei steilen Rampen, Verhalten der Schaltgrenzen, Rampen-Gefühl.