@ -61,7 +61,7 @@ mat3 update_calibration(Eigen::Vector3d device_from_calib_euler, bool wide_camer 
			
		
	
		
			
				
					void  run_model ( ModelState  & model ,  VisionIpcClient  & vipc_client_main ,  VisionIpcClient  & vipc_client_extra ,  bool  main_wide_camera ,  bool  use_extra_client )  {  
			
		
	
		
			
				
					  // messaging
   
			
		
	
		
			
				
					  PubMaster  pm ( { " modelV2 " ,  " cameraOdometry " } ) ;   
			
		
	
		
			
				
					  SubMaster  sm ( { " lateralPlan " ,  " roadCameraState " ,  " liveCalibration " ,  " driverMonitoringState " } ) ;   
			
		
	
		
			
				
					  SubMaster  sm ( { " lateralPlan " ,  " roadCameraState " ,  " liveCalibration " ,  " driverMonitoringState " ,  " mapRenderState " ,  " navInstruction " ,  " navModel " } ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  // setup filter to track dropped frames
   
			
		
	
		
			
				
					  FirstOrderFilter  frame_dropped_filter ( 0. ,  10. ,  1.  /  MODEL_FREQ ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -72,6 +72,7 @@ void run_model(ModelState &model, VisionIpcClient &vipc_client_main, VisionIpcCl 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  mat3  model_transform_main  =  { } ;   
			
		
	
		
			
				
					  mat3  model_transform_extra  =  { } ;   
			
		
	
		
			
				
					  bool  nav_enabled  =  false ;   
			
		
	
		
			
				
					  bool  live_calib_seen  =  false ;   
			
		
	
		
			
				
					  float  driving_style [ DRIVING_STYLE_LEN ]  =  { 1 ,  0 ,  0 ,  0 ,  0 ,  1 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 } ;   
			
		
	
		
			
				
					  float  nav_features [ NAV_FEATURE_LEN ]  =  { 0 } ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -137,6 +138,25 @@ void run_model(ModelState &model, VisionIpcClient &vipc_client_main, VisionIpcCl 
			
		
	
		
			
				
					      vec_desire [ desire ]  =  1.0 ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Enable/disable nav features
   
			
		
	
		
			
				
					    double  tsm  =  ( float ) ( nanos_since_boot ( )  -  sm [ " mapRenderState " ] . getMapRenderState ( ) . getLocationMonoTime ( ) )  /  1e6 ;   
			
		
	
		
			
				
					    bool  route_valid  =  sm [ " navInstruction " ] . getValid ( )  & &  ( tsm  <  1000 ) ;   
			
		
	
		
			
				
					    bool  render_valid  =  sm [ " mapRenderState " ] . getValid ( )  & &  ( sm [ " navModel " ] . getNavModel ( ) . getFrameId ( )  = =  sm [ " mapRenderState " ] . getMapRenderState ( ) . getFrameId ( ) ) ;   
			
		
	
		
			
				
					    bool  nav_valid  =  route_valid  & &  render_valid ;   
			
		
	
		
			
				
					    if  ( ! nav_enabled  & &  nav_valid )  {   
			
		
	
		
			
				
					      nav_enabled  =  true ;   
			
		
	
		
			
				
					    }  else  if  ( nav_enabled  & &  ! nav_valid )  {   
			
		
	
		
			
				
					      memset ( nav_features ,  0 ,  sizeof ( float ) * NAV_FEATURE_LEN ) ;   
			
		
	
		
			
				
					      nav_enabled  =  false ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( nav_enabled  & &  sm . updated ( " navModel " ) )  {   
			
		
	
		
			
				
					      auto  nav_model_features  =  sm [ " navModel " ] . getNavModel ( ) . getFeatures ( ) ;   
			
		
	
		
			
				
					      for  ( int  i = 0 ;  i < NAV_FEATURE_LEN ;  i + + )  {   
			
		
	
		
			
				
					        nav_features [ i ]  =  nav_model_features [ i ] ;   
			
		
	
		
			
				
					      }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // tracked dropped frames
   
			
		
	
		
			
				
					    uint32_t  vipc_dropped_frames  =  meta_main . frame_id  -  last_vipc_frame_id  -  1 ;   
			
		
	
		
			
				
					    float  frames_dropped  =  frame_dropped_filter . update ( ( float ) std : : min ( vipc_dropped_frames ,  10U ) ) ;