You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							85 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							85 lines
						
					
					
						
							2.9 KiB
						
					
					
				#!/usr/bin/env python
 | 
						|
import zmq
 | 
						|
from collections import defaultdict
 | 
						|
 | 
						|
from cereal import car
 | 
						|
from common.params import Params
 | 
						|
from common.realtime import sec_since_boot
 | 
						|
from selfdrive.swaglog import cloudlog
 | 
						|
from selfdrive.services import service_list
 | 
						|
from selfdrive.controls.lib.planner import Planner
 | 
						|
from selfdrive.controls.lib.vehicle_model import VehicleModel
 | 
						|
from selfdrive.controls.lib.pathplanner import PathPlanner
 | 
						|
import selfdrive.messaging as messaging
 | 
						|
 | 
						|
 | 
						|
def plannerd_thread():
 | 
						|
  context = zmq.Context()
 | 
						|
  params = Params()
 | 
						|
 | 
						|
  # Get FCW toggle from settings
 | 
						|
  fcw_enabled = params.get("IsFcwEnabled") == "1"
 | 
						|
 | 
						|
  cloudlog.info("plannerd is waiting for CarParams")
 | 
						|
  CP = car.CarParams.from_bytes(Params().get("CarParams", block=True))
 | 
						|
  cloudlog.info("plannerd got CarParams: %s", CP.carName)
 | 
						|
 | 
						|
  PL = Planner(CP, fcw_enabled)
 | 
						|
  PP = PathPlanner(CP)
 | 
						|
 | 
						|
  VM = VehicleModel(CP)
 | 
						|
 | 
						|
  poller = zmq.Poller()
 | 
						|
  car_state_sock = messaging.sub_sock(context, service_list['carState'].port, conflate=True, poller=poller)
 | 
						|
  live100_sock = messaging.sub_sock(context, service_list['live100'].port, conflate=True, poller=poller)
 | 
						|
  live20_sock = messaging.sub_sock(context, service_list['live20'].port, conflate=True, poller=poller)
 | 
						|
  model_sock = messaging.sub_sock(context, service_list['model'].port, conflate=True, poller=poller)
 | 
						|
  live_map_data_sock = messaging.sub_sock(context, service_list['liveMapData'].port, conflate=True, poller=poller)
 | 
						|
  live_parameters_sock = messaging.sub_sock(context, service_list['liveParameters'].port, conflate=True, poller=poller)
 | 
						|
 | 
						|
  car_state = messaging.new_message()
 | 
						|
  car_state.init('carState')
 | 
						|
  live100 = messaging.new_message()
 | 
						|
  live100.init('live100')
 | 
						|
  model = messaging.new_message()
 | 
						|
  model.init('model')
 | 
						|
  live20 = messaging.new_message()
 | 
						|
  live20.init('live20')
 | 
						|
  live_map_data = messaging.new_message()
 | 
						|
  live_map_data.init('liveMapData')
 | 
						|
 | 
						|
  live_parameters = messaging.new_message()
 | 
						|
  live_parameters.init('liveParameters')
 | 
						|
  live_parameters.liveParameters.valid = True
 | 
						|
  live_parameters.liveParameters.steerRatio = CP.steerRatio
 | 
						|
  live_parameters.liveParameters.stiffnessFactor = 1.0
 | 
						|
 | 
						|
  rcv_times = defaultdict(int)
 | 
						|
 | 
						|
  while True:
 | 
						|
    for socket, event in poller.poll():
 | 
						|
      msg = messaging.recv_one(socket)
 | 
						|
      rcv_times[msg.which()] = sec_since_boot()
 | 
						|
 | 
						|
      if socket is live100_sock:
 | 
						|
        live100 = msg
 | 
						|
      elif socket is car_state_sock:
 | 
						|
        car_state = msg
 | 
						|
      elif socket is live_parameters_sock:
 | 
						|
        live_parameters = msg
 | 
						|
      elif socket is model_sock:
 | 
						|
        model = msg
 | 
						|
        PP.update(rcv_times, CP, VM, car_state, model, live100, live_parameters)
 | 
						|
      elif socket is live_map_data_sock:
 | 
						|
        live_map_data = msg
 | 
						|
      elif socket is live20_sock:
 | 
						|
        live20 = msg
 | 
						|
        PL.update(rcv_times, car_state, CP, VM, PP, live20, live100, model, live_map_data)
 | 
						|
 | 
						|
 | 
						|
def main(gctx=None):
 | 
						|
  plannerd_thread()
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
  main()
 | 
						|
 |