Gearing as development, physics-derived load model, 105kg rider

Gears are metres per crank revolution rather than gradient offsets, and
resistive_force_n exposes what the road is doing at a given speed so load
can be computed directly instead of servoed.

The load model is tested but not yet commanded: FTMS sim mode has the
trainer compute rolling and aero itself, so sending a gradient that already
contains them would double-count. Needs Crr/Cw zeroed and a ride to verify.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-05 15:46:07 +02:00
co-authored by Claude Opus 5
parent 57eb5e809b
commit f2c4cb2120
5 changed files with 428 additions and 119 deletions
+7
View File
@@ -57,7 +57,14 @@ pub enum ClickEvent {
name: Option<String>,
},
/// The link dropped. Any held button has already been reported as released.
/// The actor is retrying — this is not terminal.
Disconnected,
/// Reconnecting ran out of attempts and the actor has stopped (FR-1.11).
///
/// Terminal, and distinct from [`ClickEvent::Disconnected`] for exactly that
/// reason: one means "hold on", the other means "go and look at the pod".
/// Nothing further arrives on this stream.
GaveUp { attempts: u32 },
/// A press or release edge. Repeats while held are filtered out here, not
/// by the consumer (see [`ButtonTracker`]).
Button { button: Button, pressed: bool },