|
|
|
@ -13,11 +13,7 @@ class LatControlPID(LatControl): |
|
|
|
|
k_f=CP.lateralTuning.pid.kf, pos_limit=self.steer_max, neg_limit=-self.steer_max) |
|
|
|
|
self.get_steer_feedforward = CI.get_steer_feedforward_function() |
|
|
|
|
|
|
|
|
|
def reset(self): |
|
|
|
|
super().reset() |
|
|
|
|
self.pid.reset() |
|
|
|
|
|
|
|
|
|
def update(self, active, CS, VM, params, steer_limited_by_controls, desired_curvature, curvature_limited): |
|
|
|
|
def update(self, active, CS, VM, params, steer_limited_by_safety, desired_curvature, curvature_limited): |
|
|
|
|
pid_log = log.ControlsState.LateralPIDState.new_message() |
|
|
|
|
pid_log.steeringAngleDeg = float(CS.steeringAngleDeg) |
|
|
|
|
pid_log.steeringRateDeg = float(CS.steeringRateDeg) |
|
|
|
@ -29,20 +25,24 @@ class LatControlPID(LatControl): |
|
|
|
|
pid_log.steeringAngleDesiredDeg = angle_steers_des |
|
|
|
|
pid_log.angleError = error |
|
|
|
|
if not active: |
|
|
|
|
output_steer = 0.0 |
|
|
|
|
output_torque = 0.0 |
|
|
|
|
pid_log.active = False |
|
|
|
|
self.pid.reset() |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
# offset does not contribute to resistive torque |
|
|
|
|
steer_feedforward = self.get_steer_feedforward(angle_steers_des_no_offset, CS.vEgo) |
|
|
|
|
ff = self.get_steer_feedforward(angle_steers_des_no_offset, CS.vEgo) |
|
|
|
|
freeze_integrator = steer_limited_by_safety or CS.steeringPressed or CS.vEgo < 5 |
|
|
|
|
|
|
|
|
|
output_torque = self.pid.update(error, |
|
|
|
|
feedforward=ff, |
|
|
|
|
speed=CS.vEgo, |
|
|
|
|
freeze_integrator=freeze_integrator) |
|
|
|
|
|
|
|
|
|
output_steer = self.pid.update(error, override=CS.steeringPressed, |
|
|
|
|
feedforward=steer_feedforward, speed=CS.vEgo) |
|
|
|
|
pid_log.active = True |
|
|
|
|
pid_log.p = float(self.pid.p) |
|
|
|
|
pid_log.i = float(self.pid.i) |
|
|
|
|
pid_log.f = float(self.pid.f) |
|
|
|
|
pid_log.output = float(output_steer) |
|
|
|
|
pid_log.saturated = bool(self._check_saturation(self.steer_max - abs(output_steer) < 1e-3, CS, steer_limited_by_controls, curvature_limited)) |
|
|
|
|
pid_log.output = float(output_torque) |
|
|
|
|
pid_log.saturated = bool(self._check_saturation(self.steer_max - abs(output_torque) < 1e-3, CS, steer_limited_by_safety, curvature_limited)) |
|
|
|
|
|
|
|
|
|
return output_steer, angle_steers_des, pid_log |
|
|
|
|
return output_torque, angle_steers_des, pid_log |
|
|
|
|