6
6
from opendbc .car .lateral import FRICTION_THRESHOLD , get_friction
7
7
from openpilot .common .constants import ACCELERATION_DUE_TO_GRAVITY
8
8
from openpilot .selfdrive .controls .lib .latcontrol import DT_CTRL , LatControl
9
+ from openpilot .common .filter_simple import FirstOrderFilter
9
10
from openpilot .common .pid import PIDController
10
11
11
12
# At higher speeds (25+mph) we can assume:
@@ -36,6 +37,7 @@ def __init__(self, CP, CI):
36
37
self .update_limits ()
37
38
self .steering_angle_deadzone_deg = self .torque_params .steeringAngleDeadzoneDeg
38
39
self .requested_lateral_accel_buffer = deque ([0. ] * LATACCEL_REQUEST_BUFFER_SIZE , maxlen = LATACCEL_REQUEST_BUFFER_SIZE )
40
+ self .error_pre = 0.0
39
41
40
42
def update_live_torque_params (self , latAccelFactor , latAccelOffset , friction ):
41
43
self .torque_params .latAccelFactor = latAccelFactor
@@ -68,11 +70,13 @@ def update(self, active, CS, VM, params, steer_limited_by_safety, desired_curvat
68
70
low_speed_factor = np .interp (CS .vEgo , LOW_SPEED_X , LOW_SPEED_Y )** 2
69
71
# pid error calculated as difference between expected and measured lateral acceleration
70
72
setpoint = lag_compensated_desired_lateral_accel + low_speed_factor * desired_curvature
71
- setpoint_expected = current_expected_lateral_accel + low_speed_factor * current_expected_curvature
73
+ # setpoint_expected = current_expected_lateral_accel + low_speed_factor * current_expected_curvature
72
74
measurement = actual_lateral_accel + low_speed_factor * actual_curvature
73
75
gravity_adjusted_lateral_accel = lag_compensated_desired_lateral_accel - roll_compensation
74
- error_expected = float (setpoint_expected - measurement )
75
-
76
+ #error_expected = float(setpoint_expected - measurement)
77
+ error = float (setpoint - measurement )
78
+ error_rate = (error - self .error_pre ) / DT_CTRL
79
+ self .error_pre = error
76
80
# do error correction in lateral acceleration space, convert at end to handle non-linear torque responses correctly
77
81
pid_log .error = float (setpoint - measurement )
78
82
ff = gravity_adjusted_lateral_accel
@@ -82,10 +86,11 @@ def update(self, active, CS, VM, params, steer_limited_by_safety, desired_curvat
82
86
83
87
freeze_integrator = steer_limited_by_safety or CS .steeringPressed or CS .vEgo < 5
84
88
output_lataccel = self .pid .update (pid_log .error ,
89
+ error_rate ,
85
90
feedforward = ff ,
86
91
speed = CS .vEgo ,
87
- freeze_integrator = freeze_integrator ,
88
- error_expected = error_expected )
92
+ freeze_integrator = freeze_integrator ,)
93
+ # error_expected=error_expected)
89
94
output_torque = self .torque_from_lateral_accel (output_lataccel , self .torque_params )
90
95
91
96
pid_log .active = True
0 commit comments