Skip to content

Commit db9cdf6

Browse files
committed
Revert "Follow plan sooner after engaging (#545)"
This reverts commit d86d8ea.
1 parent 15262de commit db9cdf6

File tree

4 files changed

+27
-19
lines changed

4 files changed

+27
-19
lines changed

SA_RELEASES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
Stock Additions 0.8.13
22
===
3+
## - 2022-01-03
4+
* Revert "follow longitudinal plan earlier" change as it had some minor bugs. Re-do in progress
35
## - 2022-01-01
46
* Improve lateral performance by interpolating lateral plan to 100hz (from 20hz)
57
## - 2021-12-31, 5:00pm MST Notes

selfdrive/controls/lib/longitudinal_mpc_lib/long_mpc.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,9 +323,10 @@ def set_desired_TR(self, desired_TR):
323323
self.desired_TR = desired_TR
324324
self.set_weights()
325325

326-
def update(self, carstate, radarstate, v_cruise):
326+
def update(self, carstate, radarstate, v_cruise, prev_accel_constraint=False):
327327
self.v_ego = carstate.vEgo
328328
v_ego = self.x0[1]
329+
a_ego = self.x0[2]
329330
self.status = radarstate.leadOne.status or radarstate.leadTwo.status
330331

331332
lead_xv_0 = self.process_lead(radarstate.leadOne, 0)
@@ -356,7 +357,10 @@ def update(self, carstate, radarstate, v_cruise):
356357
x_obstacles = np.column_stack([lead_0_obstacle, lead_1_obstacle, cruise_obstacle])
357358
self.source = SOURCES[np.argmin(x_obstacles[0])]
358359
self.params[:,2] = np.min(x_obstacles, axis=1)
359-
self.params[:,3] = np.copy(self.prev_a)
360+
if prev_accel_constraint:
361+
self.params[:,3] = np.copy(self.prev_a)
362+
else:
363+
self.params[:,3] = a_ego
360364
self.params[:, 4] = self.desired_TR
361365

362366
self.run()

selfdrive/controls/lib/longitudinal_planner.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from common.numpy_fast import interp
55

66
import cereal.messaging as messaging
7-
from common.filter_simple import FirstOrderFilter
87
from common.realtime import DT_MDL
98
from selfdrive.modeld.constants import T_IDXS
109
from selfdrive.config import Conversions as CV
@@ -49,8 +48,9 @@ def __init__(self, CP, init_v=0.0, init_a=0.0):
4948

5049
self.fcw = False
5150

52-
self.v_desired = FirstOrderFilter(init_v, 2.0, DT_MDL)
53-
self.a_desired = FirstOrderFilter(init_a, 0.5, DT_MDL)
51+
self.v_desired = init_v
52+
self.a_desired = init_a
53+
self.alpha = np.exp(-DT_MDL / 2.0)
5454

5555
self.v_desired_trajectory = np.zeros(CONTROL_N)
5656
self.a_desired_trajectory = np.zeros(CONTROL_N)
@@ -67,14 +67,16 @@ def update(self, sm):
6767
long_control_state = sm['controlsState'].longControlState
6868
force_slow_decel = sm['controlsState'].forceDecel
6969

70+
prev_accel_constraint = True
7071
if long_control_state == LongCtrlState.off or sm['carState'].gasPressed:
71-
self.v_desired.x = v_ego
72-
# Smooth in current a_ego so we always have an accurate plan
73-
self.a_desired.update(a_ego)
72+
self.v_desired = v_ego
73+
self.a_desired = a_ego
74+
# Smoothly changing between accel trajectory is only relevant when OP is driving
75+
prev_accel_constraint = False
7476

7577
# Prevent divergence, smooth in current v_ego
76-
self.v_desired.update(v_ego)
77-
self.v_desired.x = max(0.0, self.v_desired.x)
78+
self.v_desired = self.alpha * self.v_desired + (1 - self.alpha) * v_ego
79+
self.v_desired = max(0.0, self.v_desired)
7880

7981
accel_limits = [A_CRUISE_MIN, get_max_accel(v_ego)]
8082
accel_limits_turns = limit_accel_in_turns(v_ego, sm['carState'].steeringAngleDeg, accel_limits, self.CP)
@@ -83,11 +85,11 @@ def update(self, sm):
8385
accel_limits_turns[1] = min(accel_limits_turns[1], AWARENESS_DECEL)
8486
accel_limits_turns[0] = min(accel_limits_turns[0], accel_limits_turns[1])
8587
# clip limits, cannot init MPC outside of bounds
86-
accel_limits_turns[0] = min(accel_limits_turns[0], self.a_desired.x + 0.05)
87-
accel_limits_turns[1] = max(accel_limits_turns[1], self.a_desired.x - 0.05)
88+
accel_limits_turns[0] = min(accel_limits_turns[0], self.a_desired + 0.05)
89+
accel_limits_turns[1] = max(accel_limits_turns[1], self.a_desired - 0.05)
8890
self.mpc.set_accel_limits(accel_limits_turns[0], accel_limits_turns[1])
89-
self.mpc.set_cur_state(self.v_desired.x, self.a_desired.x)
90-
self.mpc.update(sm['carState'], sm['radarState'], v_cruise)
91+
self.mpc.set_cur_state(self.v_desired, self.a_desired)
92+
self.mpc.update(sm['carState'], sm['radarState'], v_cruise, prev_accel_constraint=prev_accel_constraint)
9193
self.v_desired_trajectory = np.interp(T_IDXS[:CONTROL_N], T_IDXS_MPC, self.mpc.v_solution)
9294
self.a_desired_trajectory = np.interp(T_IDXS[:CONTROL_N], T_IDXS_MPC, self.mpc.a_solution)
9395
self.j_desired_trajectory = np.interp(T_IDXS[:CONTROL_N], T_IDXS_MPC[:-1], self.mpc.j_solution)
@@ -98,9 +100,9 @@ def update(self, sm):
98100
cloudlog.info("FCW triggered")
99101

100102
# Interpolate 0.05 seconds and save as starting point for next iteration
101-
a_prev = self.a_desired.x
102-
self.a_desired.x = float(interp(DT_MDL, T_IDXS[:CONTROL_N], self.a_desired_trajectory))
103-
self.v_desired.x = self.v_desired.x + DT_MDL * (self.a_desired.x + a_prev) / 2.0
103+
a_prev = self.a_desired
104+
self.a_desired = float(interp(DT_MDL, T_IDXS[:CONTROL_N], self.a_desired_trajectory))
105+
self.v_desired = self.v_desired + DT_MDL * (self.a_desired + a_prev) / 2.0
104106

105107
def publish(self, sm, pm):
106108
plan_send = messaging.new_message('longitudinalPlan')

selfdrive/test/longitudinal_maneuvers/plant.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ def step(self, v_lead=0.0, prob=1.0, v_cruise=50.):
9797
'carState': car_state.carState,
9898
'controlsState': control.controlsState}
9999
self.planner.update(sm)
100-
self.speed = self.planner.v_desired.x
101-
self.acceleration = self.planner.a_desired.x
100+
self.speed = self.planner.v_desired
101+
self.acceleration = self.planner.a_desired
102102
fcw = self.planner.fcw
103103
self.distance_lead = self.distance_lead + v_lead * self.ts
104104

0 commit comments

Comments
 (0)