|
|
@ -6,6 +6,7 @@ from typing import Any |
|
|
|
|
|
|
|
|
|
|
|
import capnp |
|
|
|
import capnp |
|
|
|
from cereal import messaging, log, car |
|
|
|
from cereal import messaging, log, car |
|
|
|
|
|
|
|
from openpilot.common.filter_simple import FirstOrderFilter |
|
|
|
from openpilot.common.params import Params |
|
|
|
from openpilot.common.params import Params |
|
|
|
from openpilot.common.realtime import DT_MDL, Priority, config_realtime_process |
|
|
|
from openpilot.common.realtime import DT_MDL, Priority, config_realtime_process |
|
|
|
from openpilot.common.swaglog import cloudlog |
|
|
|
from openpilot.common.swaglog import cloudlog |
|
|
@ -51,7 +52,7 @@ class Track: |
|
|
|
def __init__(self, identifier: int, v_lead: float, kalman_params: KalmanParams): |
|
|
|
def __init__(self, identifier: int, v_lead: float, kalman_params: KalmanParams): |
|
|
|
self.identifier = identifier |
|
|
|
self.identifier = identifier |
|
|
|
self.cnt = 0 |
|
|
|
self.cnt = 0 |
|
|
|
self.aLeadTau = _LEAD_ACCEL_TAU |
|
|
|
self.aLeadTau = FirstOrderFilter(_LEAD_ACCEL_TAU, 0.45, DT_MDL) |
|
|
|
self.K_A = kalman_params.A |
|
|
|
self.K_A = kalman_params.A |
|
|
|
self.K_C = kalman_params.C |
|
|
|
self.K_C = kalman_params.C |
|
|
|
self.K_K = kalman_params.K |
|
|
|
self.K_K = kalman_params.K |
|
|
@ -74,17 +75,12 @@ class Track: |
|
|
|
|
|
|
|
|
|
|
|
# Learn if constant acceleration |
|
|
|
# Learn if constant acceleration |
|
|
|
if abs(self.aLeadK) < 0.5: |
|
|
|
if abs(self.aLeadK) < 0.5: |
|
|
|
self.aLeadTau = _LEAD_ACCEL_TAU |
|
|
|
self.aLeadTau.x = _LEAD_ACCEL_TAU |
|
|
|
else: |
|
|
|
else: |
|
|
|
self.aLeadTau *= 0.9 |
|
|
|
self.aLeadTau.update(0.0) |
|
|
|
|
|
|
|
|
|
|
|
self.cnt += 1 |
|
|
|
self.cnt += 1 |
|
|
|
|
|
|
|
|
|
|
|
def reset_a_lead(self, aLeadK: float, aLeadTau: float): |
|
|
|
|
|
|
|
self.kf = KF1D([[self.vLead], [aLeadK]], self.K_A, self.K_C, self.K_K) |
|
|
|
|
|
|
|
self.aLeadK = aLeadK |
|
|
|
|
|
|
|
self.aLeadTau = aLeadTau |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_RadarState(self, model_prob: float = 0.0): |
|
|
|
def get_RadarState(self, model_prob: float = 0.0): |
|
|
|
return { |
|
|
|
return { |
|
|
|
"dRel": float(self.dRel), |
|
|
|
"dRel": float(self.dRel), |
|
|
@ -93,7 +89,7 @@ class Track: |
|
|
|
"vLead": float(self.vLead), |
|
|
|
"vLead": float(self.vLead), |
|
|
|
"vLeadK": float(self.vLeadK), |
|
|
|
"vLeadK": float(self.vLeadK), |
|
|
|
"aLeadK": float(self.aLeadK), |
|
|
|
"aLeadK": float(self.aLeadK), |
|
|
|
"aLeadTau": float(self.aLeadTau), |
|
|
|
"aLeadTau": float(self.aLeadTau.x), |
|
|
|
"status": True, |
|
|
|
"status": True, |
|
|
|
"fcw": self.is_potential_fcw(model_prob), |
|
|
|
"fcw": self.is_potential_fcw(model_prob), |
|
|
|
"modelProb": model_prob, |
|
|
|
"modelProb": model_prob, |
|
|
|