mirror of
https://github.com/infiniteCable2/openpilot.git
synced 2026-08-05 16:26:10 +08:00
Revert "latcontrol_torque: lower kp and lower friction threshold (commaai/openpilot#36619)" (#1581)
* Revert " latcontrol_torque: delay independent jerk and lower kp and lower friction threshold (#36619)"
This reverts commit f01391a7d9
* revert opendbc_repo
* bump
---------
Co-authored-by: Jason Wen <haibin.wen3@gmail.com>
This commit is contained in:
committed by
GitHub
parent
5999079838
commit
7560497f15
+1
-1
Submodule opendbc_repo updated: 1890dbf299...a76d28a231
@@ -22,17 +22,15 @@ from openpilot.sunnypilot.selfdrive.controls.lib.latcontrol_torque_ext import La
|
|||||||
# Additionally, there is friction in the steering wheel that needs
|
# Additionally, there is friction in the steering wheel that needs
|
||||||
# to be overcome to move it at all, this is compensated for too.
|
# to be overcome to move it at all, this is compensated for too.
|
||||||
|
|
||||||
KP = 0.8
|
KP = 1.0
|
||||||
KI = 0.15
|
KI = 0.3
|
||||||
|
KD = 0.0
|
||||||
INTERP_SPEEDS = [1, 1.5, 2.0, 3.0, 5, 7.5, 10, 15, 30]
|
INTERP_SPEEDS = [1, 1.5, 2.0, 3.0, 5, 7.5, 10, 15, 30]
|
||||||
KP_INTERP = [250, 120, 65, 30, 11.5, 5.5, 3.5, 2.0, KP]
|
KP_INTERP = [250, 120, 65, 30, 11.5, 5.5, 3.5, 2.0, KP]
|
||||||
|
|
||||||
LP_FILTER_CUTOFF_HZ = 1.2
|
LP_FILTER_CUTOFF_HZ = 1.2
|
||||||
JERK_LOOKAHEAD_SECONDS = 0.19
|
|
||||||
JERK_GAIN = 0.3
|
|
||||||
LAT_ACCEL_REQUEST_BUFFER_SECONDS = 1.0
|
LAT_ACCEL_REQUEST_BUFFER_SECONDS = 1.0
|
||||||
VERSION = 1
|
VERSION = 0
|
||||||
|
|
||||||
class LatControlTorque(LatControl):
|
class LatControlTorque(LatControl):
|
||||||
def __init__(self, CP, CP_SP, CI, dt):
|
def __init__(self, CP, CP_SP, CI, dt):
|
||||||
@@ -40,13 +38,13 @@ class LatControlTorque(LatControl):
|
|||||||
self.torque_params = CP.lateralTuning.torque.as_builder()
|
self.torque_params = CP.lateralTuning.torque.as_builder()
|
||||||
self.torque_from_lateral_accel = CI.torque_from_lateral_accel()
|
self.torque_from_lateral_accel = CI.torque_from_lateral_accel()
|
||||||
self.lateral_accel_from_torque = CI.lateral_accel_from_torque()
|
self.lateral_accel_from_torque = CI.lateral_accel_from_torque()
|
||||||
self.pid = PIDController([INTERP_SPEEDS, KP_INTERP], KI, rate=1/self.dt)
|
self.pid = PIDController([INTERP_SPEEDS, KP_INTERP], KI, KD, rate=1/self.dt)
|
||||||
self.update_limits()
|
self.update_limits()
|
||||||
self.steering_angle_deadzone_deg = self.torque_params.steeringAngleDeadzoneDeg
|
self.steering_angle_deadzone_deg = self.torque_params.steeringAngleDeadzoneDeg
|
||||||
self.lat_accel_request_buffer_len = int(LAT_ACCEL_REQUEST_BUFFER_SECONDS / self.dt)
|
self.lat_accel_request_buffer_len = int(LAT_ACCEL_REQUEST_BUFFER_SECONDS / self.dt)
|
||||||
self.lat_accel_request_buffer = deque([0.] * self.lat_accel_request_buffer_len , maxlen=self.lat_accel_request_buffer_len)
|
self.lat_accel_request_buffer = deque([0.] * self.lat_accel_request_buffer_len , maxlen=self.lat_accel_request_buffer_len)
|
||||||
self.lookahead_frames = int(JERK_LOOKAHEAD_SECONDS / self.dt)
|
self.previous_measurement = 0.0
|
||||||
self.jerk_filter = FirstOrderFilter(0.0, 1 / (2 * np.pi * LP_FILTER_CUTOFF_HZ), self.dt)
|
self.measurement_rate_filter = FirstOrderFilter(0.0, 1 / (2 * np.pi * LP_FILTER_CUTOFF_HZ), self.dt)
|
||||||
|
|
||||||
self.extension = LatControlTorqueExt(self, CP, CP_SP, CI)
|
self.extension = LatControlTorqueExt(self, CP, CP_SP, CI)
|
||||||
|
|
||||||
@@ -78,15 +76,17 @@ class LatControlTorque(LatControl):
|
|||||||
|
|
||||||
delay_frames = int(np.clip(lat_delay / self.dt, 1, self.lat_accel_request_buffer_len))
|
delay_frames = int(np.clip(lat_delay / self.dt, 1, self.lat_accel_request_buffer_len))
|
||||||
expected_lateral_accel = self.lat_accel_request_buffer[-delay_frames]
|
expected_lateral_accel = self.lat_accel_request_buffer[-delay_frames]
|
||||||
lookahead_idx = int(np.clip(-delay_frames + self.lookahead_frames, -self.lat_accel_request_buffer_len+1, -2))
|
# TODO factor out lateral jerk from error to later replace it with delay independent alternative
|
||||||
raw_lateral_jerk = (self.lat_accel_request_buffer[lookahead_idx+1] - self.lat_accel_request_buffer[lookahead_idx-1]) / (2 * self.dt)
|
|
||||||
desired_lateral_jerk = self.jerk_filter.update(raw_lateral_jerk)
|
|
||||||
future_desired_lateral_accel = desired_curvature * CS.vEgo ** 2
|
future_desired_lateral_accel = desired_curvature * CS.vEgo ** 2
|
||||||
self.lat_accel_request_buffer.append(future_desired_lateral_accel)
|
self.lat_accel_request_buffer.append(future_desired_lateral_accel)
|
||||||
gravity_adjusted_future_lateral_accel = future_desired_lateral_accel - roll_compensation
|
gravity_adjusted_future_lateral_accel = future_desired_lateral_accel - roll_compensation
|
||||||
setpoint = expected_lateral_accel
|
desired_lateral_jerk = (future_desired_lateral_accel - expected_lateral_accel) / lat_delay
|
||||||
|
|
||||||
measurement = measured_curvature * CS.vEgo ** 2
|
measurement = measured_curvature * CS.vEgo ** 2
|
||||||
|
measurement_rate = self.measurement_rate_filter.update((measurement - self.previous_measurement) / self.dt)
|
||||||
|
self.previous_measurement = measurement
|
||||||
|
|
||||||
|
setpoint = lat_delay * desired_lateral_jerk + expected_lateral_accel
|
||||||
error = setpoint - measurement
|
error = setpoint - measurement
|
||||||
|
|
||||||
# do error correction in lateral acceleration space, convert at end to handle non-linear torque responses correctly
|
# do error correction in lateral acceleration space, convert at end to handle non-linear torque responses correctly
|
||||||
@@ -94,10 +94,15 @@ class LatControlTorque(LatControl):
|
|||||||
ff = gravity_adjusted_future_lateral_accel
|
ff = gravity_adjusted_future_lateral_accel
|
||||||
# latAccelOffset corrects roll compensation bias from device roll misalignment relative to car roll
|
# latAccelOffset corrects roll compensation bias from device roll misalignment relative to car roll
|
||||||
ff -= self.torque_params.latAccelOffset
|
ff -= self.torque_params.latAccelOffset
|
||||||
ff += get_friction(error + JERK_GAIN * desired_lateral_jerk, lateral_accel_deadzone, FRICTION_THRESHOLD, self.torque_params)
|
# TODO jerk is weighted by lat_delay for legacy reasons, but should be made independent of it
|
||||||
|
ff += get_friction(error, lateral_accel_deadzone, FRICTION_THRESHOLD, self.torque_params)
|
||||||
|
|
||||||
freeze_integrator = steer_limited_by_safety or CS.steeringPressed or CS.vEgo < 5
|
freeze_integrator = steer_limited_by_safety or CS.steeringPressed or CS.vEgo < 5
|
||||||
output_lataccel = self.pid.update(pid_log.error, speed=CS.vEgo, feedforward=ff, freeze_integrator=freeze_integrator)
|
output_lataccel = self.pid.update(pid_log.error,
|
||||||
|
-measurement_rate,
|
||||||
|
feedforward=ff,
|
||||||
|
speed=CS.vEgo,
|
||||||
|
freeze_integrator=freeze_integrator)
|
||||||
output_torque = self.torque_from_lateral_accel(output_lataccel, self.torque_params)
|
output_torque = self.torque_from_lateral_accel(output_lataccel, self.torque_params)
|
||||||
|
|
||||||
# Lateral acceleration torque controller extension updates
|
# Lateral acceleration torque controller extension updates
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
e0ad86508edb61b3eaa1b84662c515d2c3368295
|
b508f43fb0481bce0859c9b6ab4f45ee690b8dab
|
||||||
Reference in New Issue
Block a user