Gyro tail + audio (task #66): the INSTABILITY MODEL -- mech+0x3F0 reconstructed
Byte-decoded the un-exported master-perf block @0x4aad3d-0x4aaf14 (capstone;
the same gap that held the F5 footstep code) [T1]:
instab = (min(|AccelerationLastFrame| / maxUnstableAcceleration, 1)
x unstableAccelerationEffect)^2
instab += clamp((demand - legCycleSpeed)/demand, <=1) # "gun the engine"
x unstableGunTheEngineEffect # (demand clamped to
# [gimpStride(neg), runMax2])
if (legAnimationState == 4 /*turn-in-place*/) instab += unstableStopedTurnEffect
clamp to 1 -> mech+0x3F0 -> gyro->swayBias (gyro+0x3A8)
Every piece resolves to already-reconstructed structure: the model-record
tuning block rec+0x80..0x94 (ctor copy @0x4a2593 -- the six authored
Unstable* fields, previously parked in the Wword scratch bank, now real
members); AccelerationLastFrame@0x82c = the snapshot of the ring-derived
localAcceleration (copied at the perf tail @0x4ab142); CurrentSpeed@0x348 =
legCycleSpeed; the trn state 4 gate; and the gyro feed lands in the
EXISTING swayBias member + GyroscopeSimulation consumer (task #56) --
GyroFrameJointWrite's "0.0f model TBD" argument is now the live value.
UnstablePercentage (binary id 52 @0x3F0) binds the real member: the LAST
dead audio attribute is live -- the authored instability alarm (start
thresh 0.01 + volume = the fraction) sounds under hard maneuvers, and the
cockpit ambient sway now scales with reckless driving.
Live verification (30s, 0.6-throttle run): instab 0.38 during the walk->run
chase (cyc 22.2 vs demand 33.6), settling to 0.002-0.12 per-stride ripple at
steady run; attribute binds with live float values; [instab] trace under
BT_GYRO_TRACE. unstableSuperStopEffect/unstableHighVelocityEffect writers
remain unlocated (plausibly the airborne perf variant) -- noted on members.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
c581553a6c
commit
c51d64a6b8
@@ -879,6 +879,25 @@ protected:
|
||||
Scalar accelPrevFwdMean;
|
||||
Scalar accelPrevVertMean;
|
||||
Point3D accelPrevPos; // raw position memory for the ring feed
|
||||
// (task #66, the gyro-tail INSTABILITY MODEL -- byte-decoded from the
|
||||
// master perf @0x4aad3d-0x4aaf14 [T1]):
|
||||
// instab = (min(|AccelerationLastFrame| / maxUnstableAcceleration, 1)
|
||||
// x unstableAccelerationEffect)^2
|
||||
// instab += clamp((demand - legCycleSpeed)/demand, <=1) ["gun the
|
||||
// engine": commanded speed the legs haven't reached]
|
||||
// x unstableGunTheEngineEffect
|
||||
// if (legAnimationState == 4 /*trn*/) instab += unstableStopedTurnEffect
|
||||
// clamp to 1 -> mech+0x3F0, then gyro->swayBias (gyro+0x3A8) and the
|
||||
// UnstablePercentage audio attribute (binary id 52 @0x3F0) read it.
|
||||
// The six tuning fields come from the model record +0x80..0x94 (ctor
|
||||
// @0x4a2593-0x4a25d5); previously parked in the Wword scratch bank.
|
||||
Scalar unstablePercentage; // binary @0x3F0 (reset writes 0)
|
||||
Scalar maxUnstableAcceleration; // @0x784 <- rec+0x80
|
||||
Scalar unstableAccelerationEffect; // @0x788 <- rec+0x84
|
||||
Scalar unstableGunTheEngineEffect; // @0x78C <- rec+0x88
|
||||
Scalar unstableSuperStopEffect; // @0x790 <- rec+0x8C (writer not yet located; airborne perf?)
|
||||
Scalar unstableHighVelocityEffect; // @0x794 <- rec+0x90 (writer not yet located)
|
||||
Scalar unstableStopedTurnEffect; // @0x798 <- rec+0x94
|
||||
// Radar/map gauge attributes (binary @0x404/0x408/0x40c/0x3f8). The map
|
||||
// widget reads position/angle as POINTERS into the mech's live origin, so
|
||||
// radarLinearPosition/radarAngularPosition point at localOrigin.{linear,
|
||||
|
||||
Reference in New Issue
Block a user