OmegaSim Wiki – die Idee dazu stammt von Gnen54. Hier stehen die offenen Artikel von Nutzer Luuke42 unter der Lizenz CC BY-SA 4.0.
Fahrverhalten
Stand dieses Artikels: OmegaSim 1.2.9 vom 26.10.2026 · Firmware des Autos: nicht bekannt (OmegaSim liest die Firmware-Version nicht aus)
Dieser Text wurde mithilfe von KI erstellt (Claude) und ist nicht in jedem Punkt von Menschen geprüft. Fehler bitte direkt verbessern oder auf der Diskussionsseite melden, siehe Mitmachen. Die öffentliche Fassung auf luuke42.github.io/omegasim kann älter sein als der hier beschriebene Stand.

Das Fahrverhalten von OmegaSim ist die Art, wie die App aus den Eingaben am Controller (Gas, Bremse, Lenkung) die zwei Steuerwerte berechnet, die per Bluetooth Low Energy an ein Carrera HYBRID-Auto gehen: einen Gaswert und einen Lenkwert. Dazwischen liegt ein vollständiges Fahrzeugmodell mit Motor, Getriebe, Reibkreis, Gewichtsverlagerung, Reifen- und Bremsentemperatur, einem Einspurmodell und, im Fahrgefühl Pacejka, einer Reifenkennlinie nach der Magic Formula. Das echte Modellauto rutscht, bremst und lenkt dabei mit seiner eigenen Firmware; was das Modell der App berechnet, wirkt am Auto ausschließlich über diese zwei Bytes. Abgestimmt wird das Fahrverhalten über neun fertige Sätze von Reglerwerten, die Fahrgefühle (in der App auch Voreinstellungen oder Presets genannt), und über rund 45 einzelne Regler.
Auf einen Blick
| Merkmal | Wert |
|---|---|
| Menüpfad | Optionen → Fahrgefühl; Kurzwahl in FAHREN, in der Garage und am Cockpit-Knopf |
| Fahrgefühle | Arcade, Sim+, Pacejka (in FAHREN, Garage, Cockpit); Pro, GT3, F1, Realismus GT3, Omega, RC (nur in den Optionen) |
| Vorgabe nach Neuinstallation | die Werte im Markup entsprechen dem Fahrgefühl Pacejka (Steuerungsmodus Pacejka, sonst Pro-Werte) |
| Steuerungsmodi | Physik, Pacejka, RC („Aus“) |
| Mechanischer Lenkanschlag | 45 Grad, Konstante STEER_MAX_DEG
|
| Sendetakt | 45 ms (CONTROL_SEND_INTERVAL_MS), also gut 22 Pakete je Sekunde
|
| Status | Physik stabil; Pacejka experimentell; RC in Arbeit (WIP); Fahrgefühl je Spieler seit 1.2.4 |
| Seit Version | Physikmodell seit den 0.4-Fassungen, Pacejka seit 0.8, Omega seit 1.0.36, Sim+ seit 0.10.5, RC seit 1.0.22 |
| Quelldateien | src/40-physics.js, src/50-drive.js, src/98-presets.js, src/49-spieler.js, src/30-input.js, src/20-protocol.js
|
Grundlagen
Dieser Abschnitt erklärt die Begriffe, die weiter unten gebraucht werden. Wer sie kennt, kann ihn überspringen; Fachbegriffe stehen auch im Glossar.
Was ein Physikmodell ist
Ein Physikmodell ist ein Programmteil, das ein reales Objekt mit Zahlen nachbildet. OmegaSim führt für jedes gesteuerte Auto eine solche Nachbildung: eine Geschwindigkeit, eine Motordrehzahl, einen eingelegten Gang, vier Reifentemperaturen und so weiter. Diese Zahlen heißen Zustand. Das Modell kennt Regeln, wie sich der Zustand ändert, zum Beispiel „Vollgas im 2. Gang erhöht die Geschwindigkeit um so und so viel je Sekunde“.
Was ein Simulationsschritt ist
Ein Computer kann nicht stetig rechnen, sondern nur in kleinen Zeitstücken. Ein Simulationsschritt (auch Takt) rechnet den Zustand um eine kurze Zeitspanne dt weiter. In OmegaSim läuft der Schritt im Sendetakt von 45 ms. Das einfachste Verfahren dafür ist das Euler-Verfahren:
neuer Wert = alter Wert + Änderungsrate × dt Beispiel: Tempo 2,0 + Beschleunigung 0,5 je s × 0,045 s = 2,0225
Bei sehr schnellen Vorgängen kann dieses einfache Verfahren „überschießen“ und instabil werden. Das Einspurmodell verwendet deshalb ein halbimplizites Verfahren, bei dem die neuen Werte in der Gleichung schon mitstehen (siehe unten).
Drehmoment und Übersetzung
Das Drehmoment ist die Drehkraft des Motors. Ein Rennmotor hat bei niedriger Drehzahl wenig und bei mittlerer bis hoher Drehzahl am meisten Drehmoment; diese Abhängigkeit heißt Drehmomentkurve. Die Übersetzung eines Gangs sagt, wie oft sich der Motor dreht, während sich das Rad einmal dreht. Ein kurzer Gang (große Übersetzung, z. B. 3,75) bringt viel Kraft ans Rad, aber wenig Endgeschwindigkeit; ein langer Gang (z. B. 0,88) umgekehrt. Daraus folgt die Aufgabe des Schaltens: den Motor in dem Drehzahlbereich halten, in dem er viel Drehmoment hat.
Reibkreis und Schlupf
Ein Reifen kann nur eine begrenzte Gesamtkraft auf die Straße bringen. Diese Kraft lässt sich aufteilen: in Längskraft (Beschleunigen oder Bremsen) und Querkraft (Kurvenfahrt). Zeichnet man beide als Achsen, liegt die Grenze ungefähr auf einem Kreis, dem Reibkreis. Wer in der Kurve schon viel Querkraft braucht, hat für Gas oder Bremse nur noch den Rest:
Längsanteil = √(1 − Queranteil²) Beispiel: Queranteil 0,6 → Längsanteil √(1 − 0,36) = 0,8
Schlupf ist der Unterschied zwischen der Bewegung des Reifens und der Bewegung, die er ohne Rutschen hätte. Seitlich heißt der Winkel zwischen Fahrtrichtung des Rads und Ausrichtung des Rads Schräglaufwinkel. Ein Reifen baut Kraft über Schlupf auf: erst fast proportional, dann flacher, und hinter einem Scheitel sogar wieder weniger.
Reifenkennlinie und Magic Formula
Die Reifenkennlinie ist die Kurve „Seitenkraft über Schräglaufwinkel“. Die Magic Formula von Hans B. Pacejka (Pacejka und Bakker, 1992) ist eine bekannte Formel, die diese Kurve mit vier Zahlen nachbildet:
y(u) = sin( C · atan( B·u − E·(B·u − atan(B·u)) ) )
Bstreckt die Kurve waagerecht (Steifigkeit),Cbestimmt ihre Form (Werte um 1,3 sind typisch für Seitenkraft),Dist die Höhe des Scheitels, also die größte Kraft,Eformt den Bereich um den Scheitel (negativ: ausgeprägter Scheitel, danach stärkerer Abfall).
Anschaulich: Bis zum Scheitel bringt mehr Einschlag mehr Kraft. Hinter dem Scheitel bringt mehr Einschlag nichts mehr oder sogar weniger, das Auto schiebt geradeaus (Untersteuern an der Vorderachse) oder das Heck bricht aus (Übersteuern an der Hinterachse).
Gewichtsverlagerung
Beim Bremsen verlagert sich Gewicht nach vorn, beim Beschleunigen nach hinten. Eine stärker belastete Achse kann mehr Kraft übertragen, allerdings nicht im selben Verhältnis (der Reifen ist „lastempfindlich“). Daraus entsteht das Trail-Braking: Leichtes Bremsen beim Einlenken belastet die Vorderräder und macht die Lenkung kurz besser, starkes Bremsen braucht den Reibkreis dagegen auf.
Wie aus einer Zahl ein Funkbefehl wird
Das Auto versteht kein „Tempo 2,0“, sondern nur ein Datenpaket aus 20 Bytes. Ein Byte hat 8 Bits und kann 256 Werte darstellen, 0 bis 255, hexadezimal geschrieben 0x00 bis 0xFF (siehe Hexadezimalsystem). Beispiel: 0x51 = 5·16 + 1 = 81 dezimal = 01010001 binär. Für Lenkung und Gas braucht man auch negative Zahlen. Dafür gibt es das Zweierkomplement: −1 wird als 255 (0xFF) geschrieben, −63 als 193 (0xC1), +127 als 127 (0x7F). Am Ende jedes Pakets steht eine Prüfsumme (CRC-8), an der das Auto erkennt, ob das Paket unbeschädigt angekommen ist. Wie die App aus dem Modell genau diese Bytes macht, steht im Abschnitt Vom Modell zum Funkbefehl; das Paket selbst beschreibt die Seite Carrera HYBRID.
Bedienung
Ein Fahrgefühl wählen
- FAHREN öffnen und die Kachel Fahrgefühl antippen, oder in der Garage beim gesteuerten Auto die Zeile „Fahrgefühl“ benutzen. Dort stehen Arcade, Sim+ und Pacejka.
- Für die übrigen sechs Sätze Optionen → Fahrgefühl → Voreinstellungen öffnen. Die Reihenfolge dort ist Arcade, Sim+, Pacejka, Pro, GT3, F1, Realismus GT3, Omega, RC.
- Ein Tipp setzt alle Regler des Satzes auf einmal. Die Statuszeile meldet „Name: n Regler gesetzt“; fehlende Regler werden dort genannt.
- Im Cockpit schaltet der Fahrmodus-Knopf zwischen Arcade, Sim+ und Pacejka weiter, und zwar ab dem gerade eingestellten Satz. Während einer Challenge ist der Knopf gesperrt.
- Unter den Knöpfen steht die Beschreibung des aktiven Satzes. Weicht ein einziger Regler von allen Sätzen ab, steht dort „Eigene Abstimmung“.
Eine eigene Abstimmung sichern und weitergeben
- Regler unter Optionen → Fahrgefühl einstellen.
- Unter „Abstimmung ablegen“ einen Namen eintragen und Ablegen tippen (Speicher
chc.presets.v1auf dem Gerät). Dieselbe Ablage gibt es in der Garage. - Zum Weitergeben In Text tippen: das Textfeld enthält dann alle Regler als JSON. Den Text kopieren und auf einem anderen Gerät einfügen, dann Übernehmen. Werte außerhalb eines Reglerbereichs werden abgelehnt, unbekannte Regler werden übergangen und gemeldet.
- Standard wiederherstellen in der Garage setzt alle Regler auf die Werte zurück, mit denen sie ausgeliefert werden.
Fahrgefühl je Spieler
- In der Garage einem Auto die Rolle Spieler 2 oder Spieler 3 geben.
- In dessen Zeile „Fahrgefühl“ zwischen „wie Spieler 1“ (Vorgabe), Arcade, Sim+ und Pacejka wählen.
- Spieler 1 stellt weiterhin die Regler unter Optionen ein. Sie gelten für alle Spieler ohne eigenes Fahrgefühl.
Rückwärts fahren
- Mit Automatik: Quadrat (Xbox: X) legt unterhalb von 10 km/h den Rückwärtsgang ein, Kreis (B) holt ihn heraus.
- Ohne Automatik: unter dem 1. Gang liegt der Leerlauf, darunter im Stand der Rückwärtsgang.
- Wahlweise (experimentell): Rückwärtsgang: Gas und Bremse zusammen einschalten; dann im Stand beide Pedale zugleich drücken.
Einstellungen
Alle Regler liegen unter Optionen → Fahrgefühl, wenn nicht anders angegeben. „Standard“ ist der Wert im ausgelieferten Markup (der beim ersten Start gilt). Die Spalte „Wirkung“ beschreibt, was der Code mit dem Wert macht.
| Name in der App | Bereich | Standard | Wirkung (aus dem Code) | Interne ID → Modellgröße |
|---|---|---|---|---|
| Voreinstellungen | 9 Knöpfe | – | setzt einen ganzen Satz von Reglern, siehe Tabelle | preset-buttons
|
| Steuerungsmodus (ausgeblendet seit 1.0.22) | Physik, Pacejka, RC | Pacejka | wählt den Rechenweg; hängt seitdem am Fahrgefühl | phys-mode → physicsEnabled, config.pacejka
|
| Übersteuern (Pacejka), unter Optionen → Allgemein | an/aus | aus | erlaubt dem Pacejka-Modus, von sich aus in die Kurve einzulenken | setting-pac-ueber → pacejkaUebersteuern
|
| Haftgrenze (Pacejka, ausgeblendet) | 40 bis 120 % | 70 % | Querausnutzung, bei der der Reifen am Scheitel ist | setting-pac-grenze → pacejkaGrenze
|
| Layout | 5 Fahrzeuge | Neutral | Achslast vorn, Radstand, Gierträgheit; von Voreinstellungen nicht berührt | setting-layout
|
| Getriebe | GT3, F1, 412P | GT3 | Gangzahl, Übersetzungen, Schaltdrehzahlen, Schaltzeit | setting-gearbox
|
| Gasfaktor | 20 bis 200 % | 180 % | Faktor auf das ausgehende Gasbyte (nur vorwärts, nicht unter Autopilot) | setting-topspeed → topSpeedScale
|
| Reifengrip | 0 bis 1 | 1,0 | Tempoabhängige Lenkbegrenzung: speedSteerReduction = 0,20 + 0,30·(1 − Grip) |
setting-grip
|
| Bremswirkung | 0,3 bis 5,0 | 1,4 | multipliziert die Grundverzögerung 0,72 | setting-brakepower → brakeDecelBase
|
| Automatikgetriebe | an/aus | an | automatisches Hoch- und Herunterschalten | setting-autoshift → autoShift
|
| Rückwärtsgang: Gas und Bremse zusammen | an/aus | aus | Rückwärtsgang wie am Original-Controller (experimentell) | setting-gasbrake-reverse
|
| Rückwärtsgang: Druckschwelle | 10 bis 100 % | 50 % | ab diesem Pedalweg zählen beide als gedrückt | setting-gasbrake-reverse-druck
|
| Rückwärtsgang: Haltezeit | 0 bis 500 ms | 100 ms | Zeit zum Einlegen und zum Zurückschalten | setting-gasbrake-reverse-ms
|
| Rückwärtsgang: Geschwindigkeitsgrenze | 0 bis 40 km/h | 10 km/h | darüber wird nicht eingelegt | setting-gasbrake-reverse-kmh
|
| Rückwärtsgang: Ausrollen | 0 bis 3000 ms | 600 ms | Ausrollzeit, Zeitkonstante = Wert / 3 | setting-gasbrake-reverse-aus
|
| Höchstgeschwindigkeit (km/h) | 2 bis 8 | 4,0 | Modell-Höchsttempo; neu kalibriert bei jeder Änderung | setting-topspeed-kmh → topSpeedKmh
|
| 0 → 100 km/h (s) | 1,5 bis 8 | 2,6 | Kalibrieranker der Beschleunigung, Anzeige in % von 3,2 s | setting-zero-to-top → launchAnchorTimeS
|
| Ausrollen (Faktor) | 0,2 bis 2 | 0,6 | Faktor auf Roll-, Motor- und Luftwiderstand beim Ausrollen | setting-coast-drag → coastDragPerS
|
| Tankgewicht | 0 bis 100 % | 100 % | voller Tank bis 30 % träger (siehe Verschleiß) | setting-fuelweight → fuelWeightEffect
|
| Reifen: Temperatur & Verschleiß | 0 bis 200 % | 100 % | Reifenmodell, siehe Verschleiß | setting-tyres → tyreEffect
|
| Mischungsunterschied (WIP) | 0 bis 300 % | 150 % | Abstand der Mischungen zum Mittelreifen | setting-tyre-mix
|
| Reifenwärmer | an/aus | aus | Start und Wechsel auf 85 °C statt 20 °C | setting-tyre-blankets
|
| Jedes Rad einzeln | an/aus | an | vier Radlasten statt einer | setting-tyre-asym → tyreAsymEffect
|
| Reifendruck (bar) | 1,4 bis 2,2 | 1,8 | neutral bei 1,8 | setting-tyre-pressure
|
| Bremstemperatur und Fading | an/aus | an | siehe Verschleiß#Bremsen | setting-brake-fade
|
| Stärke des Fadings | 0 bis 200 % | 150 % | über 100 % nur schnelleres Aufheizen | setting-brake-fade-strength → brakeFadeEffect
|
| Windschatten in Kurven (experimentell) | an/aus | aus | bis 18 % weniger Kurvengrip hinter einem Auto | setting-dirtyair
|
| Stärke des Windschattens | 0 bis 200 % | 100 % | Faktor auf die 18 % | setting-dirtyair-strength → dirtyAirEffect
|
| Lenkansprechen | 0,5 bis 4,0 (Anzeige 25 bis 200 %) | 3,0 (150 %) | Trimmung des Zielwinkels; Anzeige = Wert / 2,0 | phys-steerresp → steerResponse
|
| Lenkkennlinie (WIP) | 0,6 bis 3,0 | 2,45 | Exponent der Stick-Kennlinie | setting-steer-expo → steerExpo
|
| Voller Einschlag bei (experimentell) | 30 bis 100 % | 90 % | Stickweg, bei dem der volle Einschlag erreicht ist | setting-steer-voll → steerVoll
|
| Lenkkraft unter Gas (WIP) | 0 bis 100 % | 75 % | mildert die Lenkabschwächung beim Beschleunigen | setting-throttle-steer-relief → throttleSteerRelief
|
| Lenkdämpfung (WIP) | 0 bis 500 ms | 0 ms (sofort) | Zeit von Mitte bis zum möglichen Anschlag | phys-steerdamp → steerDaempfungMs
|
| Bremsen nimmt Lenkung | 0 bis 150 % | 95 % | Anteil der Bremse am Reibkreis vorn | setting-brake-steal → brakeUseGain
|
| Bremsaufbau | 0,05 bis 0,60 s | 0,12 s | Zeitkonstante, mit der die Bremskraft am Reifen ansteht | phys-brake-tau → useTauBrems
|
| Lenkwinkel-Kalibrierung | 100 bis 300 % | 250 % | Verstärkung hinter dem Reibkreis, gedeckelt bei 45 Grad | setting-steer-calib → steerCalib
|
| Beschleunigungsfaktor | 0,4 bis 2,0 | 1,0 | Faktor auf die kalibrierte Antriebskraft | phys-accel → accelerationFactor
|
| Tempo rückwärts | 10 bis 100 % | 50 % | Anteil des Rückwärts-Höchsttempos (nicht unter Autopilot) | phys-rueck-tempo → reverseTempo
|
| Gaskennlinie (WIP) | 0,6 bis 3,0 | 2,45 | Exponent auf den Gasweg | setting-throttle-gamma → throttleGamma
|
| Bremskennlinie (WIP) | 0,6 bis 3,0 | 2,45 | Exponent auf den Bremsweg | setting-brake-gamma → brakeGamma
|
| Anfahrschub (WIP) | 0 bis 35 % | 5 % | kleinstes Gasbyte beim Anfahren | setting-minmove → minMoveThrottle
|
| Bremsbalance | 50 bis 80 % vorn | 62 % | Anteil der Bremskraft vorn; 62 % ist neutral | setting-brakebias → brakeBias
|
| Gewichtsverlagerung (WIP) | 15 bis 50 % | 30 % | Lastanteil, der bei 1 g die Achse wechselt | phys-transfer-k → transferK
|
| Trägheit der Gewichtsverlagerung (WIP) | 40 bis 250 ms | 80 ms | Zeitkonstante der Karosseriebewegung | phys-load-tau → loadTau
|
| Fahrhilfe (experimentell), Optionen → Fahrgefühl | aus, Querlage, voll | aus | lässt das Auto die Spur halten oder selbst lenken | driver-assist
|
| Leistung über Akkulaufzeit konstant halten (WIP), Optionen → Allgemein | an/aus | aus | drosselt bei vollem Akku | setting-battery-comp
|
| Referenz-Akkustand | 20 bis 100 % | 50 % | Bezugswert der Drosselung | setting-battery-ref
|
Hinweis: Die ⓘ-Texte einiger Regler nennen ältere Vorgaben (z. B. 83 ms Lenkdämpfung, Bremskennlinie 1,3). Gültig sind die Werte in dieser Tabelle, die aus dem Code und dem Markup stammen. Mit 1.2.11 wurden mehrere Erklärtexte an das Verhalten angeglichen, darunter die der Fahrgefühle Arcade, Pro, Pacejka und Omega.
Funktionsweise
Überblick: ein Takt von der Eingabe zum Paket
Alle 45 ms läuft der Herzschlag controlHeartbeat() (src/20-protocol.js). In ihm passiert für Spieler 1 der Reihe nach:
- Das Gamepad wird frisch gelesen (nur im Cockpit), die Ortung auf der Bahn wird nachgeführt.
physicsStep()(src/50-drive.js) formt die Pedale mit den Kennlinien, zieht Tank, Schaden, Abseits, Frühstrafe und Autopilot ab und ruftphysEngine.update().- Das Modell liefert
motorPWM(Gas, −1 bis 1) undservoAngle(Lenkung, −1 bis 1). sendControlValue()multipliziert das Gas mit dem Gasfaktor und baut das Paket.- Danach senden Spieler 2 und 3 und die NPCs im selben Takt, und erst dann wird das Cockpit gezeichnet.
Kennlinien für Gas, Bremse und Lenkung
Alle drei Kennlinien benutzen dieselbe Formel (kennlinie() in src/40-physics.js):
aus = sign(x) · |x|^g
x: Stick- oder Triggerweg, beim Gas und der Bremse 0 bis 1, bei der Lenkung −1 bis 1,g: Exponent (GaskennliniethrottleGamma, BremskennliniebrakeGamma, LenkkennliniesteerExpo), Standard je 2,45.
Die Enden liegen für jeden Exponenten fest: 0 bleibt 0, 1 bleibt 1. Ein Exponent über 1 macht den Anfangsbereich feiner. Beispiel mit 2,45: ein Viertel Gasweg ergibt 0,25^2,45 ≈ 0,034, also gut 3 % Gas.
Die Bremse ist in der App kein eigener Kanal: Gas und Bremse laufen als eine vorzeichenbehaftete Zahl throttleY (positiv Gas, negativ Bremse) und werden erst in physicsStep() getrennt.
Der Lenkweg mit „Voller Einschlag bei“
Ist „Voller Einschlag bei“ gesetzt (Standard 0,9), gilt lenkVollAnteil():
a = min(1, |x| / voll) s = sign(x) · a^e Wunsch = clamp(s · Lenkansprechen / 3,0 ; −1 … 1) · Lenkgrenze
voll: „Voller Einschlag bei“, 0,3 bis 1,e: Lenkkennlinie,- 3,0: Bezugswert
STEER_VOLL_BEZUG; bei Lenkansprechen 3,0 ist die Trimmung genau 1, darunter wird der volle Einschlag nie ganz erreicht, - Lenkgrenze: siehe nächster Abschnitt.
Ist der Wert nicht gesetzt (alter Weg), gilt Wunsch = clamp(x^e · Lenkgrenze · Lenkansprechen).
Tempoabhängige Lenkgrenze
Lenkgrenze = min(1, 1 − v_Anteil · speedSteerReduction · Gangindex/(Gangzahl − 1))
Im 1. Gang ist der Faktor 0, die Grenze also 1. Erst in höheren Gängen wird der erlaubte Einschlag bei hohem Tempo kleiner. speedSteerReduction folgt aus dem Regler Reifengrip (0,20 + 0,30·(1 − Grip)). Arcade schaltet diese Grenze ab (lenkKopplungAus).
Motor und Drehmomentkurve
Das Modell rechnet die Geschwindigkeit intern in „Modell-km/h“ von 0 bis topSpeedKmh = 4,0. Für die Anzeige gibt es zwei Maßstäbe (src/30-input.js):
REAL_SCALE= 50 · 5,9 / 4,0 = 73,75. In dieser Einheit ist die Physik abgestimmt (Schwellen wie 10 km/h oder 80 km/h). Höchsttempo 4,0 entspricht 295 km/h.TACHO_SCALE= 50 · 5,45 / 4,0 ≈ 68,1. Mit ihm rechnet seit 0.9.39 der Tacho, weil Nachmessungen 5,45 km/h echte Vollgasgeschwindigkeit ergaben (im Maßstab 1:50 rund 272 km/h).
Die Drehmomentkurve ist eine Tabelle mit linearer Interpolation (TORQUE_CURVE, torqueAt()):
| Drehzahl (1/min) | 1500 | 2500 | 3500 | 4500 | 5500 | 6200 | 7000 | 8000 | 9000 |
|---|---|---|---|---|---|---|---|---|---|
| Drehmoment (1 = Spitze) | 0,42 | 0,52 | 0,62 | 0,72 | 0,88 | 1,00 | 0,985 | 0,955 | 0,90 |
Leerlauf 1500/min, Begrenzer 9000/min (IDLE_RPM, REDLINE_RPM), weicher Begrenzer über 400/min (LIMITER_SOFT_RPM).
Die Drehzahl folgt im Gang aus der Geschwindigkeit:
Drehzahl = rpmScale · Übersetzung · (|v| / topSpeedKmh) rpmScale = 9000 / max(Übersetzung · topFrac) (GT3: 9000 / 0,9525 ≈ 9449)
Die Antriebsbeschleunigung (thrustAt()):
a_Antrieb = Gas · M(n) · Begrenzer · (Übersetzung / 0,88) · A · Anfahrfaktor A = (topSpeedKmh / 3,0) · Beschleunigungsfaktor · accelCalibration Begrenzer = 1 über 9000/min abfallend auf 0 bei 9400/min Anfahrfaktor = 0,95 + 0,05 · min(1, |v| / 0,6)
M(n): Drehmoment bei Drehzahl n; im 1. Gang unter 6200/min wird mit 6200/min gerechnet (schleifende Kupplung beim Start,launchClutchRpm),- 0,88: Übersetzung des letzten Gangs (
ratioRef), dort ist der Faktor 1, accelCalibration: wird per Bisektion so gesucht, dass ein Vollgasstart die eingestellte Zeit „0 → 100 km/h“ trifft (calibrateAccel(), 30 Schritte, geometrische Mitte).
Der Regler „0 → 100 km/h“ ist damit ein Kalibrieranker und keine exakte Zeitangabe: der Code vermerkt, dass die vereinfachte Kalibrierrechnung und der echte Takt bis zu 46 % auseinanderliegen.
Widerstände (resistAt()), mit u = |v| / topSpeedKmh:
unter Last: A · (0,08·u + 0,25·u²) Ausrollen: Ausrollfaktor · (0,030 + 0,065·(Übersetzung/0,88)²·u + 0,155·u²)
Beim Ausrollen ist der Motorbremsanteil im 1. Gang (3,75/0,88)² ≈ 18-mal stärker als im 6. Gang. Unter 10 km/h (Anzeige) ohne Gas wird das Gasbyte auf 0 gesetzt und das Tempo mit 0,45 Modell-km/h je s auf null gebracht, damit das Auto nicht im Bereich zuckt, in dem das Byte zu klein zum Losbrechen ist.
Bremsen (vorwärts):
a_Bremse = −( Widerstand + 0,72·Bremswirkung · Bremse · Längsgrip · Untergrund · Eintauchen · Reifengrip · (1 − Fading) / Massefaktor )
Über 80 % Bremse und über 15 % des Höchsttempos meldet das Modell „ABS“ (Anzeige und kurzes Rütteln); das Byte selbst wird nicht moduliert.
Getriebe und Schaltlogik
| Getriebe | Gänge | Übersetzungen (topFrac) | Hochschalten | Herunterschalten | Schaltzeit |
|---|---|---|---|---|---|
| GT3, 6-Gang sequenziell (Vorgabe) | 6 | 3,75 (0,2523) · 2,38 (0,40) · 1,72 (0,5538) · 1,34 (0,7108) · 1,08 (0,88) · 0,88 (1,0) | 8800/min | 4200/min | 120 ms |
| Formel 1, 8-Gang | 8 | 3,07 (0,31) · 2,26 (0,42) · 1,83 (0,52) · 1,51 (0,63) · 1,28 (0,74) · 1,13 (0,84) · 1,03 (0,92) · 0,88 (1,0) | 8850/min | 5600/min | 40 ms, wirksam 45 ms |
| Ferrari 412P, 5-Gang Transaxle | 5 | 3,17 (0,30) · 2,11 (0,45) · 1,53 (0,62) · 1,17 (0,81) · 0,88 (1,0) | 8600/min | 3400/min | 350 ms |
topFrac ist der Anteil der Höchstgeschwindigkeit, an dem der Gang endet. Bei allen Gängen außer dem letzten ist Übersetzung · topFrac etwa 0,9507 (GEAR_PRODUCT); der letzte Gang ist luftwiderstandsbegrenzt. Die Schaltzeit wird nie kürzer als ein Sendetakt (shiftMs = max(45, Angabe)), sonst fiele sie zwischen zwei Pakete.
Die Automatik (update()) prüft in jedem Takt:
| Zustand | Bedingung | Folge |
|---|---|---|
| Leerlauf, Automatik an | Gas > 2 % | 1. Gang, vorwärts |
| Gang n, nicht am Schalten | Drehzahl ≥ Hochschaltdrehzahl und Gas > 5 % und n nicht der letzte | Gang n+1, Schaltpause beginnt |
| Gang n > 1, nicht am Schalten | Drehzahl ≤ Herunterschaltdrehzahl | Gang n−1 |
| am Schalten | Restzeit shiftLeft läuft über dt ab |
während der Pause kein Antrieb, nur 25 % des Widerstands (shiftDragFactor)
|
Die Herunterschaltschwelle ist so gewählt, dass nach einem Hochschalten die Drehzahl darüber bleibt: im GT3 fällt sie beim Wechsel 1→2 von 8800 auf 8800·2,38/3,75 ≈ 5585/min, also 1385/min über 4200.
Von Hand (Automatik aus) gilt die Kette R ← N ← 1 ← 2 … Der Rückwärtsgang lässt sich nur im Stand einlegen (unter 0,05 Modell-km/h). Mit Automatik legt Quadrat den Rückwärtsgang ein, wenn das Tempo unter 0,034 · topSpeedKmh liegt (10 km/h Anzeige); sonst meldet die App „ZU SCHNELL FÜR R“.
Rückwärts zieht der Antrieb mit Übersetzung 3,00; die Grenze ist 0,11 · topSpeedKmh · Tempo rückwärts. Das Gasbyte rückwärts ist auf −0,5 begrenzt (reverseOutputSpan), weil nur diese Tiefe am echten Auto als sicher bestätigt ist.
Rückwärtsgang mit Gas und Bremse zusammen
Zustandsmaschine in gasBremseRueckwaertsPruefen() (src/50-drive.js), je Spieler und je Eingabequelle (Gamepad, Tastatur) mit eigener Uhr:
| Zustand | Bedingung | nächster Zustand |
|---|---|---|
| vorwärts | Option an, Automatik an, nicht RC, kein Autopilot, Tempo < Grenze, beide Pedale ≥ Druckschwelle für die Haltezeit | Rückwärtsgang (Meldung, Rütteln, Ton) |
| Rückwärtsgang | beide Pedale gedrückt | Gas geht nach hinten (Rückgabewert = Gasweg) |
| Rückwärtsgang | nur ein Pedal | kein Antrieb, die Bremse bremst |
| Rückwärtsgang | alle Pedale aller Quellen < 10 % für die Haltezeit | Ausrollen: Tempo · e^(−dt/(Ausrollzeit/3)) |
| Ausrollen | Tempo < 0,5 km/h | 1. Gang (vorwärts) |
Reibkreis und Lenkung
Die Querausnutzung des Reibkreises:
latUse = min(1, |Lenkung| · (|v| / topSpeedKmh) · 1,8) gripLong = √(1 − latUse²)
Der Faktor 1,8 (corneringLoad) sorgt dafür, dass schon deutliches Lenken bei hohem Tempo einen großen Teil des Budgets verbraucht. gripLong begrenzt Antrieb und Bremse.
Die Lenkfähigkeit der Vorderachse heißt im Code steerGrip. Es gibt zwei Rechenwege:
Einfacher Reibkreis (Arcade, RC, Omega, eigene Abstimmungen):
steerGrip = ( max(0,12·(1 − nass), min(1, √(frontCap² − frontUse²))) + TrailBonus ) · Reifengrip frontUse = Bremsanteil · brakeUseGain · (Bremsbalance/0,62) · Tempoanteil · wf
frontCap: Kapazität der Vorderachse aus Achslast, Layout, Nässe und Windschatten,- Tempoanteil: 0 unter 5 % und 1 ab 22 % des Höchsttempos (
loadOnsetFrac,loadFullFrac), damit Bremsen im Schritttempo die Lenkung nicht leert, - 0,12: Notboden im Trockenen, verschwindet mit Nässe,
- TrailBonus:
0,08 · 4 · x · (1 − x)mitx = Bremsanteil / 0,7, also am größten bei mittlerem Bremsdruck (nicht bei Arcade und Omega).
Lenkung aus der Gewichtsverlagerung (seit 1.1.3 für Pro, Sim+, Pacejka, GT3, F1, Realismus GT3):
uF = Last vorn / statische Last vorn uFl = 1 + (uF − 1) · 0,66 · Tempoanteil (nur beim Bremsen, sonst 1) cap = uFl^(1 − 0,15) use = Bremsanteil · brakeUseGain · (Bremsbalance / statische Last vorn) · Tempoanteil Ziel = max(0,12·(1 − nass), min(1,12, √(cap² − use²)) · Gasfaktor) · Layout · Nässe · Windschatten · Reifengrip
Das Ergebnis läuft durch einen Tiefpass mit 0,15 s (lenkGlattTau). Der Gasfaktor ist die stetige Lenkentlastung unter Gas:
Gasfaktor = max(0,5 ; 1 − 0,10 · (1 − Lenkkraft unter Gas)/0,25 · g^1,74)
mit g = Längsausnutzung beim Beschleunigen. Bei Reglerstand 75 % ergibt Vollgas 0,90 und Halbgas 0,97. Pacejka rechnet diesen Faktor im eigenen Schritt.
Gewichtsverlagerung
Last_vorn += ((statisch − Anforderung · transferK) − Last_vorn) · (1 − e^(−dt/loadTau)) longUse += (Anforderung − longUse) · (1 − e^(−dt/τ))
- Anforderung: +Gas, −Bremse, beim Ausrollen −0,15 (
coastPitch, die Motorbremse nickt die Nase etwas), loadTau0,08 s: die Karosserie nickt schnell,- τ = 0,45 s beim Gas, 0,12 s beim Bremsen (Bremsaufbau): die Reifenkraft folgt langsamer.
Aus Längs- und Querlast entstehen vier Radlasten (vorne links, vorne rechts, hinten links, hinten rechts), die Reifentemperatur und Verschleiß je Rad treiben; eine Rechtskurve belastet die linken Räder.
Lenkdämpfung und Ausgabe
Der gedämpfte Lenkwert folgt dem Wunsch mit einer Ratenbegrenzung (nicht mit einer Glättung):
maxSchritt = dt · 1000 / Lenkdämpfung_ms · Weg
Bei 0 ms (Standard) ist der Schritt unbegrenzt, die Lenkung springt also sofort. Wählt man ein Layout, schlägt der Code einen Wert aus der Gierträgheit vor (steerDaempfungFor()): round(1000 / (clamp(6·2000/Iz ; 4 … 9) · 2)), das sind 83 ms neutral, 104 ms Frontmotor-GT3, 75 ms Mittelmotor, 92 ms Heckmotor und 56 ms Formel 1. Der Regler bleibt aber maßgeblich.
Am Ende (neuer Weg):
servoAngle = clamp( gedämpft · min(1, Lenkkalibrierung · Aquaplaning · steerGripRef) · (steerGrip/steerGripRef) + Zug ; −1 … 1 )
steerGripRef: der statische Grip (Untergrund, Windschatten, Reifen) ohne Brems- und Gaswirkung; die Kalibrierung gleicht nur diesen aus, die Wirkung von Bremse und Gas bleibt spürbar,- Zug: kleiner Lenkversatz aus ungleich abgefahrenen Reifen (höchstens 0,05),
- Aquaplaning: über 60 % des Höchsttempos
1 − Aquaplaning · ((u − 0,6)/0,4)².
Mehr als ±1 geht nicht: das ist der volle mechanische Anschlag von 45 Grad. Ein größerer Wert käme im vorzeichenbehafteten Byte als Einschlag in die Gegenrichtung an.
Das Einspurmodell
Ein Einspurmodell fasst die beiden Räder einer Achse zu einem zusammen und beschreibt, wie sich das Auto um die Hochachse dreht (Gierrate r) und wie schräg es zur Fahrtrichtung steht (Schwimmwinkel β). In OmegaSim ist es ein Instrument: es speist Anzeigen im Cockpit, stellt aber nie die Lenkung (yawStep()).
m·v·(β' + r) = Fv + Fh Iz·r' = Fv·lv − Fh·lh Fv = −Cv·(β + lv·r/v − δ) Fh = −Ch·(β − lh·r/v) Cv = 140000 · f^0,85 Ch = 140000 · (1 − f)^0,85 lv = L·(1 − f) lh = L·f
m= 1300 kg,vin m/s (Modelltempo · 73,75 / 3,6),δ= servoAngle · 45 Grad,f= statische Last vorn,L= Radstand,Iz= Gierträgheit (aus dem Layout),- Exponent 0,85: Lastempfindlichkeit. Mit Exponent 1 kürzte sich der Eigenlenkgradient für jedes Layout weg.
Gelöst wird halbimplizit: (I − dt·A) · x_neu = x_alt + dt·B·δ, ein 2×2-Gleichungssystem je Takt. Unter 0,5 m/s steht das Modell still. Daraus folgen:
Eigenlenkgradient kU = m·f/Cv − m·(1−f)/Ch = (m/C)·(f^0,15 − (1−f)^0,15) stationäre Gierrate r_s = δ · v / (L + kU·v²)
| Layout | Last vorn | Radstand | Iz (kg·m²) | kU (s²/m) | Verhalten |
|---|---|---|---|---|---|
| Neutral, kalibriert (Vorgabe) | 0,50 | 2,60 m | 2000 | 0 | neutral |
| GT3, Frontmotor (BMW M4 GT3) | 0,50 | 2,85 m | 2500 | 0 | neutral, träger |
| GT3, Mittelmotor (Ferrari 296 GT3) | 0,44 | 2,60 m | 1800 | −3,0·10⁻⁴ | leicht übersteuernd |
| GT3, Heckmotor (Porsche 911 GT3 R) | 0,39 | 2,50 m | 2200 | −5,6·10⁻⁴ | übersteuernd |
| Formel-1-Monoposto | 0,45 | 3,60 m | 1000 | −2,5·10⁻⁴ | leicht übersteuernd, flink |
Die Layoutwerte sind laut Code Schätzungen aus der Fahrzeugklasse. Der Betrag der berechneten Querbeschleunigung ist nicht aussagekräftig (45 Grad Lenkbereich eines Modellautos bei Tempi eines echten ergeben über 20 g); brauchbar ist nur das Verhältnis aus Ist- und stationärer Gierrate. Der G-Plot zeigt deshalb die Querausnutzung latUse. Auf die Lenkung wirkt das Layout nur über einen kleinen linearen Faktor 1 − 0,15·(1 − f/0,5) auf die Vorderachskapazität.
Pacejka-Modus
Im Steuerungsmodus Pacejka (pacejkaStep()) bekommt die Vorderachse und, wenn „Übersteuern (Pacejka)“ an ist, die Hinterachse eine Haftgrenze nach der Magic Formula. Der Schritt läuft nach der normalen Lenkrechnung und formt nur den fertigen Lenkbefehl. Unterhalb der Grenze ändert sich nichts.
Die Formel ist normiert: u = 1 ist der Scheitel und y(1) = 1. Dafür wird B einmal so gesucht, dass C · atan(B − E·(B − atan B)) = π/2 gilt (pacB(), 60 Halbierungen). Die Höhe D ist damit fest 1; die tatsächliche Grenze steckt in der Haftgrenze.
| Größe | Wert im Code | Bedeutung |
|---|---|---|
| C | 1,3 (pacejkaC) |
Formfaktor für Seitenkraft |
| E | −0,5 (pacejkaE) |
ausgeprägter Scheitel |
| B | ≈ 2,1355 (gerechnet) | Scheitel genau bei u = 1 |
| D | 1 (normiert) | größte Kraft |
| Haftgrenze | 0,7 (pacejkaGrenze) |
Querausnutzung am Scheitel |
| Heckreserve | 1,2 (pacejkaHeckReserve) |
hinten 20 % mehr Seitenhalt: ab Werk leicht untersteuernd |
| größter Übersteuer-Zuschlag | 0,35 Servoeinheiten (pacejkaUeberMax) |
≈ 16 Grad |
| Vortriebsverlust beim Rutschen | bis 55 % (pacejkaRutschVortrieb) |
|
| Leistungsübersteuern | bis Faktor 1 + 1,4 hinten (pacejkaLeistung) |
ab 40 % Gas, Smoothstep bis Vollgas |
| Haltedauer eines Rutschs | höchstens 2 s (pacejkaHaltMax) |
nicht unter 15 % des Höchsttempos |
Rechenweg je Takt:
quer = |Lenkung| · v_Anteil · 1,8 / Haftgrenze vorn = clamp(statisch/Last_vorn ; 0,6 … 1) (Bremsen belastet vorn → kleiner) hinten = clamp((1−statisch)/(1−Last_vorn) ; 0,6 … 1,6) uV = quer · vorn / Grip uH = quer · hinten / Grip / √(1 − (0,7·Antrieb)²) / 1,2 (· Leistungsfaktor bei viel Gas) Wirkfaktor(u) = 1 für u ≤ 1, sonst y(u)/u Untersteuern: pacUnter → Wirkfaktor(uV) · Gasfaktor, nachgeführt mit 80 ms Übersteuern: nur wenn uH > 1 und uH > uV: Zuschlag = min(0,35 ; 1 − Wirkfaktor(uH)) servoAngle = clamp(servoAngle · pacUnter + Richtung · pacUeber)
Gegenlenken (Stick gegen die Rutschrichtung) baut den Zuschlag mit 0,1 s ab, sonst mit 0,25 s; der Aufbau dauert 0,12 s. Unter- und Übersteuern lösen Vibration aus (Untersteuern als leises Brummen nur, wenn die Vorderachse wirklich über der Grenze ist, Übersteuern als kräftiger Stoß alle 150 ms) und Reifenquietschen. Mit Haftgrenze 0,7 ist voller Einschlag ab etwa 115 km/h am Limit, halber Einschlag ab etwa 230 km/h.
Steuerungsmodus RC
Im Fahrgefühl RC (Steuerungsmodus „aus“) rechnet die App kein Fahrzeugmodell, solange kein Autopilot fährt. Der Lenkstick geht roh ans Auto, nie begrenzt. Das Gas läuft durch rcGas() (src/20-protocol.js):
| Lage | Bedingung | Gaswert |
|---|---|---|
| Gas | Gas > 2 % | steigt sofort, fällt höchstens um 1 je 2000 ms (RC_AUSLAUF_MS)
|
| losgelassen | kein Pedal | läuft in 2 s auf 0 aus |
| Bremsen | neuer Bremsdruck, geschätztes Tempo > 0 | negativer Wert (Gegenstrom), bis die Schätzung 0 ist; Abbau Bremstiefe · dt / 700 ms |
| rückwärts | neuer Bremsdruck, Befehl seit 150 ms null und Schätzung < 0,02 | −Bremsweg, solange gedrückt |
Das Tempo ist dabei geschätzt, denn das Auto meldet keines: die Schätzung folgt dem Gasbefehl mit 0,5 s beim Beschleunigen und 0,8 s beim Ausrollen.
Drift-Modus (entfernt)
Bis 0.10.5 gab es einen Drift-Modus, der gegen das gemessene Drehsignal aus Byte 3 der Meldungen gegenlenkte (driftGegenlenken(), Stärke 50 %). Er ist nicht mehr wählbar; die Stellung „Aus“ heißt seitdem RC. Der Code und der ausgeblendete Regler „Gegensteuern im Drift“ sind noch vorhanden.
Fahrhilfe
Die Fahrhilfe (driver-assist, je Auto auch in der Garage) hat drei Stellungen:
- aus: der Lenkwert ist der Radwinkel.
- Querlage: die App sendet zusätzlich Modus-Bytes mit einem Vorausblick über drei Streckenteile; derselbe Lenkwert bedeutet für das Auto dann die Lage auf der Bahn statt den Radwinkel.
- voll: wie Querlage, aber der Lenkwert geht als 0 hinaus, das Auto bestimmt die Lage selbst. Das gilt nur, wenn die Modus-Bytes wirklich gesendet werden, also mit eingescannter Strecke in der Stellung „Auf der Bahn“; sonst würde die 0 als gerade gestellte Räder gelesen.
Unter gelber Flagge, in der Einführungsrunde und beim Aufstellen fährt ohnehin der Autopilot (siehe Safety Car und Reinigungswagen).
Vom Modell zum Funkbefehl
Der Gaswert ist nicht die Pedalstellung, sondern das simulierte Tempo:
motorPWM = v / topSpeedKmh (vorwärts, 0 … 1) motorPWM = max(motorPWM, Anfahrschub · Gas) (solange Gas gegeben wird)
Würde die App den Pedalwert direkt senden, stünde das echte Auto bei Vollgas sofort auf Höchsttempo. So steigt das Byte mit dem Modelltempo über mehrere Sekunden.
In sendControlValue():
x = motorPWM wenn x > 0 und kein Autopilot: x = x · Gasfaktor wenn kein Autopilot: x = x · Akkuausgleich Δ_Gas = clamp(round(x · 127) ; −64 … 127) Byte 6 = (0xDF + Δ_Gas) mod 256 Δ_Lenk = clamp(round(servoAngle · 127) ; −127 … 127) Byte 7 = Byte 9 = Δ_Lenk im Zweierkomplement Byte 19 = CRC-8 über Byte 0 bis 18 (Polynom 0x31, Startwert 0xFF)
- Gasfaktor: Regler
setting-topspeed; bei 180 % erreicht das Byte schon bei 1/1,8 ≈ 56 % des Modelltempos den Höchstwert 127, - Akkuausgleich:
clamp(Referenz / Akkustand ; 0,2 … 1), nur wenn eingeschaltet, - −64 ist die tiefste Rückwärts-/Bremsstufe, die am echten Auto bestätigt ist (
MIN_THROTTLE_DELTA); −127 fuhr im Test vorwärts.
Die übrigen Bytes (Kopf 0xAF, Lichtbits in Byte 14, Modus-Bytes) beschreibt die Seite Carrera HYBRID. Das Paket geht im 45-ms-Takt über eine Charakteristik von Bluetooth Low Energy hinaus; ist ein Schreibvorgang noch nicht fertig, wird der neueste Wert nachgereicht statt ein Takt verworfen.
Alle Fahrgefühle mit ihren Werten
Die Werte stammen aus PRESETS in src/98-presets.js (nicht aus den Beschreibungstexten). „Pro“ in der Spalte Sim+ und Pacejka heißt: gleicher Wert wie Pro. Der Crash-Regler ist ein Index in die Liste 1, 2, 3, 4, 5, 10, 20, 50.
| Regler (ID) | Arcade | Sim+ | Pacejka | Pro | GT3 | F1 | Realismus GT3 | Omega | RC (WIP) |
|---|---|---|---|---|---|---|---|---|---|
Steuerungsmodus (phys-mode) |
Physik | Physik | Pacejka | Physik | Physik | Physik | Physik | Physik | RC |
Automatik (setting-autoshift) |
an | an | an | an | aus | aus | aus | an | an |
0 → 100 km/h, s (setting-zero-to-top) |
1,6 | 2,3 | 2,6 | 2,6 | 2,9 | 2,5 | 3,2 | 2,6 | 1,5 |
Beschleunigungsfaktor (phys-accel) |
1,5 | 1,15 | 1,0 | 1,0 | 1,0 | 1,0 | 1,0 | 1,0 | 1,6 |
Gasfaktor (setting-topspeed) |
1,1 | 1,8 | 1,8 | 1,8 | 1,45 | 1,6 | 1,0 | 1,8 | 1,5 |
Bremswirkung (setting-brakepower) |
4,0 | 2,2 | 1,4 | 1,4 | 1,15 | 1,45 | 0,85 | 1,4 | 2,5 |
Bremsaufbau, s (phys-brake-tau) |
0,12 | 0,12 | 0,12 | 0,12 | 0,12 | 0,12 | 0,12 | 0,45 | 0,12 |
Bremsbalance, % vorn (setting-brakebias) |
56 | 62 | 62 | 62 | 60 | 63 | 62 | 62 | 56 |
Bremsen nimmt Lenkung (setting-brake-steal) |
0,4 | 0,95 | 0,95 | 0,95 | 1,1 | 1,1 | 1,0 | 1,15 | 0,2 |
Reifengrip (setting-grip) |
1,0 | 1,0 | 1,0 | 1,0 | 0,87 | 0,97 | 0,72 | 1,0 | 1,0 |
Lenkansprechen (phys-steerresp) |
3,4 | 3,3 | 3,0 | 3,0 | 3,2 | 3,2 | 3,0 | 3,0 | 4,0 |
Lenkkalibrierung (setting-steer-calib) |
3,0 | 2,5 | 2,5 | 2,5 | 2,0 | 2,0 | 1,6 | 2,5 | 3,0 |
Ausrollen (setting-coast-drag) |
0,4 | 0,6 | 0,6 | 0,6 | 0,9 | 1,2 | 1,25 | 0,6 | 0,3 |
Tankgewicht (setting-fuelweight) |
0 | 1 | 1 | 1 | 0,45 | 0,6 | 1,0 | 1 | 0 |
Reifenmodell (setting-tyres) |
0 (aus) | 1 | 1 | 1 | 0,9 | 1,2 | 2,0 | 1 | 0 (aus) |
Reifenwärmer (setting-tyre-blankets) |
an | aus | aus | aus | aus | an | aus | aus | an |
Reifendruck, bar (setting-tyre-pressure) |
1,8 | 1,8 | 1,8 | 1,8 | 1,8 | 1,75 | 1,8 | 1,8 | 1,8 |
Jedes Rad einzeln (setting-tyre-asym) |
aus | an | an | an | an | an | an | an | aus |
Tankverbrauch, %/s (setting-fuel-drain) |
0 | 1 | 1 | 1 | 1,3 | 2,7 | 3,0 | 1 | 0 |
Crashs bis 100 % (setting-crash-count) |
50 | 5 | 5 | 5 | 5 | 4 | 10 | 5 | 50 |
Schaden bei Crash (setting-crash-schaden) |
aus | an | an | an | an | an | an | an | aus |
| Crash-Erkennung, Bremsen, Nur Rammer | an | an | an | an | an | an | an | an | an |
Crash-Schwelle (setting-crash-threshold) |
60 | 40 | 40 | 40 | 35 | 30 | 30 | 40 | 60 |
Reparatur, s (setting-repair-time) |
2 | 4 | 4 | 4 | 11 | 16 | 20 | 4 | 2 |
Bremsfading (setting-brake-fade) |
aus | an | an | an | an | an | an | an | aus |
| Stärke des Fadings | 1,0 | 1,5 | 1,5 | 1,5 | 1,0 | 1,25 | 1,0 | 1,5 | 1,0 |
Windschatten (setting-dirtyair) |
aus | aus | aus | aus | an | an | an | aus | aus |
| Stärke des Windschattens | 1,0 | 1,0 | 1,0 | 1,0 | 1,0 | 1,35 | 1,0 | 1,0 | 1,0 |
| Lenkung aus Gewichtsverlagerung (abgeleitet) | nein | ja | ja | ja | ja | ja | ja | nein | nein |
| Sonderweg (abgeleitet) | lenkKopplungAus |
– | – | – | – | – | – | lenkAlt |
– |
Nicht Teil der Sätze sind: Layout, Getriebe, Höchstgeschwindigkeit, Lenkkennlinie, Gas- und Bremskennlinie, „Voller Einschlag bei“, Lenkdämpfung, Lenkkraft unter Gas, Anfahrschub, Tempo rückwärts, Gewichtsverlagerung und deren Trägheit sowie alle Renneinstellungen (Renndauer, Wetter, Strecke).
Die abgeleiteten Schalter setzt setzeBrakeStealLast() aus dem gemessenen aktiven Satz:
brakeStealLast = 1für Pro, Sim+, Pacejka, GT3, F1, Realismus GT3: Lenkung aus der Gewichtsverlagerung,lenkAlt = 1für Omega: die Lenkung rechnet wie in 1.0.42 (fester Lastfaktor 0,15, kein Trail-Bonus, alte Gas-FormelcapRaw + 0,25·(1 − capRaw), Bremsaufbau 0,45 s),lenkKopplungAus = 1für Arcade: Gas und Bremse wirken nicht auf die Lenkung, die tempoabhängige Lenkgrenze entfällt.
Kurzcharakter:
- Arcade: nachsichtigste Abstimmung, stärkste Bremse (4,0), kein Reifen- und Tankmodell, Crashs bremsen ohne Schaden.
- Sim+: Pro mit mehr Lenkung (3,3), mehr Beschleunigung (2,3 s, Faktor 1,15) und deutlich kräftigerer Bremse (2,2).
- Pacejka: Pro mit dem Pacejka-Modus; ab Werk eingestellt.
- Pro: Grundabstimmung; wöchentliche Challenges und Dauerrennen fahren mit Pro.
- GT3, F1: von Hand schalten, Fading und Windschatten an.
- Realismus GT3: das GT3 aus 0.4 Wert für Wert, gegen eine gemessene Reihe gefittet (3,2 s), härteste Stufe.
- Omega: Pro wie in 0.9.50, eingefroren; ein Selbsttest wacht darüber.
- RC: Arcade mit allen Reglern am Anschlag und rohem Stick.
Fahrgefühl je Spieler
Seit 1.2.4 kann ein Zusatzspieler ein eigenes Fahrgefühl haben (Speicher omegasim-preset-spieler-2 bzw. -3). Seine Abstimmung entsteht in zwei Schritten (src/98-presets.js, src/49-spieler.js):
presetSchnappschuss(key)legt das Fahrgefühl kurz auf die Regler von Spieler 1, liest die entstandene Modellkonfiguration als Kopie ab und legt sofort den alten Stand von Spieler 1 zurück. So rechnet das Fahrgefühl durch dieselben Regler-Handler wie sonst; das Ergebnis wird je Satz zwischengespeichert. Während der Schnappschuss läuft, wird nicht abgeglichen.spielerGefuehlUeberlagern(nr, motor)kopiert erst die Konfiguration von Spieler 1 auf den Motor des Zusatzspielers, legt dann den Schnappschuss darüber und setzt den Steuerungsmodus (physModus). Danach wird die eigene Reifenmischung des Spielers wieder eingesetzt, damit sie nicht die von Spieler 1 übernimmt.
Ob ein Zusatzspieler mit Modell oder roh fährt, entscheidet spielerPhysikAn(): mit eigenem Fahrgefühl dessen Modus, sonst der von Spieler 1.
// src/49-spieler.js, spielerGefuehlUeberlagern
const key = window.__spielerPreset(nr);
const snap = key ? window.__presetSchnappschuss(key) : null;
if (snap) {
Object.assign(motor.config, JSON.parse(JSON.stringify(snap.config)));
motor.config.physModus = snap.modus;
} else {
motor.config.physModus = null; // wie Spieler 1
}
In der Meisterschaft kann zusätzlich ein Fahrgefühl für alle festgelegt werden.
Beispiele
Beispiel 1: vom Daumen zum Gasbyte
Fahrgefühl Pacejka (Gasfaktor 1,8), Gaskennlinie 2,45, Auto im 3. Gang bei halbem Modelltempo (v = 2,0 von 4,0), Tank und Schaden in Ordnung.
- Trigger halb gedrückt:
throttleY = 0,5. - Kennlinie: 0,5^2,45 ≈ 0,183. Das ist das Gas, das ins Modell geht; es beschleunigt das Modell nur sanft.
- Modell:
motorPWM = 2,0 / 4,0 = 0,5(das Tempo bestimmt das Byte, nicht der Trigger). - Gasfaktor: 0,5 · 1,8 = 0,9.
- Δ = round(0,9 · 127) = round(114,3) = 114.
- Byte 6 = (0xDF + 114) mod 256 = (223 + 114) − 256 = 81 =
0x51.
Bei vollem Modelltempo wäre x = 1,8, Δ wird auf 127 begrenzt, Byte 6 = (223 + 127) − 256 = 94 = 0x5E. Ohne Gas und im Stand ist Δ = 0, Byte 6 = 0xDF.
Beispiel 2: Lenkbyte
Lenkwert nach allen Schritten servoAngle = 0,5: Δ = round(63,5) = 64, Byte 7 = Byte 9 = 0x40 (64), etwa 22,5 Grad nach rechts. Bei −0,5 rundet JavaScript −63,5 auf −63 (Rundung zur größeren Zahl): Zweierkomplement 256 − 63 = 193 = 0xC1. Voller Einschlag links (−1): −127 → 256 − 127 = 129 = 0x81.
Beispiel 3: Stickweg bei „Voller Einschlag bei“
Standard: voll = 0,9, Lenkkennlinie 2,45, Lenkansprechen 3,0, im Stand.
- Stick 45 %: a = 0,45 / 0,9 = 0,5; s = 0,5^2,45 ≈ 0,183; Trimmung 3,0/3,0 = 1. Servo ≈ 0,183, also etwa 8 Grad.
- Stick 90 %: a = 1, s = 1, Servo = 1, volle 45 Grad.
- Mit Lenkansprechen 2,4 (80 % Trimmung): Stick 100 % ergibt nur 0,8, also 36 Grad.
Beispiel 4: Schaltpunkt im GT3-Getriebe
rpmScale ≈ 9449. Hochschalten aus dem 1. Gang bei 8800/min: v = 8800 / (9449 · 3,75) · 4,0 ≈ 0,993 Modell-km/h, angezeigt (Maßstab 73,75) etwa 73 km/h. Nach dem Schalten liegt die Drehzahl bei 8800 · 2,38/3,75 ≈ 5585/min, das Drehmoment dort ist rund 0,89. Während der 120 ms Schaltpause gibt es keinen Antrieb.
Beispiel 5: Bremsen nimmt Lenkung (Pro, Lenkung aus Gewichtsverlagerung)
Neutral-Layout, 100 km/h (Tempoanteil voll), eingeschwungener Zustand, Bremsbalance 62 %, Bremsen nimmt Lenkung 0,95. Vereinfachend ist die Last vorn 0,5 + Bremse · 0,30.
| Bremse | uF | cap | use | steerGrip (ohne Reifen, Nässe) | Deutung |
|---|---|---|---|---|---|
| 0,2 | 1,12 | 1,067 | 0,236 | 1,04 | Trail-Braking: etwas mehr Lenkung als rollend |
| 0,5 | 1,30 | 1,166 | 0,589 | 1,01 | etwa wie rollend |
| 0,8 | 1,48 | 1,264 | 0,942 | 0,84 | spürbar weniger |
| 1,0 | 1,60 | 1,328 | 1,178 | 0,61 | deutlich weniger, aber nicht am Notboden |
Die Lenkwinkel-Kalibrierung gleicht nur den statischen Grip aus, diese Verhältnisse kommen also am Servo an.
Beispiel 6: Pacejka am Limit
Pacejka, Haftgrenze 0,7, voller Einschlag bei 60 % des Höchsttempos (177 km/h), rollend (Last vorn 0,545).
- quer = 1 · 0,6 · 1,8 / 0,7 ≈ 1,543.
- vorn = 0,5 / 0,545 ≈ 0,917; uV = 1,543 · 0,917 ≈ 1,415 (über dem Scheitel).
- y(1,415) ≈ 0,99; Wirkfaktor = 0,99 / 1,415 ≈ 0,70.
- Am Auto kommen statt 45 nur etwa 31 Grad an, das Cockpit meldet Untersteuern, das Pad brummt.
Weitere Werte der normierten Kurve: Wirkfaktor 0,83 bei u = 1,2; 0,66 bei 1,5; 0,49 bei 2; 0,32 bei 3.
Grenzen und bekannte Probleme
- Das Modell formt nur die zwei Befehlsbytes. Ob das echte Auto rutscht, hängt an Boden, Reifen und Firmware; das Einspurmodell kann keine echte Gierrate messen.
- Der Tacho (Maßstab 68,1) und die Physik (Maßstab 73,75) benutzen verschiedene Faktoren. Schwellen, die „10 km/h“ heißen, sind in Physik-km/h gemeint.
- Der Regler „0 → 100 km/h“ trifft die angezeigte Zeit nicht genau, weil die Kalibrierung gegen ein vereinfachtes Modell rechnet.
- In 1.2.9 nannten die Erklärtexte einiger Fahrgefühle ältere Werte (z. B. Arcade „2,0 s“ und „250 %“, Pro „200 %“ Lenkkalibrierung); mit 1.2.11 sind sie berichtigt. Die ⓘ-Texte zu Lenkdämpfung (83 ms) und Bremskennlinie (1,3) nennen weiterhin die älteren Vorgaben. Die Tabelle oben gibt die gültigen Werte wieder.
- Pro und Omega haben fast dieselben Werte (Unterschiede: Bremsen nimmt Lenkung 0,95 gegen 1,15, Bremsaufbau 0,12 gegen 0,45 s). Bei Gleichstand zeigt die App das zuletzt gewählte.
- Rückwärts ergibt −0,5 wegen der Rundung Δ = −63 und nicht die bestätigten −64.
- Die Layout-Daten (Achslast, Radstand, Trägheit) sind Schätzungen; die Lastempfindlichkeit 0,15 ist eine gemessene Abstimmung, keine Reifeneigenschaft.
- Gasfaktor (
topSpeedScale) und Akkuausgleich stehen nicht in der Modellkonfiguration, sondern im Sendeweg, und gelten für alle Spieler gemeinsam (spielerSendenVon()). Ein eigenes Fahrgefühl für Spieler 2 oder 3 bringt deshalb seinen eigenen Gasfaktor nicht mit: wählt Spieler 2 Arcade, während Spieler 1 Pacejka fährt, gilt für beide der Gasfaktor 1,8 statt 1,1. Ob das so gewollt ist, ist noch nicht gesichert. - Spieler 2 und 3 haben keinen Windschatten; der Akkuausgleich liest den Akkustand von Auto 1.
- RC ist in Arbeit; das Tempo dort ist nur geschätzt.
- Noch nicht gesichert: ob die Haftgrenze 0,7 und die Heckreserve 1,2 am echten Auto ein stimmiges Gefühl ergeben; der Regler ist ausgeblendet.
Versionsgeschichte
| Version | Änderung |
|---|---|
| 0.5.10 | Gaskennlinie als Regler (Exponent; 1 = linear). |
| 0.5.13 | Schaltpause läuft über dt statt über einen Zeitgeber.
|
| 0.5.18 | Reifenmodell in Pro ab Werk an; Drift-Modus (später entfernt). |
| 0.5.54 | Lenkdämpfung ab Werk 0 ms (sofort). |
| 0.8.40 | „Voller Einschlag bei“ (90 %); Gas-, Brems- und Lenkkennlinie ab Werk 2,45. |
| 0.9.39 | Tacho mit gemessenem Maßstab 68,1. |
| 0.9.64 | Fahrgefühl Pacejka (Pro mit Pacejka-Lenkmodell). |
| 0.10.5 | Sim+; Drift-Modus entfernt, Rohmodus heißt RC; FAHREN zeigt nur noch die gebräuchlichen Fahrgefühle. |
| 1.0.22 | Fahrgefühl RC; der Steuerungsmodus hängt am Fahrgefühl, die Einstellung ist ausgeblendet. |
| 1.0.36 | Fahrgefühl Omega (Pro wie 0.9.50, eingefroren). |
| 1.0.42 | Eigener Bremsaufbau 0,12 s (Omega 0,45 s), Regler Bremsaufbau. |
| 1.0.43 | Pro: Bremsen nimmt Lenkung 95 % statt 115 %. |
| 1.0.44 | Bremssteal an der simulierten Gewichtsverlagerung für die Realismus-Fahrgefühle; Arcade-Bremse stärker. |
| 1.1 (1.1.3) | Lenkung aus der Gewichtsverlagerung mit Tiefpass; stetige Lenkentlastung unter Gas; Omega rechnet wieder wie 1.0.42; Arcade ohne Kopplung von Gas/Bremse an die Lenkung; RC bremst bis zum geschätzten Stillstand. |
| 1.1 (1.1.11) | Rückwärtsgang halb so schnell, Regler „Tempo rückwärts“. |
| 1.1 (1.1.25) | Pacejka: Übersteuern ab Werk aus, eigener Schalter. |
| 1.1 | Rückwärtsgang mit Gas und Bremse zusammen (experimentell). |
| 1.1 (1.1.42) | Pacejka-Vibration nur bei echtem Untersteuern. |
| 1.2 (1.2.4) | Fahrgefühl je Spieler in der Garage. |
| 1.2 (1.2.11) | Erklärtexte der Fahrgefühle Arcade, Pro, Pacejka und Omega an die eingestellten Werte angeglichen. |
Siehe auch
- Verschleiß
- Boxenstopp
- Rennarten
- Mehrspieler
- Virtuelles Fahren
- Carrera HYBRID
- Bluetooth Low Energy
- Hexadezimalsystem
- Aufbau von OmegaSim
- Glossar
- Keine Reaktion des Fahrzeugs
Quellen im Code
src/40-physics.js:CarreraPhysicsEnginemitupdate(),thrustAt(),resistAt(),calibrateAccel(),simulateLaunch(),triggerShift(),yawStep(),pacejkaStep(),applyLayout(),applyGearbox(); freie Funktionenkennlinie(),lenkVollAnteil(),steerDaempfungFor(),pacY(),pacB(),pacGasFaktor(); KonstantenSTEER_MAX_DEG,LAYOUTSsrc/30-input.js:REAL_SCALE,TACHO_SCALE,GT3_GEARS,F1_GEARS,P412_GEARS,GEARBOXES,TORQUE_CURVE,torqueAt()src/50-drive.js:physicsStep(),physicsStepVon(),physModusAnwenden(),gasBremseRueckwaertsPruefen(),pacejkaRueckmeldung(),fahrhilfeVollGilt(), Regler-Handlersrc/20-protocol.js:buildCommandPacket(),sendControlValue(),controlHeartbeat(),rcGas(),driftGegenlenken(),CONTROL_SEND_INTERVAL_MSsrc/10-ble-explorer.js:crc8(),MIN_THROTTLE_DELTAsrc/98-presets.js:PRESETS,applyPreset(),presetAktiv(),setzeBrakeStealLast(),presetSchnappschuss(),spielerPresetSetzen()src/49-spieler.js:zusatzMotorAbgleichen(),spielerGefuehlUeberlagern(),spielerPhysikAn()src/00-index.head.html: Regler unter#sub-opt-feel
Weblinks
- Browserfassung, Android-App und Quellcode: Links auf der Hauptseite