|  |  | @ -208,23 +208,17 @@ class RadarD: | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.ready = False |  |  |  |     self.ready = False | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   def update(self, sm: messaging.SubMaster, rr): |  |  |  |   def update(self, sm: messaging.SubMaster, rr: car.RadarData): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     self.ready = sm.seen['modelV2'] |  |  |  |     self.ready = sm.seen['modelV2'] | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.current_time = 1e-9*max(sm.logMonoTime.values()) |  |  |  |     self.current_time = 1e-9*max(sm.logMonoTime.values()) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     radar_points = [] |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     radar_errors = [] |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if rr is not None: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       radar_points = rr.points |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       radar_errors = rr.errors |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if sm.recv_frame['carState'] != self.last_v_ego_frame: |  |  |  |     if sm.recv_frame['carState'] != self.last_v_ego_frame: | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.v_ego = sm['carState'].vEgo |  |  |  |       self.v_ego = sm['carState'].vEgo | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.v_ego_hist.append(self.v_ego) |  |  |  |       self.v_ego_hist.append(self.v_ego) | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.last_v_ego_frame = sm.recv_frame['carState'] |  |  |  |       self.last_v_ego_frame = sm.recv_frame['carState'] | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     ar_pts = {} |  |  |  |     ar_pts = {} | 
			
		
	
		
		
			
				
					
					|  |  |  |     for pt in radar_points: |  |  |  |     for pt in rr.points: | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       ar_pts[pt.trackId] = [pt.dRel, pt.yRel, pt.vRel, pt.measured] |  |  |  |       ar_pts[pt.trackId] = [pt.dRel, pt.yRel, pt.vRel, pt.measured] | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # *** remove missing points from meta data *** |  |  |  |     # *** remove missing points from meta data *** | 
			
		
	
	
		
		
			
				
					|  |  | @ -245,10 +239,10 @@ class RadarD: | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.tracks[ids].update(rpt[0], rpt[1], rpt[2], v_lead, rpt[3]) |  |  |  |       self.tracks[ids].update(rpt[0], rpt[1], rpt[2], v_lead, rpt[3]) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # *** publish radarState *** |  |  |  |     # *** publish radarState *** | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.radar_state_valid = sm.all_checks() and len(radar_errors) == 0 |  |  |  |     self.radar_state_valid = sm.all_checks() and len(rr.errors) == 0 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     self.radar_state = log.RadarState.new_message() |  |  |  |     self.radar_state = log.RadarState.new_message() | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.radar_state.mdMonoTime = sm.logMonoTime['modelV2'] |  |  |  |     self.radar_state.mdMonoTime = sm.logMonoTime['modelV2'] | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.radar_state.radarErrors = list(radar_errors) |  |  |  |     self.radar_state.radarErrors = list(rr.errors) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     self.radar_state.carStateMonoTime = sm.logMonoTime['carState'] |  |  |  |     self.radar_state.carStateMonoTime = sm.logMonoTime['carState'] | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if len(sm['modelV2'].temporalPose.trans): |  |  |  |     if len(sm['modelV2'].temporalPose.trans): | 
			
		
	
	
		
		
			
				
					|  |  | @ -283,7 +277,7 @@ class RadarD: | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # fuses camera and radar data for best lead detection |  |  |  | # fuses camera and radar data for best lead detection | 
			
		
	
		
		
			
				
					
					|  |  |  | def main(): |  |  |  | def main() -> None: | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   config_realtime_process(5, Priority.CTRL_LOW) |  |  |  |   config_realtime_process(5, Priority.CTRL_LOW) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   # wait for stats about the car to come in from controls |  |  |  |   # wait for stats about the car to come in from controls | 
			
		
	
	
		
		
			
				
					|  |  | @ -307,7 +301,7 @@ def main(): | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   while 1: |  |  |  |   while 1: | 
			
		
	
		
		
			
				
					
					|  |  |  |     can_strings = messaging.drain_sock_raw(can_sock, wait_for_one=True) |  |  |  |     can_strings = messaging.drain_sock_raw(can_sock, wait_for_one=True) | 
			
		
	
		
		
			
				
					
					|  |  |  |     rr = RI.update(can_capnp_to_list(can_strings)) |  |  |  |     rr: car.RadarData | None = RI.update(can_capnp_to_list(can_strings)) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     sm.update(0) |  |  |  |     sm.update(0) | 
			
		
	
		
		
			
				
					
					|  |  |  |     if rr is None: |  |  |  |     if rr is None: | 
			
		
	
		
		
			
				
					
					|  |  |  |       continue |  |  |  |       continue | 
			
		
	
	
		
		
			
				
					|  |  | 
 |