|
|
@ -1,4 +1,5 @@ |
|
|
|
from cereal import car |
|
|
|
from cereal import car |
|
|
|
|
|
|
|
from common.realtime import DT_CTRL |
|
|
|
from selfdrive.car import apply_std_steer_torque_limits |
|
|
|
from selfdrive.car import apply_std_steer_torque_limits |
|
|
|
from selfdrive.car.hyundai.hyundaican import create_lkas11, create_clu11, create_lfa_mfa |
|
|
|
from selfdrive.car.hyundai.hyundaican import create_lkas11, create_clu11, create_lfa_mfa |
|
|
|
from selfdrive.car.hyundai.values import Buttons, SteerLimitParams, CAR |
|
|
|
from selfdrive.car.hyundai.values import Buttons, SteerLimitParams, CAR |
|
|
@ -40,9 +41,7 @@ class CarController(): |
|
|
|
self.car_fingerprint = CP.carFingerprint |
|
|
|
self.car_fingerprint = CP.carFingerprint |
|
|
|
self.packer = CANPacker(dbc_name) |
|
|
|
self.packer = CANPacker(dbc_name) |
|
|
|
self.steer_rate_limited = False |
|
|
|
self.steer_rate_limited = False |
|
|
|
self.resume_cnt = 0 |
|
|
|
|
|
|
|
self.last_resume_frame = 0 |
|
|
|
self.last_resume_frame = 0 |
|
|
|
self.last_lead_distance = 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update(self, enabled, CS, frame, actuators, pcm_cancel_cmd, visual_alert, |
|
|
|
def update(self, enabled, CS, frame, actuators, pcm_cancel_cmd, visual_alert, |
|
|
|
left_lane, right_lane, left_lane_depart, right_lane_depart): |
|
|
|
left_lane, right_lane, left_lane_depart, right_lane_depart): |
|
|
@ -56,7 +55,7 @@ class CarController(): |
|
|
|
|
|
|
|
|
|
|
|
# fix for Genesis hard fault at low speed |
|
|
|
# fix for Genesis hard fault at low speed |
|
|
|
if CS.out.vEgo < 16.7 and self.car_fingerprint == CAR.HYUNDAI_GENESIS: |
|
|
|
if CS.out.vEgo < 16.7 and self.car_fingerprint == CAR.HYUNDAI_GENESIS: |
|
|
|
lkas_active = 0 |
|
|
|
lkas_active = False |
|
|
|
|
|
|
|
|
|
|
|
if not lkas_active: |
|
|
|
if not lkas_active: |
|
|
|
apply_steer = 0 |
|
|
|
apply_steer = 0 |
|
|
@ -75,24 +74,12 @@ class CarController(): |
|
|
|
|
|
|
|
|
|
|
|
if pcm_cancel_cmd: |
|
|
|
if pcm_cancel_cmd: |
|
|
|
can_sends.append(create_clu11(self.packer, frame, CS.clu11, Buttons.CANCEL)) |
|
|
|
can_sends.append(create_clu11(self.packer, frame, CS.clu11, Buttons.CANCEL)) |
|
|
|
|
|
|
|
|
|
|
|
elif CS.out.cruiseState.standstill: |
|
|
|
elif CS.out.cruiseState.standstill: |
|
|
|
# run only first time when the car stopped |
|
|
|
# SCC won't resume anyway when the lead distace is less than 3.7m |
|
|
|
if self.last_lead_distance == 0: |
|
|
|
# send resume at a max freq of 5Hz |
|
|
|
# get the lead distance from the Radar |
|
|
|
if CS.lead_distance > 3.7 and (frame - self.last_resume_frame)*DT_CTRL > 0.2: |
|
|
|
self.last_lead_distance = CS.lead_distance |
|
|
|
|
|
|
|
self.resume_cnt = 0 |
|
|
|
|
|
|
|
# when lead car starts moving, create 6 RES msgs |
|
|
|
|
|
|
|
elif CS.lead_distance != self.last_lead_distance and (frame - self.last_resume_frame) > 5: |
|
|
|
|
|
|
|
can_sends.append(create_clu11(self.packer, frame, CS.clu11, Buttons.RES_ACCEL)) |
|
|
|
can_sends.append(create_clu11(self.packer, frame, CS.clu11, Buttons.RES_ACCEL)) |
|
|
|
self.resume_cnt += 1 |
|
|
|
self.last_resume_frame = frame |
|
|
|
# interval after 6 msgs |
|
|
|
|
|
|
|
if self.resume_cnt > 5: |
|
|
|
|
|
|
|
self.last_resume_frame = frame |
|
|
|
|
|
|
|
self.resume_cnt = 0 |
|
|
|
|
|
|
|
# reset lead distnce after the car starts moving |
|
|
|
|
|
|
|
elif self.last_lead_distance != 0: |
|
|
|
|
|
|
|
self.last_lead_distance = 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 20 Hz LFA MFA message |
|
|
|
# 20 Hz LFA MFA message |
|
|
|
if frame % 5 == 0 and self.car_fingerprint in [CAR.SONATA, CAR.PALISADE, CAR.IONIQ]: |
|
|
|
if frame % 5 == 0 and self.car_fingerprint in [CAR.SONATA, CAR.PALISADE, CAR.IONIQ]: |
|
|
|