11
11
LongCtrlState = car .CarControl .Actuators .LongControlState
12
12
13
13
14
- def process_hud_alert (enabled , fingerprint , visual_alert , left_lane ,
15
- right_lane , left_lane_depart , right_lane_depart ):
16
- sys_warning = (visual_alert in (VisualAlert .steerRequired , VisualAlert .ldw ))
14
+ def process_hud_alert (enabled , fingerprint , hud_control ):
15
+ sys_warning = (hud_control .visualAlert in (VisualAlert .steerRequired , VisualAlert .ldw ))
17
16
18
17
# initialize to no line visible
19
18
sys_state = 1
20
- if left_lane and right_lane or sys_warning : # HUD alert only display when LKAS status is active
19
+ if hud_control . leftLaneVisible and hud_control . rightLaneVisible or sys_warning : # HUD alert only display when LKAS status is active
21
20
sys_state = 3 if enabled or sys_warning else 4
22
- elif left_lane :
21
+ elif hud_control . leftLaneVisible :
23
22
sys_state = 5
24
- elif right_lane :
23
+ elif hud_control . rightLaneVisible :
25
24
sys_state = 6
26
25
27
26
# initialize to no warnings
28
27
left_lane_warning = 0
29
28
right_lane_warning = 0
30
- if left_lane_depart :
29
+ if hud_control . leftLaneDepart :
31
30
left_lane_warning = 1 if fingerprint in (CAR .GENESIS_G90 , CAR .GENESIS_G80 ) else 2
32
- if right_lane_depart :
31
+ if hud_control . rightLaneDepart :
33
32
right_lane_warning = 1 if fingerprint in (CAR .GENESIS_G90 , CAR .GENESIS_G80 ) else 2
34
33
35
34
return sys_warning , sys_state , left_lane_warning , right_lane_warning
36
35
37
36
38
- class CarController () :
37
+ class CarController :
39
38
def __init__ (self , dbc_name , CP , VM ):
40
39
self .CP = CP
41
- self .p = CarControllerParams (CP )
40
+ self .params = CarControllerParams (CP )
42
41
self .packer = CANPacker (dbc_name )
42
+ self .frame = 0
43
43
44
44
self .apply_steer_last = 0
45
45
self .car_fingerprint = CP .carFingerprint
46
46
self .steer_rate_limited = False
47
47
self .last_resume_frame = 0
48
48
self .accel = 0
49
49
50
- def update (self , c , CS , frame , actuators , pcm_cancel_cmd , visual_alert , hud_speed ,
51
- left_lane , right_lane , left_lane_depart , right_lane_depart ):
50
+ def update (self , CC , CS ):
51
+ actuators = CC .actuators
52
+ hud_control = CC .hudControl
53
+ pcm_cancel_cmd = CC .cruiseControl .cancel
54
+
52
55
# Steering Torque
53
- new_steer = int (round (actuators .steer * self .p .STEER_MAX ))
54
- apply_steer = apply_std_steer_torque_limits (new_steer , self .apply_steer_last , CS .out .steeringTorque , self .p )
56
+ new_steer = int (round (actuators .steer * self .params .STEER_MAX ))
57
+ apply_steer = apply_std_steer_torque_limits (new_steer , self .apply_steer_last , CS .out .steeringTorque , self .params )
55
58
self .steer_rate_limited = new_steer != apply_steer
56
59
57
- if not c .latActive :
60
+ if not CC .latActive :
58
61
apply_steer = 0
59
62
60
63
self .apply_steer_last = apply_steer
61
64
62
- sys_warning , sys_state , left_lane_warning , right_lane_warning = \
63
- process_hud_alert (c .enabled , self .car_fingerprint , visual_alert ,
64
- left_lane , right_lane , left_lane_depart , right_lane_depart )
65
+ sys_warning , sys_state , left_lane_warning , right_lane_warning = process_hud_alert (CC .enabled , self .car_fingerprint ,
66
+ hud_control )
65
67
66
68
can_sends = []
67
69
68
70
# tester present - w/ no response (keeps radar disabled)
69
71
if self .CP .openpilotLongitudinalControl :
70
- if ( frame % 100 ) == 0 :
72
+ if self . frame % 100 == 0 :
71
73
can_sends .append ([0x7D0 , 0 , b"\x02 \x3E \x80 \x00 \x00 \x00 \x00 \x00 " , 0 ])
72
74
73
- can_sends .append (create_lkas11 (self .packer , frame , self .car_fingerprint , apply_steer , c .latActive ,
74
- CS .lkas11 , sys_warning , sys_state , c .enabled ,
75
- left_lane , right_lane ,
75
+ can_sends .append (create_lkas11 (self .packer , self . frame , self .car_fingerprint , apply_steer , CC .latActive ,
76
+ CS .lkas11 , sys_warning , sys_state , CC .enabled ,
77
+ hud_control . leftLaneVisible , hud_control . rightLaneVisible ,
76
78
left_lane_warning , right_lane_warning ))
77
79
78
80
if not self .CP .openpilotLongitudinalControl :
79
81
if pcm_cancel_cmd :
80
- can_sends .append (create_clu11 (self .packer , frame , CS .clu11 , Buttons .CANCEL ))
82
+ can_sends .append (create_clu11 (self .packer , self . frame , CS .clu11 , Buttons .CANCEL ))
81
83
elif CS .out .cruiseState .standstill :
82
84
# send resume at a max freq of 10Hz
83
- if (frame - self .last_resume_frame ) * DT_CTRL > 0.1 :
85
+ if (self . frame - self .last_resume_frame ) * DT_CTRL > 0.1 :
84
86
# send 25 messages at a time to increases the likelihood of resume being accepted
85
- can_sends .extend ([create_clu11 (self .packer , frame , CS .clu11 , Buttons .RES_ACCEL )] * 25 )
86
- self .last_resume_frame = frame
87
+ can_sends .extend ([create_clu11 (self .packer , self . frame , CS .clu11 , Buttons .RES_ACCEL )] * 25 )
88
+ self .last_resume_frame = self . frame
87
89
88
- if frame % 2 == 0 and self .CP .openpilotLongitudinalControl :
90
+ if self . frame % 2 == 0 and self .CP .openpilotLongitudinalControl :
89
91
lead_visible = False
90
- accel = actuators .accel if c .longActive else 0
92
+ accel = actuators .accel if CC .longActive else 0
91
93
92
94
jerk = clip (2.0 * (accel - CS .out .aEgo ), - 12.7 , 12.7 )
93
95
@@ -97,28 +99,29 @@ def update(self, c, CS, frame, actuators, pcm_cancel_cmd, visual_alert, hud_spee
97
99
accel = clip (accel , CarControllerParams .ACCEL_MIN , CarControllerParams .ACCEL_MAX )
98
100
99
101
stopping = (actuators .longControlState == LongCtrlState .stopping )
100
- set_speed_in_units = hud_speed * (CV .MS_TO_MPH if CS .clu11 ["CF_Clu_SPEED_UNIT" ] == 1 else CV .MS_TO_KPH )
101
- can_sends .extend (create_acc_commands (self .packer , c .enabled , accel , jerk , int (frame / 2 ), lead_visible ,
102
+ set_speed_in_units = hud_control . setSpeed * (CV .MS_TO_MPH if CS .clu11 ["CF_Clu_SPEED_UNIT" ] == 1 else CV .MS_TO_KPH )
103
+ can_sends .extend (create_acc_commands (self .packer , CC .enabled , accel , jerk , int (self . frame / 2 ), lead_visible ,
102
104
set_speed_in_units , stopping , CS .out .gasPressed ))
103
105
self .accel = accel
104
106
105
107
# 20 Hz LFA MFA message
106
- if frame % 5 == 0 and self .car_fingerprint in (CAR .SONATA , CAR .PALISADE , CAR .IONIQ , CAR .KIA_NIRO_EV , CAR .KIA_NIRO_HEV_2021 ,
107
- CAR .IONIQ_EV_2020 , CAR .IONIQ_PHEV , CAR .KIA_CEED , CAR .KIA_SELTOS , CAR .KONA_EV ,
108
- CAR .ELANTRA_2021 , CAR .ELANTRA_HEV_2021 , CAR .SONATA_HYBRID , CAR .KONA_HEV , CAR .SANTA_FE_2022 ,
109
- CAR .KIA_K5_2021 , CAR .IONIQ_HEV_2022 , CAR .SANTA_FE_HEV_2022 , CAR .GENESIS_G70_2020 , CAR .SANTA_FE_PHEV_2022 ):
110
- can_sends .append (create_lfahda_mfc (self .packer , c .enabled ))
108
+ if self . frame % 5 == 0 and self .car_fingerprint in (CAR .SONATA , CAR .PALISADE , CAR .IONIQ , CAR .KIA_NIRO_EV , CAR .KIA_NIRO_HEV_2021 ,
109
+ CAR .IONIQ_EV_2020 , CAR .IONIQ_PHEV , CAR .KIA_CEED , CAR .KIA_SELTOS , CAR .KONA_EV ,
110
+ CAR .ELANTRA_2021 , CAR .ELANTRA_HEV_2021 , CAR .SONATA_HYBRID , CAR .KONA_HEV , CAR .SANTA_FE_2022 ,
111
+ CAR .KIA_K5_2021 , CAR .IONIQ_HEV_2022 , CAR .SANTA_FE_HEV_2022 , CAR .GENESIS_G70_2020 , CAR .SANTA_FE_PHEV_2022 ):
112
+ can_sends .append (create_lfahda_mfc (self .packer , CC .enabled ))
111
113
112
114
# 5 Hz ACC options
113
- if frame % 20 == 0 and self .CP .openpilotLongitudinalControl :
115
+ if self . frame % 20 == 0 and self .CP .openpilotLongitudinalControl :
114
116
can_sends .extend (create_acc_opt (self .packer ))
115
117
116
118
# 2 Hz front radar options
117
- if frame % 50 == 0 and self .CP .openpilotLongitudinalControl :
119
+ if self . frame % 50 == 0 and self .CP .openpilotLongitudinalControl :
118
120
can_sends .append (create_frt_radar_opt (self .packer ))
119
121
120
122
new_actuators = actuators .copy ()
121
- new_actuators .steer = apply_steer / self .p .STEER_MAX
123
+ new_actuators .steer = apply_steer / self .params .STEER_MAX
122
124
new_actuators .accel = self .accel
123
125
126
+ self .frame += 1
124
127
return new_actuators , can_sends
0 commit comments