#!/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 ' )