This commit is contained in:
Jason Wen
2024-08-06 23:42:31 -04:00
parent fa4ae1367f
commit bacb49d8ee
5 changed files with 19 additions and 16 deletions
+1
View File
@@ -40,6 +40,7 @@ struct ControlsStateSP @0x81c2f05a394cf4af {
personality @8 :LongitudinalPersonalitySP;
dynamicPersonality @9 :Bool;
accelPersonality @10 :AccelerationPersonality;
overtakingAccelerationAssist @11 :Bool;
lateralControlState :union {
indiState @1 :LateralINDIState;
+15 -2
View File
@@ -185,6 +185,7 @@ class Controls:
self.custom_model_metadata.capabilities & ModelCapabilities.LateralPlannerSolution
self.dynamic_personality = self.params.get_bool("DynamicPersonality")
self.overtaking_accel = self.params.get_bool("OvertakingAccelerationAssist")
self.accel_personality = self.read_accel_personality_param()
@@ -811,11 +812,21 @@ class Controls:
# Curvature & Steering angle
lp = self.sm['liveParameters']
lp_mono_time_svs = 'lateralPlanDEPRECATED' if self.model_use_lateral_planner else 'modelV2'
dh = 'lateralPlanDEPRECATED' if self.model_use_lateral_planner else 'modelV2'
steer_angle_without_offset = math.radians(CS.steeringAngleDeg - lp.angleOffsetDeg)
curvature = -self.VM.calc_curvature(steer_angle_without_offset, CS.vEgo, lp.roll)
lc_svs = self.sm[dh]
long_plan = self.sm['longitudinalPlan'].hasLead
dm_state = self.sm['driverMonitoringState']
overtaking_accel_allowed = ((lc_svs.laneChangeDirection == LaneChangeDirection.right and dm_state.isRHD) or
(lc_svs.laneChangeDirection == LaneChangeDirection.left and not dm_state.isRHD)) and \
(lc_svs.laneChangeState in (LaneChangeState.preLaneChange, LaneChangeState.laneChangeStarting))
overtaking_accel_engaged = self.overtaking_accel and overtaking_accel_allowed and \
CS.vEgo > (60 * CV.KPH_TO_MS) if self.is_metric else (40 * CV.MPH_TO_MS) and long_plan.hasLead and \
long_plan.aTarget > -0.2 and not (CS.leftBlinker and CS.rightBlinker)
# controlsState
dat = messaging.new_message('controlsState')
dat.valid = CS.canValid
@@ -830,7 +841,7 @@ class Controls:
controlsState.alertSound = current_alert.audible_alert
controlsState.longitudinalPlanMonoTime = self.sm.logMonoTime['longitudinalPlan']
controlsState.lateralPlanMonoTime = self.sm.logMonoTime[lp_mono_time_svs]
controlsState.lateralPlanMonoTime = self.sm.logMonoTime[dh]
controlsState.enabled = not (CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill)) and (self.enabled or CS.cruiseState.enabled) and CS.gearShifter not in [GearShifter.park, GearShifter.reverse]
controlsState.active = not (CS.brakePressed and (not self.CS_prev.brakePressed or not CS.standstill)) and (self.active or CS.cruiseState.enabled)
controlsState.curvature = curvature
@@ -868,6 +879,7 @@ class Controls:
controlsStateSP.personality = self.personality
controlsStateSP.dynamicPersonality = self.dynamic_personality
controlsStateSP.accelPersonality = self.accel_personality
controlsStateSP.overtakingAccelerationAssist = overtaking_accel_engaged
if self.enable_nnff and lat_tuning == 'torque':
controlsStateSP.lateralControlState.torqueState = self.LaC.pid_long_sp
@@ -934,6 +946,7 @@ class Controls:
self.reverse_acc_change = self.params.get_bool("ReverseAccChange")
self.dynamic_experimental_control = self.params.get_bool("DynamicExperimentalControl")
self.overtaking_accel = self.params.get_bool("OvertakingAccelerationAssist")
if self.sm.frame % int(2.5 / DT_CTRL) == 0:
self.live_torque = self.params.get_bool("LiveTorque")
@@ -67,7 +67,7 @@ def get_jerk_factor(personality=custom.LongitudinalPersonalitySP.standard):
elif personality==custom.LongitudinalPersonalitySP.aggressive:
return 0.6
elif personality==custom.LongitudinalPersonalitySP.overtake:
return 0.25
return 0.1
else:
raise NotImplementedError("Longitudinal personality not supported")
+1 -13
View File
@@ -36,8 +36,6 @@ _A_TOTAL_MAX_BP = [20., 40.]
EventName = car.CarEvent.EventName
LaneChangeState = log.LaneChangeState
LaneChangeDirection = log.LaneChangeDirection
def get_max_accel(v_ego):
@@ -104,8 +102,6 @@ class LongitudinalPlanner:
self.dynamic_experimental_controller = DynamicExperimentalController()
self.accel_controller = AccelController()
self.overtaking_accel = self.params.get_bool("OvertakingAccelerationAssist")
def read_param(self):
try:
self.dynamic_experimental_controller.set_enabled(self.params.get_bool("DynamicExperimentalControl"))
@@ -113,8 +109,6 @@ class LongitudinalPlanner:
self.dynamic_experimental_controller = DynamicExperimentalController()
self.accel_controller = AccelController()
self.overtaking_accel = self.params.get_bool("OvertakingAccelerationAssist")
@staticmethod
def parse_model(model_msg, model_error):
if (len(model_msg.position.x) == ModelConstants.IDX_N and
@@ -174,13 +168,6 @@ class LongitudinalPlanner:
accel_limits = [ACCEL_MIN, ACCEL_MAX]
accel_limits_turns = [ACCEL_MIN, ACCEL_MAX]
lat_plan = sm['lateralPlanDEPRECATED']
dm_state = sm['driverMonitoringState']
overtaking_accel_allowed = ((lat_plan.laneChangeDirection == LaneChangeDirection.right and dm_state.isRHD) or
(lat_plan.laneChangeDirection == LaneChangeDirection.left and not dm_state.isRHD)) and \
(lat_plan.laneChangeState in (LaneChangeState.preLaneChange, LaneChangeState.laneChangeStarting))
overtaking_accel_engaged = self.overtaking_accel and overtaking_accel_allowed and v_ego > 40 * CV.MPH_TO_MS
if reset_state:
self.v_desired_filter.x = v_ego
# Clip aEgo to cruise limits to prevent large accelerations when becoming active
@@ -203,6 +190,7 @@ class LongitudinalPlanner:
accel_limits_turns[0] = min(accel_limits_turns[0], self.a_desired + 0.05)
accel_limits_turns[1] = max(accel_limits_turns[1], self.a_desired - 0.05)
overtaking_accel_engaged = sm['controlsStateSP'].overtakingAccelerationAssist
self.mpc.set_weights(prev_accel_constraint, personality=custom.LongitudinalPersonalitySP.overtake if overtaking_accel_engaged else sm['controlsStateSP'].personality)
self.mpc.set_accel_limits(accel_limits_turns[0], accel_limits_turns[1])
self.mpc.set_cur_state(self.v_desired_filter.x, self.a_desired)
@@ -372,6 +372,7 @@ SunnypilotPanel::SunnypilotPanel(QWidget *parent) : QFrame(parent) {
toggles["EnableMads"]->setConfirmation(true, false);
toggles["EndToEndLongAlertLight"]->setConfirmation(true, false);
toggles["CustomOffsets"]->showDescription();
toggles["OvertakingAccelerationAssist"]->setConfirmation(true, false);
connect(toggles["EnableMads"], &ToggleControlSP::toggleFlipped, mads_settings, &MadsSettings::updateToggles);
connect(toggles["EnableMads"], &ToggleControlSP::toggleFlipped, [=](bool state) {