adopt pre-modelrevert clearpilot tree (d639e28) as the new head
Discard the modelrevert tree adoption (8b4b7e0) and the in-process park short-circuits / cached-output / dashcam-idle work that came with it (0dc8002,37e095e). Restore the clearpilot tree as it stood atd639e28— the parked-controlsd manager-process split, the GPS-disable in locationd, the controlsd UI hooks, the boardd ignition-edge safety_setter_thread fix. After a full /data/params/d wipe and re-calibration drive, the modelrevert-tree variant overcorrected on turns; reverting to the parked-controlsd architecture (which Brian had previously vetted and documented in887b9c9+27cad05) and starting fresh. Single new commit, no merge — file state matchesd639e28byte-for-byte. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
CLEARPILOT: minimal controlsd variant that runs while ignition is on but the
|
||||
car is in Park. Keeps CAN parsing and carState publishing alive (so thermald
|
||||
can see gearShifter and decide when to swap us out for the full controlsd),
|
||||
but skips all of the heavy onroad work — no model, no planner, no lateral or
|
||||
longitudinal control, no actuator commands.
|
||||
|
||||
Manager swaps between this and the full controlsd via predicate flips:
|
||||
- this runs when: ignition AND not started
|
||||
- full runs when: started (which requires ignition AND not_parked)
|
||||
|
||||
The two are mutually exclusive — only one publishes carState at a time.
|
||||
"""
|
||||
from types import SimpleNamespace
|
||||
|
||||
from openpilot.common.realtime import Priority, config_realtime_process
|
||||
from openpilot.selfdrive.car.card import CarD
|
||||
|
||||
|
||||
def _make_default_frogpilot_variables() -> SimpleNamespace:
|
||||
"""Safe defaults for fields read inside CarInterface.update / CarState.update.
|
||||
|
||||
We're not actuating anything here; these only need to keep the update path
|
||||
from raising AttributeError. False/0 across the board is the safe baseline."""
|
||||
fv = SimpleNamespace()
|
||||
fv.conditional_experimental_mode = False
|
||||
fv.experimental_mode_via_distance = False
|
||||
fv.traffic_mode = False
|
||||
fv.sport_plus = False
|
||||
fv.long_pitch = False
|
||||
fv.no_lat_lane_change = False
|
||||
return fv
|
||||
|
||||
|
||||
def main():
|
||||
config_realtime_process(4, Priority.CTRL_HIGH)
|
||||
|
||||
# CarD's __init__ blocks until it sees CAN + a pandaState, then calls get_car
|
||||
# to fingerprint and write CarParams. Same path the full controlsd takes.
|
||||
card = CarD()
|
||||
card.initialize()
|
||||
|
||||
fv = _make_default_frogpilot_variables()
|
||||
|
||||
# state_update drains CAN, parses carState, publishes carState/carOutput/carParams.
|
||||
# Internally blocks via drain_sock_raw(wait_for_one=True), so the loop is
|
||||
# naturally paced by CAN traffic — no extra sleep needed.
|
||||
while True:
|
||||
card.state_update(fv)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user