@ -72,10 +72,7 @@ void run_model(ModelState &model, VisionIpcClient &vipc_client) {
SubMaster sm ( { " lateralPlan " , " roadCameraState " } ) ;
SubMaster sm ( { " lateralPlan " , " roadCameraState " } ) ;
// setup filter to track dropped frames
// setup filter to track dropped frames
const float dt = 1. / MODEL_FREQ ;
FirstOrderFilter frame_dropped_filter ( 0. , 10. , 1. / MODEL_FREQ ) ;
const float ts = 10.0 ; // filter time constant (s)
const float frame_filter_k = ( dt / ts ) / ( 1. + dt / ts ) ;
float frames_dropped = 0 ;
uint32_t frame_id = 0 , last_vipc_frame_id = 0 ;
uint32_t frame_id = 0 , last_vipc_frame_id = 0 ;
double last = 0 ;
double last = 0 ;
@ -114,8 +111,12 @@ void run_model(ModelState &model, VisionIpcClient &vipc_client) {
// tracked dropped frames
// tracked dropped frames
uint32_t vipc_dropped_frames = extra . frame_id - last_vipc_frame_id - 1 ;
uint32_t vipc_dropped_frames = extra . frame_id - last_vipc_frame_id - 1 ;
frames_dropped = ( 1. - frame_filter_k ) * frames_dropped + frame_filter_k * ( float ) std : : min ( vipc_dropped_frames , 10U ) ;
float frames_dropped = frame_dropped_filter . update ( ( float ) std : : min ( vipc_dropped_frames , 10U ) ) ;
if ( run_count < 10 ) frames_dropped = 0 ; // let frame drops warm up
if ( run_count < 10 ) { // let frame drops warm up
frame_dropped_filter . reset ( 0 ) ;
frames_dropped = 0. ;
}
float frame_drop_ratio = frames_dropped / ( 1 + frames_dropped ) ;
float frame_drop_ratio = frames_dropped / ( 1 + frames_dropped ) ;
model_publish ( pm , extra . frame_id , frame_id , frame_drop_ratio , model_buf , extra . timestamp_eof , model_execution_time ,
model_publish ( pm , extra . frame_id , frame_id , frame_drop_ratio , model_buf , extra . timestamp_eof , model_execution_time ,