Skip to content

Commit 176d5fa

Browse files
committed
activate derivative action
1 parent d18423b commit 176d5fa

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

common/pid.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ def update(self, error, error_rate=0.0, speed=0.0, feedforward=0., freeze_integr
5151
self.d = error_rate * self.k_d
5252

5353
if not freeze_integrator:
54-
if error_expected is not None:
55-
error = error_expected
54+
#if error_expected is not None:
55+
# error = error_expected
5656
i = self.i + error * self.k_i * self.i_rate
5757

5858
# Don't allow windup if already clipping

selfdrive/controls/lib/latcontrol_torque.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from opendbc.car.lateral import FRICTION_THRESHOLD, get_friction
77
from openpilot.common.constants import ACCELERATION_DUE_TO_GRAVITY
88
from openpilot.selfdrive.controls.lib.latcontrol import DT_CTRL, LatControl
9+
from openpilot.common.filter_simple import FirstOrderFilter
910
from openpilot.common.pid import PIDController
1011

1112
# At higher speeds (25+mph) we can assume:
@@ -36,6 +37,7 @@ def __init__(self, CP, CI):
3637
self.update_limits()
3738
self.steering_angle_deadzone_deg = self.torque_params.steeringAngleDeadzoneDeg
3839
self.requested_lateral_accel_buffer = deque([0.] * LATACCEL_REQUEST_BUFFER_SIZE, maxlen=LATACCEL_REQUEST_BUFFER_SIZE)
40+
self.error_pre = 0.0
3941

4042
def update_live_torque_params(self, latAccelFactor, latAccelOffset, friction):
4143
self.torque_params.latAccelFactor = latAccelFactor
@@ -68,11 +70,13 @@ def update(self, active, CS, VM, params, steer_limited_by_safety, desired_curvat
6870
low_speed_factor = np.interp(CS.vEgo, LOW_SPEED_X, LOW_SPEED_Y)**2
6971
# pid error calculated as difference between expected and measured lateral acceleration
7072
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
7274
measurement = actual_lateral_accel + low_speed_factor * actual_curvature
7375
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
7680
# do error correction in lateral acceleration space, convert at end to handle non-linear torque responses correctly
7781
pid_log.error = float(setpoint - measurement)
7882
ff = gravity_adjusted_lateral_accel
@@ -82,10 +86,11 @@ def update(self, active, CS, VM, params, steer_limited_by_safety, desired_curvat
8286

8387
freeze_integrator = steer_limited_by_safety or CS.steeringPressed or CS.vEgo < 5
8488
output_lataccel = self.pid.update(pid_log.error,
89+
error_rate,
8590
feedforward=ff,
8691
speed=CS.vEgo,
87-
freeze_integrator=freeze_integrator,
88-
error_expected=error_expected)
92+
freeze_integrator=freeze_integrator,)
93+
#error_expected=error_expected)
8994
output_torque = self.torque_from_lateral_accel(output_lataccel, self.torque_params)
9095

9196
pid_log.active = True

0 commit comments

Comments
 (0)