From 2ce6e8fe0c2fade7159a7ec04f4e12335e926b19 Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Thu, 23 Apr 2026 10:42:11 -0500 Subject: [PATCH] modelrevert: boot fixes + strip remaining variable-rate cruft controlsd: - stop writing the removed 'no_lat_lane_change' persistent param (key isn't in the whitelist anymore). Write to frogpilot_variables.no_lat_lane_change instead so the carcontroller read still works and the lane-change-disengage feature is preserved. - initialize self.driving_gear = False in __init__; it's set at the end of step() in update_frogpilot_variables but clearpilot_state_control reads it on the first iteration before that's run. modeld: - remove the remaining CLEARPILOT variable-rate / standby code path that was baked into the initial-import commit (the one our first commit captured). Constant 20fps, no ModelStandby/ModelStandbyTs writes, no params_memory reads for 'no_lat_lane_change' (which isn't registered anymore). - drop now-unused locals (model_standby, last_standby_ts_write, params_memory). Co-Authored-By: Claude Opus 4.7 (1M context) --- selfdrive/controls/controlsd.py | 5 ++-- selfdrive/modeld/modeld.py | 48 +++------------------------------ 2 files changed, 7 insertions(+), 46 deletions(-) diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 2250890..6400478 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -85,6 +85,7 @@ class Controls: self.speed_state = SpeedState() self.speed_state_frame = 0 self.was_driving_gear = False + self.driving_gear = False self.radarless_model = self.params.get("Model", encoding='utf-8') in RADARLESS_MODELS @@ -700,9 +701,9 @@ class Controls: if model_v2.meta.laneChangeState == LaneChangeState.laneChangeStarting and clearpilot_disable_lat_on_lane_change: CC.latActive = False - self.params_memory.put_bool("no_lat_lane_change", True) + self.frogpilot_variables.no_lat_lane_change = True else: - self.params_memory.put_bool("no_lat_lane_change", False) + self.frogpilot_variables.no_lat_lane_change = False if CS.leftBlinker or CS.rightBlinker: self.last_blinker_frame = self.sm.frame diff --git a/selfdrive/modeld/modeld.py b/selfdrive/modeld/modeld.py index 527e4ad..fb7b765 100755 --- a/selfdrive/modeld/modeld.py +++ b/selfdrive/modeld/modeld.py @@ -183,9 +183,6 @@ def main(demo=False): model_transform_main = np.zeros((3, 3), dtype=np.float32) model_transform_extra = np.zeros((3, 3), dtype=np.float32) live_calib_seen = False - model_standby = False - last_standby_ts_write = 0 - params_memory = Params("/dev/shm/params") nav_features = np.zeros(ModelConstants.NAV_FEATURE_LEN, dtype=np.float32) nav_instructions = np.zeros(ModelConstants.NAV_INSTRUCTION_LEN, dtype=np.float32) buf_main, buf_extra = None, None @@ -241,47 +238,10 @@ def main(demo=False): sm.update(0) - # CLEARPILOT: power saving — three modes based on driving state - # Full 20fps: lat active or lane changing - # Reduced 4fps: not lat active, not standstill (driving without cruise) - # Standby 0fps: standstill - lat_active = sm['carControl'].latActive - lane_changing = params_memory.get_bool("no_lat_lane_change") - standstill = sm['carState'].standstill - full_rate = lat_active or lane_changing - - # Standby transitions (standstill only) - should_standby = standstill and not full_rate - if should_standby and not model_standby: - params_memory.put_bool("ModelStandby", True) - model_standby = True - cloudlog.warning("modeld: standby ON (standstill)") - elif not should_standby and model_standby: - params_memory.put_bool("ModelStandby", False) - model_standby = False - run_count = 0 - frame_dropped_filter.x = 0. - cloudlog.warning("modeld: standby OFF") - if model_standby: - now = _time.monotonic() - if now - last_standby_ts_write > 1.0: - params_memory.put("ModelStandbyTs", str(now)) - last_standby_ts_write = now - last_vipc_frame_id = meta_main.frame_id - continue - - # Reduced framerate: 4fps when not lat active and not standstill - # Skip 4 out of every 5 frames (20fps -> 4fps) - # Write standby timestamp so controlsd suppresses transient errors - if not full_rate: - now = _time.monotonic() - if now - last_standby_ts_write > 1.0: - params_memory.put("ModelStandbyTs", str(now)) - last_standby_ts_write = now - if run_count % 5 != 0: - last_vipc_frame_id = meta_main.frame_id - run_count += 1 - continue + # CLEARPILOT: constant 20fps. Variable-rate + standby logic removed — the + # variable-rate path caused freq_ok cascades in downstream consumers + # (calibrationd/locationd/paramsd). Running at the camera's native rate is + # simpler and keeps the full-stack localization chain happy. desire = DH.desire is_rhd = sm["driverMonitoringState"].isRHD