|
|
|
@ -21,7 +21,7 @@ from openpilot.common.swaglog import cloudlog |
|
|
|
|
from openpilot.selfdrive.car.car_helpers import get_startup_event |
|
|
|
|
from openpilot.selfdrive.car.card import CarD |
|
|
|
|
from openpilot.selfdrive.controls.lib.alertmanager import AlertManager, set_offroad_alert |
|
|
|
|
from openpilot.selfdrive.controls.lib.drive_helpers import VCruiseHelper, clip_curvature |
|
|
|
|
from openpilot.selfdrive.controls.lib.drive_helpers import clip_curvature |
|
|
|
|
from openpilot.selfdrive.controls.lib.events import Events, ET |
|
|
|
|
from openpilot.selfdrive.controls.lib.latcontrol import LatControl, MIN_LATERAL_CONTROL_SPEED |
|
|
|
|
from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID |
|
|
|
@ -143,7 +143,6 @@ class Controls: |
|
|
|
|
self.desired_curvature = 0.0 |
|
|
|
|
self.experimental_mode = False |
|
|
|
|
self.personality = self.read_personality_param() |
|
|
|
|
self.v_cruise_helper = VCruiseHelper(self.CP) |
|
|
|
|
self.recalibrating_seen = False |
|
|
|
|
|
|
|
|
|
self.can_log_mono_time = 0 |
|
|
|
@ -169,7 +168,7 @@ class Controls: |
|
|
|
|
controls_state = self.params.get("ReplayControlsState") |
|
|
|
|
if controls_state is not None: |
|
|
|
|
with log.ControlsState.from_bytes(controls_state) as controls_state: |
|
|
|
|
self.v_cruise_helper.v_cruise_kph = controls_state.vCruise |
|
|
|
|
self.card.v_cruise_helper.v_cruise_kph = controls_state.vCruise |
|
|
|
|
|
|
|
|
|
if any(ps.controlsAllowed for ps in self.sm['pandaStates']): |
|
|
|
|
self.state = State.enabled |
|
|
|
@ -198,11 +197,6 @@ class Controls: |
|
|
|
|
if self.CP.passive: |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
# Block resume if cruise never previously enabled |
|
|
|
|
resume_pressed = any(be.type in (ButtonType.accelCruise, ButtonType.resumeCruise) for be in CS.buttonEvents) |
|
|
|
|
if not self.CP.pcmCruise and not self.v_cruise_helper.v_cruise_initialized and resume_pressed: |
|
|
|
|
self.events.add(EventName.resumeBlocked) |
|
|
|
|
|
|
|
|
|
if not self.CP.notCar: |
|
|
|
|
self.events.add_from_msg(self.sm['driverMonitoringState'].events) |
|
|
|
|
|
|
|
|
@ -431,7 +425,7 @@ class Controls: |
|
|
|
|
def state_transition(self, CS): |
|
|
|
|
"""Compute conditional state transitions and execute actions on state transitions""" |
|
|
|
|
|
|
|
|
|
self.v_cruise_helper.update_v_cruise(CS, self.enabled, self.is_metric) |
|
|
|
|
self.card.v_cruise_helper.update_v_cruise(CS, self.enabled, self.is_metric) |
|
|
|
|
|
|
|
|
|
# decrement the soft disable timer at every step, as it's reset on |
|
|
|
|
# entrance in SOFT_DISABLING state |
|
|
|
@ -506,7 +500,7 @@ class Controls: |
|
|
|
|
else: |
|
|
|
|
self.state = State.enabled |
|
|
|
|
self.current_alert_types.append(ET.ENABLE) |
|
|
|
|
self.v_cruise_helper.initialize_v_cruise(CS, self.experimental_mode) |
|
|
|
|
self.card.v_cruise_helper.initialize_v_cruise(CS, self.experimental_mode) |
|
|
|
|
|
|
|
|
|
# Check if openpilot is engaged and actuators are enabled |
|
|
|
|
self.enabled = self.state in ENABLED_STATES |
|
|
|
@ -562,7 +556,7 @@ class Controls: |
|
|
|
|
|
|
|
|
|
if not self.joystick_mode: |
|
|
|
|
# accel PID loop |
|
|
|
|
pid_accel_limits = self.CI.get_pid_accel_limits(self.CP, CS.vEgo, self.v_cruise_helper.v_cruise_kph * CV.KPH_TO_MS) |
|
|
|
|
pid_accel_limits = self.CI.get_pid_accel_limits(self.CP, CS.vEgo, self.card.v_cruise_helper.v_cruise_kph * CV.KPH_TO_MS) |
|
|
|
|
t_since_plan = (self.sm.frame - self.sm.recv_frame['longitudinalPlan']) * DT_CTRL |
|
|
|
|
actuators.accel = self.LoC.update(CC.longActive, CS, long_plan, pid_accel_limits, t_since_plan) |
|
|
|
|
|
|
|
|
@ -665,7 +659,7 @@ class Controls: |
|
|
|
|
CC.cruiseControl.resume = self.enabled and CS.cruiseState.standstill and speeds[-1] > 0.1 |
|
|
|
|
|
|
|
|
|
hudControl = CC.hudControl |
|
|
|
|
hudControl.setSpeed = float(self.v_cruise_helper.v_cruise_cluster_kph * CV.KPH_TO_MS) |
|
|
|
|
hudControl.setSpeed = float(self.card.v_cruise_helper.v_cruise_cluster_kph * CV.KPH_TO_MS) |
|
|
|
|
hudControl.speedVisible = self.enabled |
|
|
|
|
hudControl.lanesVisible = self.enabled |
|
|
|
|
hudControl.leadVisible = self.sm['longitudinalPlan'].hasLead |
|
|
|
@ -749,8 +743,8 @@ class Controls: |
|
|
|
|
controlsState.engageable = not self.events.contains(ET.NO_ENTRY) |
|
|
|
|
controlsState.longControlState = self.LoC.long_control_state |
|
|
|
|
controlsState.vPid = float(self.LoC.v_pid) |
|
|
|
|
controlsState.vCruise = float(self.v_cruise_helper.v_cruise_kph) |
|
|
|
|
controlsState.vCruiseCluster = float(self.v_cruise_helper.v_cruise_cluster_kph) |
|
|
|
|
controlsState.vCruise = float(self.card.v_cruise_helper.v_cruise_kph) |
|
|
|
|
controlsState.vCruiseCluster = float(self.card.v_cruise_helper.v_cruise_cluster_kph) |
|
|
|
|
controlsState.upAccelCmd = float(self.LoC.pid.p) |
|
|
|
|
controlsState.uiAccelCmd = float(self.LoC.pid.i) |
|
|
|
|
controlsState.ufAccelCmd = float(self.LoC.pid.f) |
|
|
|
|