|
|
@ -4,6 +4,8 @@ import math |
|
|
|
|
|
|
|
|
|
|
|
from cereal import car |
|
|
|
from cereal import car |
|
|
|
from common.conversions import Conversions as CV |
|
|
|
from common.conversions import Conversions as CV |
|
|
|
|
|
|
|
from common.filter_simple import FirstOrderFilter |
|
|
|
|
|
|
|
from common.realtime import DT_CTRL |
|
|
|
from opendbc.can.parser import CANParser |
|
|
|
from opendbc.can.parser import CANParser |
|
|
|
from opendbc.can.can_define import CANDefine |
|
|
|
from opendbc.can.can_define import CANDefine |
|
|
|
from selfdrive.car.hyundai.values import HyundaiFlags, DBC, FEATURES, CAMERA_SCC_CAR, CANFD_CAR, EV_CAR, HYBRID_CAR, Buttons, CarControllerParams |
|
|
|
from selfdrive.car.hyundai.values import HyundaiFlags, DBC, FEATURES, CAMERA_SCC_CAR, CANFD_CAR, EV_CAR, HYBRID_CAR, Buttons, CarControllerParams |
|
|
@ -33,9 +35,8 @@ class CarState(CarStateBase): |
|
|
|
self.park_brake = False |
|
|
|
self.park_brake = False |
|
|
|
self.buttons_counter = 0 |
|
|
|
self.buttons_counter = 0 |
|
|
|
|
|
|
|
|
|
|
|
# noisy signal sampled at 5 Hz |
|
|
|
# noisy signal sampled at ~5 Hz |
|
|
|
self.cluster_speed = 0 |
|
|
|
self.cluster_speed = FirstOrderFilter(0.0, 1 / 5., DT_CTRL, initialized=False) |
|
|
|
self.cluster_speed_counter = 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.params = CarControllerParams(CP) |
|
|
|
self.params = CarControllerParams(CP) |
|
|
|
|
|
|
|
|
|
|
@ -63,15 +64,15 @@ class CarState(CarStateBase): |
|
|
|
ret.vEgo, ret.aEgo = self.update_speed_kf(ret.vEgoRaw) |
|
|
|
ret.vEgo, ret.aEgo = self.update_speed_kf(ret.vEgoRaw) |
|
|
|
ret.standstill = ret.vEgoRaw < 0.1 |
|
|
|
ret.standstill = ret.vEgoRaw < 0.1 |
|
|
|
|
|
|
|
|
|
|
|
self.cluster_speed_counter += 1 |
|
|
|
cluster_speed = cp.vl["CLU15"]["CF_Clu_VehicleSpeed"] |
|
|
|
if self.cluster_speed_counter > 20: # 5 Hz |
|
|
|
if not is_metric: |
|
|
|
self.cluster_speed = cp.vl["CLU15"]["CF_Clu_VehicleSpeed"] |
|
|
|
# compensate for dash rounding |
|
|
|
self.cluster_speed_counter = 0 |
|
|
|
cluster_speed = math.floor(cluster_speed * CV.KPH_TO_MPH + CV.KPH_TO_MPH) |
|
|
|
if not is_metric: |
|
|
|
|
|
|
|
# compensate for dash rounding |
|
|
|
|
|
|
|
self.cluster_speed = math.floor(self.cluster_speed * CV.KPH_TO_MPH + CV.KPH_TO_MPH) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ret.vEgoCluster = self.cluster_speed * speed_conv |
|
|
|
self.cluster_speed.update(cluster_speed) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if self.cluster_speed.initialized: |
|
|
|
|
|
|
|
ret.vEgoCluster = self.cluster_speed.x * speed_conv |
|
|
|
|
|
|
|
|
|
|
|
ret.steeringAngleDeg = cp.vl["SAS11"]["SAS_Angle"] |
|
|
|
ret.steeringAngleDeg = cp.vl["SAS11"]["SAS_Angle"] |
|
|
|
ret.steeringRateDeg = cp.vl["SAS11"]["SAS_Speed"] |
|
|
|
ret.steeringRateDeg = cp.vl["SAS11"]["SAS_Speed"] |
|
|
|