mirror of
https://github.com/infiniteCable2/openpilot.git
synced 2026-08-04 15:56:05 +08:00
72f09ec9f5
* Maybe I was asleep but somehow it worked. * Maybe I was asleep but somehow it worked. * 70/30 split * 60/35 split * 67:33 split * use Sqrt for tiny values to increase factor. Oh, also add a test file. * use Sqrt for tiny values to increase factor. Oh, also add a test file. * use Sqrt for tiny values to increase factor. Oh, also add a test file. * Raise these to restart tests * Raise these to restart tests * Update jerk calculation mimicking j_ego math. * README.md * Update timestep * Fix test * Readability * Lower time * Add higher limits for CANFD * Send these as a floating object. update comments to add TODO msg. * Conditional flags * yes its a little weird but heres why: ` "aReqValue": long_state.accel_value if enabled else a_val` its only to not have merge conflicts with syncs from this file, because if not enabled a_val is already at 0 anyways. * Make it easier to read * Chronological order * Trigger rebuild * This is an internal test on my end. Disregard, for now * fw version for my car... * remove fw version as that was a test * bump submodules * refactor that while passing internal tests * bump safety mutation test * all should match 50 Hz * bump safety mutation test * match stock behavior for accel * do our own clipping * apply upper/lower dynamically * bump test * bump test * Higher lower limit * move desired accel force zero in tuning controller * bump * bump * abs it here * fix logic * make sure it resets to 0, enforced in safety * Test a few things * Higher jerk for VOACC * Elantra specific * raise `off` to stock * bump opendbc test * allow jerk calculations at all times * bump * bump * match aReqVale * we dont need such high accel jerk when above 20m/s. This is cruise control, not a racecar. * 0.45 default long actuator delay * align type hint * add lower jerk multiplier for HYUNDAI_IONIQ * Change min jerk * should be float * Change min jerk * Change min jerk upper * Change max jerk upper * Change max jerk upper * Change max jerk upper * step + threshold + first order filter to smooth * constants * nah * multiplier to 1.5 * step updates for parabolic accel/braking * step updates for parabolic accel/braking * even less * test multiplier * Merge remote-tracking branch 'sunnypilot/opendbc/master-new' into HKG-long-tune * back to default delay for now * update test * update config * update test * update config.py * update test * Remove stoppingDecelRate **No need for this anymore** * multiplier to 1.0 * Variable lower dependency * Variable lower dependency * Variable lower jerk minimum * Variable lower jerk minimum planned_accel -> desired_acel * Revert some scaling * .01 here * .01 here * try even smoother stopping * missed a `tuning` here that instead calls itself to inf. * what is math * Red Diff * Red Diff * bring some back * bring some back * stronger when needed * something simple * simplify more * simplify more * dont use future * whoops * why * reset * Refactor longitudinal controller for better jerk handling Revised `calculate_a_value` and jerk processing logic to improve acceleration and jerk handling, particularly under dynamic conditions. Adjusted test cases to cover the new logic. * Refactor longitudinal controller for better jerk handling Revised `calculate_a_value` and jerk processing logic to improve acceleration and jerk handling, particularly under dynamic conditions. Adjusted test cases to cover the new logic. * Refactor longitudinal controller for better jerk handling Revised `calculate_a_value` and jerk processing logic to improve acceleration and jerk handling, particularly under dynamic conditions. Adjusted test cases to cover the new logic. * Adjust lower_jerk interpolation for improved accuracy * Lowered the acceleration error threshold from -0.01 to -0.001 * Adjust jerk interpolation thresholds for Hyundai tuning. Updated the interpolation range for smaller acceleration errors. * Move it up * -.03 not -.05 * radarUnavailable = higher limit patch * Commit the real change * Updated the interpolation values and logic for lower_jerk to refine acceleration behavior. * Updated the interpolation values and logic for lower_jerk to refine acceleration behavior. * Updated the interpolation values and logic for lower_jerk to refine acceleration behavior. * Updated the interpolation values and logic for lower_jerk to refine acceleration behavior. * THIS. THIS WILL STOP FOR LEADS * Higher for VOACC * Higher for VOACC * Rename `make_jerk` to `calculate_jerk` in test cases. * Adjust jerk tuning for Hyundai longitudinal control Updated the interpolation table for lower jerk values to improve deceleration handling. This adjustment refines control behavior during higher deceleration requests. * Updated the interpolation breakpoint from -0.03 to -0.025 * Adjust longitudinal control jerk tuning for smoother response Updated interpolation values in the jerk tuning logic to improve acceleration smoothing in Hyundai longitudinal control. These changes aim to provide a more consistent and predictable driving experience, particularly during deceleration scenarios. * Handle radar unavailability in longitudinal tuning check * Introduce `toggleDisableMsg` to streamline determining toggle states and descriptions. * `sunnypilot` * `Refactor longitudinal control acceleration and jerk handling` Removed unused `FirstOrderFilter` and simplified acceleration and jerk calculations for improved clarity and maintainability. Adjusted logic to replace redundant return statements, streamline jerk computation, and reduce unnecessary dependencies. * `Refactor longitudinal control acceleration and jerk handling` Removed unused `FirstOrderFilter` and simplified acceleration and jerk calculations for improved clarity and maintainability. Adjusted logic to replace redundant return statements, streamline jerk computation, and reduce unnecessary dependencies. * Simplify test to be straight to the point. * Adjust upper_speed_factor and integrate ramp_update logic * Adjust upper_speed_factor and integrate ramp_update logic * Adjust upper_speed_factor and integrate ramp_update logic * Refine acceleration and jerk tuning logic. * greater than 0 * bump * bring back ramp update for jerk upper * Update opendbc_repo * Revert "Update opendbc_repo" This reverts commit b790387c9080b3a553694fbae850e9aa8bb6e125. * bump * bump * bump * using count seems to work better * Refine jerk tuning logic and expand test coverage * bump vals * fix logic * Adjust jerk tuning parameters for Hyundai longitudinal control * retry lfs check * bump submodule * Fix acceleration blending and enhance test coverage * Update lower_jerk breakpoints * bump * Adjust lower jerk parameters and include accel_cmd condition * Adjust vars * "Adjust Hyundai longitudinal jerk limits and tuning logic" * Adjust jerk limits and tuning logic for better control * Update Hyundai longitudinal tuning and add dynamic jerk logic Refactored longitudinal configuration to include "lookahead" parameters and revised "jerk_limits" for improved tuning flexibility. Implemented dynamic jerk adaptation logic (Gen1) for smoother braking and acceleration transitions. * Adjust Hyundai longitudinal control parameters for tuning * bump to original branch * QSize Policy to stretch toggle to screen size * bump * completely blocked xD * Sunnypilot -> openpilot * Whitespace * Clean up toggle name * Still allow ramp while in standstill for EV * Adjust Kia Niro EV tuning parameters for smoother control * self.cp.flags * bump submodule * bump * Remove ramp for lower desired jerk * update README.md * update README.md * Adjust lookahead_jerk_lower_v values in Hyundai longitudinal config. * update tuning * Update tune one last time to vals from device which are much smoother. * Accel error * bump * fix * rename flag and slight cleanup * start ui stuff * long_state -> tuning * Prep for clean up * small changes * less in main * no longer * format * bump * init panel * expose signal for other panels to interact with * split into its own * unused * move around * actually modify CP_SP * fix offroad transition * rename * back * don't update unless we're looking at it * move around * use min length * do this * whoops * move * bump * bump * this is fine * bump --------- Co-authored-by: Jason Wen <haibin.wen3@gmail.com> Co-authored-by: DevTekVE <devtekve@gmail.com> Co-authored-by: royjr <royjr96@gmail.com>
248 lines
7.7 KiB
Python
Executable File
248 lines
7.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import datetime
|
|
import os
|
|
import signal
|
|
import sys
|
|
import traceback
|
|
|
|
from cereal import log
|
|
import cereal.messaging as messaging
|
|
import openpilot.system.sentry as sentry
|
|
from openpilot.common.params import Params, ParamKeyType
|
|
from openpilot.system.hardware import HARDWARE
|
|
from openpilot.system.manager.helpers import unblock_stdout, write_onroad_params, save_bootlog
|
|
from openpilot.system.manager.process import ensure_running
|
|
from openpilot.system.manager.process_config import managed_processes
|
|
from openpilot.system.athena.registration import register, UNREGISTERED_DONGLE_ID
|
|
from openpilot.common.swaglog import cloudlog, add_file_handler
|
|
from openpilot.system.version import get_build_metadata, terms_version, training_version
|
|
from openpilot.system.hardware.hw import Paths
|
|
|
|
|
|
def manager_init() -> None:
|
|
save_bootlog()
|
|
|
|
build_metadata = get_build_metadata()
|
|
|
|
params = Params()
|
|
params.clear_all(ParamKeyType.CLEAR_ON_MANAGER_START)
|
|
params.clear_all(ParamKeyType.CLEAR_ON_ONROAD_TRANSITION)
|
|
params.clear_all(ParamKeyType.CLEAR_ON_OFFROAD_TRANSITION)
|
|
if build_metadata.release_channel:
|
|
params.clear_all(ParamKeyType.DEVELOPMENT_ONLY)
|
|
|
|
default_params: list[tuple[str, str | bytes]] = [
|
|
("CompletedTrainingVersion", "0"),
|
|
("DisengageOnAccelerator", "0"),
|
|
("GsmMetered", "1"),
|
|
("HasAcceptedTerms", "0"),
|
|
("LanguageSetting", "main_en"),
|
|
("OpenpilotEnabledToggle", "1"),
|
|
("LongitudinalPersonality", str(log.LongitudinalPersonality.standard)),
|
|
]
|
|
|
|
sunnypilot_default_params: list[tuple[str, str | bytes]] = [
|
|
("AutoLaneChangeTimer", "0"),
|
|
("AutoLaneChangeBsmDelay", "0"),
|
|
("DynamicExperimentalControl", "0"),
|
|
("HyundaiLongitudinalTuning", "0"),
|
|
("Mads", "1"),
|
|
("MadsMainCruiseAllowed", "1"),
|
|
("MadsPauseLateralOnBrake", "0"),
|
|
("MadsUnifiedEngagementMode", "1"),
|
|
("MaxTimeOffroad", "1800"),
|
|
("ModelManager_LastSyncTime", "0"),
|
|
("ModelManager_ModelsCache", ""),
|
|
("NeuralNetworkLateralControl", "0"),
|
|
("QuietMode", "0"),
|
|
]
|
|
|
|
if params.get_bool("RecordFrontLock"):
|
|
params.put_bool("RecordFront", True)
|
|
|
|
# set unset params
|
|
for k, v in (default_params + sunnypilot_default_params):
|
|
if params.get(k) is None:
|
|
params.put(k, v)
|
|
|
|
# Create folders needed for msgq
|
|
try:
|
|
os.mkdir(Paths.shm_path())
|
|
except FileExistsError:
|
|
pass
|
|
except PermissionError:
|
|
print(f"WARNING: failed to make {Paths.shm_path()}")
|
|
|
|
# set params
|
|
serial = HARDWARE.get_serial()
|
|
params.put("Version", build_metadata.openpilot.version)
|
|
params.put("TermsVersion", terms_version)
|
|
params.put("TrainingVersion", training_version)
|
|
params.put("GitCommit", build_metadata.openpilot.git_commit)
|
|
params.put("GitCommitDate", build_metadata.openpilot.git_commit_date)
|
|
params.put("GitBranch", build_metadata.channel)
|
|
params.put("GitRemote", build_metadata.openpilot.git_origin)
|
|
params.put_bool("IsTestedBranch", build_metadata.tested_channel)
|
|
params.put_bool("IsReleaseBranch", build_metadata.release_channel)
|
|
params.put("HardwareSerial", serial)
|
|
|
|
# set dongle id
|
|
reg_res = register(show_spinner=True)
|
|
if reg_res:
|
|
dongle_id = reg_res
|
|
else:
|
|
raise Exception(f"Registration failed for device {serial}")
|
|
os.environ['DONGLE_ID'] = dongle_id # Needed for swaglog
|
|
os.environ['GIT_ORIGIN'] = build_metadata.openpilot.git_normalized_origin # Needed for swaglog
|
|
os.environ['GIT_BRANCH'] = build_metadata.channel # Needed for swaglog
|
|
os.environ['GIT_COMMIT'] = build_metadata.openpilot.git_commit # Needed for swaglog
|
|
|
|
if not build_metadata.openpilot.is_dirty:
|
|
os.environ['CLEAN'] = '1'
|
|
|
|
# init logging
|
|
sentry.init(sentry.SentryProject.SELFDRIVE)
|
|
cloudlog.bind_global(dongle_id=dongle_id,
|
|
version=build_metadata.openpilot.version,
|
|
origin=build_metadata.openpilot.git_normalized_origin,
|
|
branch=build_metadata.channel,
|
|
commit=build_metadata.openpilot.git_commit,
|
|
dirty=build_metadata.openpilot.is_dirty,
|
|
device=HARDWARE.get_device_type())
|
|
|
|
# preimport all processes
|
|
for p in managed_processes.values():
|
|
p.prepare()
|
|
|
|
|
|
def manager_cleanup() -> None:
|
|
# send signals to kill all procs
|
|
for p in managed_processes.values():
|
|
p.stop(block=False)
|
|
|
|
# ensure all are killed
|
|
for p in managed_processes.values():
|
|
p.stop(block=True)
|
|
|
|
cloudlog.info("everything is dead")
|
|
|
|
|
|
def manager_thread() -> None:
|
|
cloudlog.bind(daemon="manager")
|
|
cloudlog.info("manager start")
|
|
cloudlog.info({"environ": os.environ})
|
|
|
|
params = Params()
|
|
|
|
ignore: list[str] = []
|
|
if params.get("DongleId", encoding='utf8') in (None, UNREGISTERED_DONGLE_ID):
|
|
ignore += ["manage_athenad", "uploader"]
|
|
if os.getenv("NOBOARD") is not None:
|
|
ignore.append("pandad")
|
|
ignore += [x for x in os.getenv("BLOCK", "").split(",") if len(x) > 0]
|
|
|
|
sm = messaging.SubMaster(['deviceState', 'carParams'], poll='deviceState')
|
|
pm = messaging.PubMaster(['managerState'])
|
|
|
|
write_onroad_params(False, params)
|
|
ensure_running(managed_processes.values(), False, params=params, CP=sm['carParams'], not_run=ignore)
|
|
|
|
started_prev = False
|
|
|
|
while True:
|
|
sm.update(1000)
|
|
|
|
started = sm['deviceState'].started
|
|
|
|
if started and not started_prev:
|
|
params.clear_all(ParamKeyType.CLEAR_ON_ONROAD_TRANSITION)
|
|
elif not started and started_prev:
|
|
params.clear_all(ParamKeyType.CLEAR_ON_OFFROAD_TRANSITION)
|
|
|
|
# update onroad params, which drives pandad's safety setter thread
|
|
if started != started_prev:
|
|
write_onroad_params(started, params)
|
|
|
|
started_prev = started
|
|
|
|
ensure_running(managed_processes.values(), started, params=params, CP=sm['carParams'], not_run=ignore)
|
|
|
|
running = ' '.join("{}{}\u001b[0m".format("\u001b[32m" if p.proc.is_alive() else "\u001b[31m", p.name)
|
|
for p in managed_processes.values() if p.proc)
|
|
print(running)
|
|
cloudlog.debug(running)
|
|
|
|
# send managerState
|
|
msg = messaging.new_message('managerState', valid=True)
|
|
msg.managerState.processes = [p.get_process_state_msg() for p in managed_processes.values()]
|
|
pm.send('managerState', msg)
|
|
|
|
# Exit main loop when uninstall/shutdown/reboot is needed
|
|
shutdown = False
|
|
for param in ("DoUninstall", "DoShutdown", "DoReboot"):
|
|
if params.get_bool(param):
|
|
shutdown = True
|
|
params.put("LastManagerExitReason", f"{param} {datetime.datetime.now()}")
|
|
cloudlog.warning(f"Shutting down manager - {param} set")
|
|
|
|
if shutdown:
|
|
break
|
|
|
|
|
|
def main() -> None:
|
|
manager_init()
|
|
if os.getenv("PREPAREONLY") is not None:
|
|
return
|
|
|
|
# SystemExit on sigterm
|
|
signal.signal(signal.SIGTERM, lambda signum, frame: sys.exit(1))
|
|
|
|
try:
|
|
manager_thread()
|
|
except Exception:
|
|
traceback.print_exc()
|
|
sentry.capture_exception()
|
|
finally:
|
|
manager_cleanup()
|
|
|
|
params = Params()
|
|
if params.get_bool("DoUninstall"):
|
|
cloudlog.warning("uninstalling")
|
|
HARDWARE.uninstall()
|
|
elif params.get_bool("DoReboot"):
|
|
cloudlog.warning("reboot")
|
|
HARDWARE.reboot()
|
|
elif params.get_bool("DoShutdown"):
|
|
cloudlog.warning("shutdown")
|
|
HARDWARE.shutdown()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from openpilot.system.ui.text import TextWindow
|
|
|
|
unblock_stdout()
|
|
|
|
try:
|
|
main()
|
|
except KeyboardInterrupt:
|
|
print("got CTRL-C, exiting")
|
|
except Exception:
|
|
add_file_handler(cloudlog)
|
|
cloudlog.exception("Manager failed to start")
|
|
|
|
try:
|
|
managed_processes['ui'].stop()
|
|
except Exception:
|
|
pass
|
|
|
|
# Show last 3 lines of traceback
|
|
error = traceback.format_exc(-3)
|
|
error = "Manager failed to start\n\n" + error
|
|
with TextWindow(error) as t:
|
|
t.wait_for_exit()
|
|
|
|
raise
|
|
|
|
# manual exit because we are forked
|
|
sys.exit(0)
|