|  |  | @ -6,6 +6,7 @@ from cereal import log | 
			
		
	
		
		
			
				
					
					|  |  |  | import cereal.messaging as messaging |  |  |  | import cereal.messaging as messaging | 
			
		
	
		
		
			
				
					
					|  |  |  | from common.realtime import Ratekeeper, DT_MDL |  |  |  | from common.realtime import Ratekeeper, DT_MDL | 
			
		
	
		
		
			
				
					
					|  |  |  | from selfdrive.controls.lib.longcontrol import LongCtrlState |  |  |  | from selfdrive.controls.lib.longcontrol import LongCtrlState | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | from selfdrive.controls.lib.longitudinal_planner import Planner | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | class Plant(): |  |  |  | class Plant(): | 
			
		
	
	
		
		
			
				
					|  |  | @ -39,19 +40,10 @@ class Plant(): | 
			
		
	
		
		
			
				
					
					|  |  |  |     time.sleep(1) |  |  |  |     time.sleep(1) | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.sm = messaging.SubMaster(['longitudinalPlan']) |  |  |  |     self.sm = messaging.SubMaster(['longitudinalPlan']) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # make sure planner has time to be fully initialized |  |  |  |     from selfdrive.car.honda.values import CAR | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     # TODO planner should just be explicitly initialized |  |  |  |     from selfdrive.car.honda.interface import CarInterface | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     for i in range(10000): |  |  |  |     self.CP = CarInterface.get_params(CAR.CIVIC) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       assert i < 10000 |  |  |  |     self.planner = Planner(self.CP, init_v=self.speed) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       radar = messaging.new_message('radarState') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       control = messaging.new_message('controlsState') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       car_state = messaging.new_message('carState') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       control.controlsState.longControlState = LongCtrlState.pid |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       control.controlsState.vCruise = speed*3.6 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       car_state.carState.vEgo = self.speed |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       Plant.radar.send(radar.to_bytes()) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       Plant.controls_state.send(control.to_bytes()) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       Plant.car_state.send(car_state.to_bytes()) |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   def current_time(self): |  |  |  |   def current_time(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |     return float(self.rk.frame) / self.rate |  |  |  |     return float(self.rk.frame) / self.rate | 
			
		
	
	
		
		
			
				
					|  |  | @ -97,22 +89,17 @@ class Plant(): | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     control.controlsState.longControlState = LongCtrlState.pid |  |  |  |     control.controlsState.longControlState = LongCtrlState.pid | 
			
		
	
		
		
			
				
					
					|  |  |  |     control.controlsState.vCruise = 130 |  |  |  |     control.controlsState.vCruise = 130 | 
			
		
	
		
		
			
				
					
					|  |  |  |     car_state.carState.vEgo = self.speed |  |  |  |     car_state.carState.vEgo = float(self.speed) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     Plant.radar.send(radar.to_bytes()) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     Plant.controls_state.send(control.to_bytes()) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     Plant.car_state.send(car_state.to_bytes()) |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # ******** get controlsState messages for plotting *** |  |  |  |     # ******** get controlsState messages for plotting *** | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.sm.update() |  |  |  |     sm = {'radarState': radar.radarState, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     while True: |  |  |  |           'carState': car_state.carState, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       time.sleep(0.01) |  |  |  |           'controlsState': control.controlsState} | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       if self.sm.updated['longitudinalPlan']: |  |  |  |     self.planner.update(sm, self.CP) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         plan = self.sm['longitudinalPlan'] |  |  |  |     self.speed = self.planner.v_desired | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         self.speed = plan.speeds[5] |  |  |  |     self.acceleration = self.planner.a_desired | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         self.acceleration = plan.accels[5] |  |  |  |     fcw = self.planner.fcw | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         fcw = plan.fcw |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         break |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     self.distance_lead = self.distance_lead + v_lead * self.ts |  |  |  |     self.distance_lead = self.distance_lead + v_lead * self.ts | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # ******** run the car ******** |  |  |  |     # ******** run the car ******** | 
			
		
	
	
		
		
			
				
					|  |  | 
 |