modeld 3-mode power saving, tlog disabled, dashcamd boot fix

- modeld: full 20fps (lat active), 4fps (driving no lateral), 0fps
  (standstill). Standby timestamp written in both standby and 4fps modes
  to suppress transient errors on engagement transition
- tlog: all calls commented out (was causing 100Hz CPU load in controlsd
  and carstate). tlog client now checks TelemetryEnabled param before
  sending — zero cost when disabled
- dashcamd: wait for valid frame dimensions on startup (fix SIGSEGV),
  always_run (manages own trip lifecycle)
- Fan: driving range 15-100%

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-14 02:40:18 -05:00
parent 4756d8e32c
commit 2b522021d5

View File

@@ -241,16 +241,21 @@ def main(demo=False):
sm.update(0) sm.update(0)
# CLEARPILOT: power saving — skip inference when lateral control is not active # CLEARPILOT: power saving — three modes based on driving state
# Covers standstill, manual driving (no cruise), and disengaged states # Full 20fps: lat active or lane changing
# Exception: keep processing during lane changes (no_lat_lane_change) # Reduced 4fps: not lat active, not standstill (driving without cruise)
# Standby 0fps: standstill
lat_active = sm['carControl'].latActive lat_active = sm['carControl'].latActive
lane_changing = params_memory.get_bool("no_lat_lane_change") lane_changing = params_memory.get_bool("no_lat_lane_change")
should_standby = not lat_active and not lane_changing 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: if should_standby and not model_standby:
params_memory.put_bool("ModelStandby", True) params_memory.put_bool("ModelStandby", True)
model_standby = True model_standby = True
cloudlog.warning("modeld: standby ON (lat_active=%s standstill=%s)", lat_active, sm['carState'].standstill) cloudlog.warning("modeld: standby ON (standstill)")
elif not should_standby and model_standby: elif not should_standby and model_standby:
params_memory.put_bool("ModelStandby", False) params_memory.put_bool("ModelStandby", False)
model_standby = False model_standby = False
@@ -265,6 +270,19 @@ def main(demo=False):
last_vipc_frame_id = meta_main.frame_id last_vipc_frame_id = meta_main.frame_id
continue 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
desire = DH.desire desire = DH.desire
is_rhd = sm["driverMonitoringState"].isRHD is_rhd = sm["driverMonitoringState"].isRHD
frame_id = sm["roadCameraState"].frameId frame_id = sm["roadCameraState"].frameId