Skip to content

Releases: RumiCar-group/RumiCar-Simulator

Release list

v7.3.0

Choose a tag to compare

@z10000 z10000 released this 05 Aug 13:37

This release brings the public repository from v5.1.0 to v7.3.0.

The intermediate versions below were developed and verified in sequence, but only
v5.1.0 and v7.3.0 exist as published snapshots here — the versions in between
are documented rather than tagged, because tagging a tree that is not that version
would be inaccurate. The in-app changelog carries the same notes.


v7.3.0

Four "learn and grow" features were added to official racing and practice (Stage AS13, the W6 backlog). (1) 🏆 Championship: per season (an event's season) and per class, a points table across several events, plus the champion. Points are 10-8-6-5-4-3-2-1 (0 from 9th down, overridable per event); positions come from the actual finishing order including filler cars, and only real authors score. A retirement scores 0 but still counts as a start. When points, wins, podiums and finishes are all level, no champion is declared and it is shown honestly as a tie. (2) 🗣 Ladders by language: compete for course records within C and within Python. The language is read from the entries, so the official result format (result.json) is unchanged down to the byte — re-verification of every previously published record still holds. (Records whose language cannot be determined are not quietly mixed in; the excluded count is shown.) (3) 🎯 Challenges: from this browser's practice records, your completion progress by course difficulty (★1–★5) plus badges (🔰 first steps, clearing each difficulty, 🌏 clearing every course). The thresholds are purely structural — "all courses at that difficulty" and "all courses" — with no arbitrary numbers. The two courses without a finish line have no definition of "finishing", so they are excluded and the count is shown. The easiest course you have not finished is suggested as your next step. (4) ⏱ Sector-by-sector comparison: the spectate replay now lists per-sector times, splitting each lap into three equal parts by the distance that car actually covered, marking the fastest in each sector (●) and stitching them into a "theoretical best" — so you can see which sector is costing you how much. Ghost frames are sampled every 1/12 s, so the lap times here are indicative, and a car that crosses the line between two samples is missing its final lap from the sectors (stated on screen as an honest limit). The physics is unchanged (the tabletop deterministic hashes f0–f3, the official-record verifyHash and share URLs are all machine-verified unchanged by the full gate suite).

日本語

公式レースと練習に「学んで伸びる」仕掛けを4つ足しました (Stage AS13・W6 バックログ)。①🏆 チャンピオンシップ=シーズン (大会の season) × クラス別に、複数の大会をまたいだポイント順位表と王者を出します。配点は 10-8-6-5-4-3-2-1 (9位以下は0・大会側で上書き可) で、順位は補充車を含む実走順位から引き、ポイントが入るのは実在の投稿者だけです。リタイアは0点ですが出走には数えます。ポイントも優勝数も表彰台も完走数も並んで決まらないときは、王者を立てずに「同点」と正直に表示します。②🗣 言語別ラダー=C と Python それぞれの中でコースレコードを競えます。言語はエントリー側の情報から引いているので、公式結果 (result.json) の形式は1バイトも変えていません=これまでに公開された記録の再検証はそのまま成立します (言語が分からない記録は黙って混ぜず、除外した件数を表示します)。③🎯 チャレンジ=このブラウザの練習記録から、コース難度 (★1〜★5) 別の完走状況とバッジ (🔰はじめの一歩・各難度の制覇・🌏全コース制覇) を出します。しきい値は「その難度の全コース」「全コース」という構造だけで決めていて、恣意的な数字はありません。ゴールライン (周回判定) を持たない2コースは完走が定義されないので対象外にし、その件数も表示します。未完走のうちいちばんやさしいコースを「次の一歩」として案内します。④⏱ 区間別 並走比較=観戦リプレイに、1周を「その車が実際に走った距離」で3等分した区間ごとのタイムを並べ、区間ごとの最速 (●) と、それをつないだ「理論ベスト」を出します。どの区間で何秒失っているかが分かります。ゴーストは1/12秒ごとの記録なので、ここの周回時間は表示用の目安で、ゴールがその記録の合間に入った車は最後の1周だけ区間に出ません (正直な限界として画面にも明記しています)。物理は不変です (卓上の決定論ハッシュ f0〜f3・公式記録の verifyHash・共有URL いずれも不変を全ゲートで機械確認)。

v7.2.0

Added continuous steering as optional equipment (all three engines; leaving the default changes nothing). The real RumiCar steers with three states only (left / centre / right), and that is the baseline of the learning API. Choosing "Continuous" under "Steering servo (optional)" in the toolbar fits a proportional servo, so RC_steer(direction, 0-255) sets how much lock you want (255 = full lock is bit-identical to the 3-state call). Three-state steering can still make intermediate angles by toggling rapidly, but each command sends the servo travelling towards full lock, so a ripple remains. Measured at 20 Hz (the rate a learning program actually runs at), the steering hold error drops from 1.59deg to 0.0235deg (= one step of the 0-255 scale), about a 68x improvement. We also re-measured Stage AO8's 20-cell "is drifting faster?" table with continuous steering. The answer is that not a single cell turns GO (all 20 remain NO-GO). Along the way we found that the original drift test driver never applied any counter-steer at all (the sideslip-angle sign was the wrong way round), so we re-measured with a sign-corrected proportional counter as well - and three-state and continuous steering gave the same answer. Making the servo 64x faster does not change it either. The real barrier is not the steering but the car's own recovery limit: past roughly 36deg of sideslip it cannot come back within 0.6 s even with the wheel straightened. Continuous steering is equipment for placing the steering precisely, not for going faster (indeed three-state is quicker on the tabletop oval, and on the full-scale circuit it is faster for some car types and slower for others). With the default 3-state setting, neither the physics nor any record changes by a single byte.

日本語

操舵サーボの「連続舵」を任意装備として追加しました (3エンジン共通・既定のままなら従来と完全に同じ)。実機 RumiCar の操舵は左/中立/右の3値だけで、これは学習APIの基本仕様です。ツールバーの「操舵サーボ(任意)」で〈連続舵〉を選ぶと、比例サーボを増設した車になり RC_steer(方向, 0〜255) で舵の強さを指定できます (255=全舵は3値と1ビットも変わりません)。3値でも小刻みなオン/オフで中間舵角は作れますが、指令のたびにフル舵へ向かって流れるぶんのリップルが残ります。実測では、学習プログラムの実レート20Hzでの舵の保持誤差が 1.59° から 0.0235°(=0〜255の刻みぶん) へ、約68倍改善しました。あわせて Stage AO8 の「ドリフト優位 go/no-go」20セルを連続舵で取り直しました。結論は GO は1つも復活しない(全20セルNO-GO)です。この過程で、当時のドリフト試験ドライバが逆ハン(カウンター)を一度も当てていなかったこと(横滑り角の符号の取り違え)が判明したので、符号を正した比例カウンターでも測り直しましたが、3値でも連続舵でも結果は同じでした。サーボの速さを64倍にしても変わりません。本当の壁は舵ではなく車体側の回復限界で、横滑り角がおよそ36°を超えると舵を戻しても0.6秒では戻れません。連続舵は「速く走るための装備」ではなく「舵を正確に置くための装備」です (実際、卓上オーバルでは3値の方が速く、フルスケール競技サーキットでは車種によって速くも遅くもなります)。既定の3値なら記録も物理も1バイトも変わりません。

v7.1.0

Added suspension "degrees of freedom" as optional equipment (precise v2 engine only; leaving the default changes nothing). Until now load transfer in a corner merely caught up with acceleration through a first-order lag, so it could not reproduce the way a real car's roll overshoots and settles back on a flick transition. Choosing Soft / Balanced / Stiff under "Suspension DOF (optional)" in the toolbar turns roll and pitch into genuine one-degree-of-freedom spring-damper modes, so the load overshoots during the transition. The size of the overshoot depends only on the damping ratio (Soft 37.2%, Balanced 4.6%, Stiff 0%), and the excess transfer transiently eats into lateral grip, so the car turns in slightly less well at the moment of the flick (transient understeer). Steady-state cornering is exactly the same as the default — only the transient changes. No new constants were introduced: the equipment supplies only two dimensionless numbers (a natural-frequency multiplier and a damping ratio), so the same numbers mean the same thing on the tabletop and at full scale.

日本語

サスペンションの「自由度」を任意装備として追加しました (精密 v2 エンジン専用・既定のままなら従来と完全に同じ)。これまでコーナーでの荷重移動は、加速度に一次遅れで追いつくだけの扱いで、実車で起きる「切り返しでロールが行き過ぎてから揺り返す」動きを表現できませんでした。ツールバーの「サス自由度(任意)」でソフト/標準/ハードを選ぶと、ロールとピッチがばねと減衰を持つ本物の1自由度系になり、切り返しの過渡で荷重が行き過ぎます。行き過ぎの大きさは減衰比だけで決まり (ソフト 37.2%・標準 4.6%・ハード 0%)、行き過ぎたぶんは横グリップを過渡的に削るので、切り返しの瞬間だけ曲がりにくくなります (過渡アンダー)。定常のコーナリングは既定と厳密に同じで、変わるのは過渡だけです。新しい定数は増やしておらず、装備が与えるのは無次元の2つの数 (固有振動数の倍率と減衰比) だけなので、卓上でもフルスケールでも同じ数字が同じ意味になります。

v7.0.0

Corrected the slope gravity model and added a "cross-slope (bank / cant)" field to courses. Until now the gradient on touge courses used only the fore-aft component of the gravity vector and discarded the lateral component of that same gravity. Measured on real runs, the car heading and the road direction diverge by up to 80 degrees, and the lateral gravity being thrown away reached 1.47 m/s2 - the same magnitude as the lateral acceleration actually attainable at tabletop scale (about 1.63 m/s2), so it was far from negligible. The wheel loads also kept using the full gravity, which left the model carrying 1.16% more gravity than exists. Gravity is now decomposed correctly into three components relative to the road surface (fore-aft, lateral, and the force pressing on the road). That finally includes the force that matters most on a real mountain pass: being pushed from the uphill side toward the valley through a descending hairpin. This is a major version because it affects past reproducibility: only driving on touge courses changes - flat courses, the frozen hashes f0-f3 and the canonical official-race record are byte-for-byte identical. Touge practice bests are kept exactly as they are, with an "(as of vX)" note (they are never altered). Measured on the six bundled touge courses, the default samples now finish 15/18 instead of 16/18, and lap times move between -7.9% and +56% (descending hairpins became honestly harder). Alongside this, course definitions gained the optional field bank (degrees). Raising the outside of a curve turns part of gravity toward the inside of the turn, so you can corner without relying on tire friction alone. The value is the bank angle at that course's tightest corner; elsewhere it scales with curvature down to zero (straights are unbanked - exactly the superelevation rule used in road design). Negative values give adverse camber. The limit speed of a banked corner becomes v2 = Rg(mu*cos(phi) + sin(phi)), and measurement matches that closed form to 10^-16. In real runs, sweeping the bank from 0 to 10 degrees shortened lap times monotonically (45.10 -> 43.03 s, -4.6%). Push it to 20 degrees, however, and although the theoretical limit is still higher, the three-value steering cannot correct fast enough and the car hits the inside wall - so "the limit rises" and "you go faster" are recorded separately, as measured. bank appl...

Read more