Skip to content

Commit

Permalink
improve get_torque_params (commaai#32586)
Browse files Browse the repository at this point in the history
* Loading torque data only once and reusing it across function calls.

* apply review

* still check only one entry

* fix that

---------

Co-authored-by: Shane Smiskol <[email protected]>
  • Loading branch information
deanlee and sshane authored Jun 6, 2024
1 parent a418c9e commit 045b9f2
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 17 deletions.
36 changes: 20 additions & 16 deletions selfdrive/car/interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,29 +57,33 @@ class LatControlInputs(NamedTuple):


@cache
def get_torque_params(candidate):
def get_torque_params():
with open(TORQUE_SUBSTITUTE_PATH, 'rb') as f:
sub = tomllib.load(f)
if candidate in sub:
candidate = sub[candidate]

with open(TORQUE_PARAMS_PATH, 'rb') as f:
params = tomllib.load(f)
with open(TORQUE_OVERRIDE_PATH, 'rb') as f:
override = tomllib.load(f)

# Ensure no overlap
if sum([candidate in x for x in [sub, params, override]]) > 1:
raise RuntimeError(f'{candidate} is defined twice in torque config')
torque_params = {}
for candidate in (sub.keys() | params.keys() | override.keys()) - {'legend'}:
if sum([candidate in x for x in [sub, params, override]]) > 1:
raise RuntimeError(f'{candidate} is defined twice in torque config')

sub_candidate = sub.get(candidate, candidate)

if sub_candidate in override:
out = override[sub_candidate]
elif sub_candidate in params:
out = params[sub_candidate]
else:
raise NotImplementedError(f"Did not find torque params for {sub_candidate}")

if candidate in override:
out = override[candidate]
elif candidate in params:
out = params[candidate]
else:
raise NotImplementedError(f"Did not find torque params for {candidate}")
return {key: out[i] for i, key in enumerate(params['legend'])}
torque_params[sub_candidate] = {key: out[i] for i, key in enumerate(params['legend'])}
if candidate in sub:
torque_params[candidate] = torque_params[sub_candidate]

return torque_params

# generic car and radar interfaces

Expand Down Expand Up @@ -180,7 +184,7 @@ def get_std_params(candidate):
ret.carFingerprint = candidate

# Car docs fields
ret.maxLateralAccel = get_torque_params(candidate)['MAX_LAT_ACCEL_MEASURED']
ret.maxLateralAccel = get_torque_params()[candidate]['MAX_LAT_ACCEL_MEASURED']
ret.autoResumeSng = True # describes whether car can resume from a stop automatically

# standard ALC params
Expand Down Expand Up @@ -213,7 +217,7 @@ def get_std_params(candidate):

@staticmethod
def configure_torque_tune(candidate, tune, steering_angle_deadzone_deg=0.0, use_steering_angle=True):
params = get_torque_params(candidate)
params = get_torque_params()[candidate]

tune.init('torque')
tune.torque.useSteeringAngle = use_steering_angle
Expand Down
2 changes: 1 addition & 1 deletion selfdrive/car/tests/test_lateral_limits.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def setup_class(cls):

CarControllerParams = importlib.import_module(f'selfdrive.car.{CP.carName}.values').CarControllerParams
cls.control_params = CarControllerParams(CP)
cls.torque_params = get_torque_params(cls.car_model)
cls.torque_params = get_torque_params()[cls.car_model]

@staticmethod
def calculate_0_5s_jerk(control_params, torque_params):
Expand Down

0 comments on commit 045b9f2

Please sign in to comment.