You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.2 KiB
126 lines
3.2 KiB
#!/usr/bin/env python3
|
|
from enum import Enum
|
|
|
|
|
|
class LongTunes(Enum):
|
|
PEDAL = 0
|
|
TSS2 = 1
|
|
TSS = 2
|
|
|
|
class LatTunes(Enum):
|
|
INDI_PRIUS = 0
|
|
LQR_RAV4 = 1
|
|
PID_A = 2
|
|
PID_B = 3
|
|
PID_C = 4
|
|
PID_D = 5
|
|
PID_E = 6
|
|
PID_F = 7
|
|
PID_G = 8
|
|
PID_I = 9
|
|
PID_H = 10
|
|
PID_J = 11
|
|
PID_K = 12
|
|
PID_L = 13
|
|
PID_M = 14
|
|
PID_N = 15
|
|
|
|
|
|
###### LONG ######
|
|
def set_long_tune(tune, name):
|
|
# Improved longitudinal tune
|
|
if name == LongTunes.TSS2 or name == LongTunes.PEDAL:
|
|
tune.deadzoneBP = [0., 8.05]
|
|
tune.deadzoneV = [.0, .14]
|
|
tune.kpBP = [0., 5., 20.]
|
|
tune.kpV = [1.3, 1.0, 0.7]
|
|
tune.kiBP = [0., 5., 12., 20., 27.]
|
|
tune.kiV = [.35, .23, .20, .17, .1]
|
|
# Default longitudinal tune
|
|
elif name == LongTunes.TSS:
|
|
tune.deadzoneBP = [0., 9.]
|
|
tune.deadzoneV = [0., .15]
|
|
tune.kpBP = [0., 5., 35.]
|
|
tune.kiBP = [0., 35.]
|
|
tune.kpV = [3.6, 2.4, 1.5]
|
|
tune.kiV = [0.54, 0.36]
|
|
else:
|
|
raise NotImplementedError('This longitudinal tune does not exist')
|
|
|
|
|
|
###### LAT ######
|
|
def set_lat_tune(tune, name):
|
|
if name == LatTunes.INDI_PRIUS:
|
|
tune.init('indi')
|
|
tune.indi.innerLoopGainBP = [0.]
|
|
tune.indi.innerLoopGainV = [4.0]
|
|
tune.indi.outerLoopGainBP = [0.]
|
|
tune.indi.outerLoopGainV = [3.0]
|
|
tune.indi.timeConstantBP = [0.]
|
|
tune.indi.timeConstantV = [1.0]
|
|
tune.indi.actuatorEffectivenessBP = [0.]
|
|
tune.indi.actuatorEffectivenessV = [1.0]
|
|
|
|
elif name == LatTunes.LQR_RAV4:
|
|
tune.init('lqr')
|
|
tune.lqr.scale = 1500.0
|
|
tune.lqr.ki = 0.05
|
|
tune.lqr.a = [0., 1., -0.22619643, 1.21822268]
|
|
tune.lqr.b = [-1.92006585e-04, 3.95603032e-05]
|
|
tune.lqr.c = [1., 0.]
|
|
tune.lqr.k = [-110.73572306, 451.22718255]
|
|
tune.lqr.l = [0.3233671, 0.3185757]
|
|
tune.lqr.dcGain = 0.002237852961363602
|
|
|
|
elif 'PID' in str(name):
|
|
tune.init('pid')
|
|
tune.pid.kiBP = [0.0]
|
|
tune.pid.kpBP = [0.0]
|
|
if name == LatTunes.PID_A:
|
|
tune.pid.kpV = [0.2]
|
|
tune.pid.kiV = [0.05]
|
|
tune.pid.kf = 0.00003
|
|
elif name == LatTunes.PID_C:
|
|
tune.pid.kpV = [0.6]
|
|
tune.pid.kiV = [0.1]
|
|
tune.pid.kf = 0.00006
|
|
elif name == LatTunes.PID_D:
|
|
tune.pid.kpV = [0.6]
|
|
tune.pid.kiV = [0.1]
|
|
tune.pid.kf = 0.00007818594
|
|
elif name == LatTunes.PID_F:
|
|
tune.pid.kpV = [0.723]
|
|
tune.pid.kiV = [0.0428]
|
|
tune.pid.kf = 0.00006
|
|
elif name == LatTunes.PID_G:
|
|
tune.pid.kpV = [0.18]
|
|
tune.pid.kiV = [0.015]
|
|
tune.pid.kf = 0.00012
|
|
elif name == LatTunes.PID_H:
|
|
tune.pid.kpV = [0.17]
|
|
tune.pid.kiV = [0.03]
|
|
tune.pid.kf = 0.00006
|
|
elif name == LatTunes.PID_I:
|
|
tune.pid.kpV = [0.15]
|
|
tune.pid.kiV = [0.05]
|
|
tune.pid.kf = 0.00004
|
|
elif name == LatTunes.PID_J:
|
|
tune.pid.kpV = [0.19]
|
|
tune.pid.kiV = [0.02]
|
|
tune.pid.kf = 0.00007818594
|
|
elif name == LatTunes.PID_L:
|
|
tune.pid.kpV = [0.3]
|
|
tune.pid.kiV = [0.05]
|
|
tune.pid.kf = 0.00006
|
|
elif name == LatTunes.PID_M:
|
|
tune.pid.kpV = [0.3]
|
|
tune.pid.kiV = [0.05]
|
|
tune.pid.kf = 0.00007
|
|
elif name == LatTunes.PID_N:
|
|
tune.pid.kpV = [0.35]
|
|
tune.pid.kiV = [0.15]
|
|
tune.pid.kf = 0.00007818594
|
|
else:
|
|
raise NotImplementedError('This PID tune does not exist')
|
|
else:
|
|
raise NotImplementedError('This lateral tune does not exist')
|
|
|