Skip to content

Commit 5ef248d

Browse files
sshaneRoss Fisher
authored and
Ross Fisher
committed
interpolate for lower rate lateral plan
interpolate for lower rate lateral plan fix should be correct now same convention as longcontrol.py
1 parent 21951e4 commit 5ef248d

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

selfdrive/controls/controlsd.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -497,10 +497,12 @@ def state_control(self, CS):
497497

498498
# Steering PID loop and lateral MPC
499499
lat_active = self.active and not CS.steerWarning and not CS.steerError and CS.vEgo > self.CP.minSteerSpeed
500+
t_since_plan = (self.sm.frame - self.sm.rcv_frame['lateralPlan']) * DT_CTRL
500501
desired_curvature, desired_curvature_rate = get_lag_adjusted_curvature(self.CP, CS.vEgo,
501502
lat_plan.psis,
502503
lat_plan.curvatures,
503-
lat_plan.curvatureRates)
504+
lat_plan.curvatureRates,
505+
t_since_plan)
504506
actuators.steer, actuators.steeringAngleDeg, lac_log = self.LaC.update(lat_active, CS, self.CP, self.VM, params, self.last_actuators,
505507
desired_curvature, desired_curvature_rate)
506508
else:

selfdrive/controls/lib/drive_helpers.py

+13-13
Original file line numberDiff line numberDiff line change
@@ -96,17 +96,17 @@ def initialize_v_cruise(v_ego, buttonEvents, v_cruise_last):
9696
return int(round(clip(v_ego * CV.MS_TO_KPH, V_CRUISE_ENABLE_MIN, V_CRUISE_MAX)))
9797

9898

99-
def get_lag_adjusted_curvature(CP, v_ego, psis, curvatures, curvature_rates):
100-
if len(psis) != CONTROL_N:
101-
psis = [0.0 for i in range(CONTROL_N)]
102-
curvatures = [0.0 for i in range(CONTROL_N)]
103-
curvature_rates = [0.0 for i in range(CONTROL_N)]
104-
99+
def get_lag_adjusted_curvature(CP, v_ego, psis, curvatures, curvature_rates, t_since_plan):
105100
# TODO this needs more thought, use .2s extra for now to estimate other delays
106101
delay = CP.steerActuatorDelay + .2
107-
current_curvature = curvatures[0]
108-
psi = interp(delay, T_IDXS[:CONTROL_N], psis)
109-
desired_curvature_rate = curvature_rates[0]
102+
if len(psis) == CONTROL_N:
103+
psi = interp(delay + t_since_plan, T_IDXS[:CONTROL_N], psis)
104+
current_curvature = interp(t_since_plan, T_IDXS[:CONTROL_N], curvatures)
105+
desired_curvature_rate = interp(t_since_plan, T_IDXS[:CONTROL_N], curvature_rates)
106+
else:
107+
psi = 0.0
108+
current_curvature = 0.0
109+
desired_curvature_rate = 0.0
110110

111111
# MPC can plan to turn the wheel and turn back before t_delay. This means
112112
# in high delay cases some corrections never even get commanded. So just use
@@ -116,9 +116,9 @@ def get_lag_adjusted_curvature(CP, v_ego, psis, curvatures, curvature_rates):
116116

117117
max_curvature_rate = interp(v_ego, MAX_CURVATURE_RATE_SPEEDS, MAX_CURVATURE_RATES)
118118
safe_desired_curvature_rate = clip(desired_curvature_rate,
119-
-max_curvature_rate,
120-
max_curvature_rate)
119+
-max_curvature_rate,
120+
max_curvature_rate)
121121
safe_desired_curvature = clip(desired_curvature,
122-
current_curvature - max_curvature_rate * DT_MDL,
123-
current_curvature + max_curvature_rate * DT_MDL)
122+
current_curvature - max_curvature_rate * DT_MDL,
123+
current_curvature + max_curvature_rate * DT_MDL)
124124
return safe_desired_curvature, safe_desired_curvature_rate

0 commit comments

Comments
 (0)