Lateral controllers: pass dt (delta time) explictly (#36281)

pull/36287/head
felsager 3 days ago committed by GitHub
parent 9f32f217e6
commit 2deb4e6f65
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      selfdrive/car/tests/test_car_interfaces.py
  2. 8
      selfdrive/controls/controlsd.py
  3. 7
      selfdrive/controls/lib/latcontrol.py
  4. 4
      selfdrive/controls/lib/latcontrol_angle.py
  5. 4
      selfdrive/controls/lib/latcontrol_pid.py
  6. 4
      selfdrive/controls/lib/latcontrol_torque.py
  7. 3
      selfdrive/controls/tests/test_latcontrol.py

@ -54,8 +54,8 @@ class TestCarInterfaces:
# hypothesis also slows down significantly with just one more message draw # hypothesis also slows down significantly with just one more message draw
LongControl(car_params) LongControl(car_params)
if car_params.steerControlType == CarParams.SteerControlType.angle: if car_params.steerControlType == CarParams.SteerControlType.angle:
LatControlAngle(car_params, car_interface) LatControlAngle(car_params, car_interface, DT_CTRL)
elif car_params.lateralTuning.which() == 'pid': elif car_params.lateralTuning.which() == 'pid':
LatControlPID(car_params, car_interface) LatControlPID(car_params, car_interface, DT_CTRL)
elif car_params.lateralTuning.which() == 'torque': elif car_params.lateralTuning.which() == 'torque':
LatControlTorque(car_params, car_interface) LatControlTorque(car_params, car_interface, DT_CTRL)

@ -6,7 +6,7 @@ from cereal import car, log
import cereal.messaging as messaging import cereal.messaging as messaging
from openpilot.common.constants import CV from openpilot.common.constants import CV
from openpilot.common.params import Params from openpilot.common.params import Params
from openpilot.common.realtime import config_realtime_process, Priority, Ratekeeper from openpilot.common.realtime import config_realtime_process, DT_CTRL, Priority, Ratekeeper
from openpilot.common.swaglog import cloudlog from openpilot.common.swaglog import cloudlog
from opendbc.car.car_helpers import interfaces from opendbc.car.car_helpers import interfaces
@ -51,11 +51,11 @@ class Controls:
self.VM = VehicleModel(self.CP) self.VM = VehicleModel(self.CP)
self.LaC: LatControl self.LaC: LatControl
if self.CP.steerControlType == car.CarParams.SteerControlType.angle: if self.CP.steerControlType == car.CarParams.SteerControlType.angle:
self.LaC = LatControlAngle(self.CP, self.CI) self.LaC = LatControlAngle(self.CP, self.CI, DT_CTRL)
elif self.CP.lateralTuning.which() == 'pid': elif self.CP.lateralTuning.which() == 'pid':
self.LaC = LatControlPID(self.CP, self.CI) self.LaC = LatControlPID(self.CP, self.CI, DT_CTRL)
elif self.CP.lateralTuning.which() == 'torque': elif self.CP.lateralTuning.which() == 'torque':
self.LaC = LatControlTorque(self.CP, self.CI) self.LaC = LatControlTorque(self.CP, self.CI, DT_CTRL)
def update(self): def update(self):
self.sm.update(15) self.sm.update(15)

@ -1,12 +1,11 @@
import numpy as np import numpy as np
from abc import abstractmethod, ABC from abc import abstractmethod, ABC
from openpilot.common.realtime import DT_CTRL
class LatControl(ABC): class LatControl(ABC):
def __init__(self, CP, CI): def __init__(self, CP, CI, dt):
self.sat_count_rate = 1.0 * DT_CTRL self.dt = dt
self.sat_count_rate = 1.0 * self.dt
self.sat_limit = CP.steerLimitTimer self.sat_limit = CP.steerLimitTimer
self.sat_count = 0. self.sat_count = 0.
self.sat_check_min_speed = 10. self.sat_check_min_speed = 10.

@ -8,8 +8,8 @@ STEER_ANGLE_SATURATION_THRESHOLD = 2.5 # Degrees
class LatControlAngle(LatControl): class LatControlAngle(LatControl):
def __init__(self, CP, CI): def __init__(self, CP, CI, dt):
super().__init__(CP, CI) super().__init__(CP, CI, dt)
self.sat_check_min_speed = 5. self.sat_check_min_speed = 5.
self.use_steer_limited_by_safety = CP.brand == "tesla" self.use_steer_limited_by_safety = CP.brand == "tesla"

@ -6,8 +6,8 @@ from openpilot.common.pid import PIDController
class LatControlPID(LatControl): class LatControlPID(LatControl):
def __init__(self, CP, CI): def __init__(self, CP, CI, dt):
super().__init__(CP, CI) super().__init__(CP, CI, dt)
self.pid = PIDController((CP.lateralTuning.pid.kpBP, CP.lateralTuning.pid.kpV), self.pid = PIDController((CP.lateralTuning.pid.kpBP, CP.lateralTuning.pid.kpV),
(CP.lateralTuning.pid.kiBP, CP.lateralTuning.pid.kiV), (CP.lateralTuning.pid.kiBP, CP.lateralTuning.pid.kiV),
k_f=CP.lateralTuning.pid.kf, pos_limit=self.steer_max, neg_limit=-self.steer_max) k_f=CP.lateralTuning.pid.kf, pos_limit=self.steer_max, neg_limit=-self.steer_max)

@ -23,8 +23,8 @@ LOW_SPEED_Y = [15, 13, 10, 5]
class LatControlTorque(LatControl): class LatControlTorque(LatControl):
def __init__(self, CP, CI): def __init__(self, CP, CI, dt):
super().__init__(CP, CI) super().__init__(CP, CI, dt)
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()

@ -7,6 +7,7 @@ from opendbc.car.toyota.values import CAR as TOYOTA
from opendbc.car.nissan.values import CAR as NISSAN from opendbc.car.nissan.values import CAR as NISSAN
from opendbc.car.gm.values import CAR as GM from opendbc.car.gm.values import CAR as GM
from opendbc.car.vehicle_model import VehicleModel from opendbc.car.vehicle_model import VehicleModel
from openpilot.common.realtime import DT_CTRL
from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID
from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque
from openpilot.selfdrive.controls.lib.latcontrol_angle import LatControlAngle from openpilot.selfdrive.controls.lib.latcontrol_angle import LatControlAngle
@ -22,7 +23,7 @@ class TestLatControl:
CI = CarInterface(CP) CI = CarInterface(CP)
VM = VehicleModel(CP) VM = VehicleModel(CP)
controller = controller(CP.as_reader(), CI) controller = controller(CP.as_reader(), CI, DT_CTRL)
CS = car.CarState.new_message() CS = car.CarState.new_message()
CS.vEgo = 30 CS.vEgo = 30

Loading…
Cancel
Save