#!/usr/bin/env python
import gc
import zmq
from collections import defaultdict
from cereal import car
from common . params import Params
from common . realtime import sec_since_boot , set_realtime_priority
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 ( ) :
gc . disable ( )
# start the loop
set_realtime_priority ( 2 )
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 )
controls_state_sock = messaging . sub_sock ( context , service_list [ ' controlsState ' ] . port , conflate = True , poller = poller )
radar_state_sock = messaging . sub_sock ( context , service_list [ ' radarState ' ] . port , conflate = True , poller = poller )
model_sock = messaging . sub_sock ( context , service_list [ ' model ' ] . port , conflate = True , poller = poller )
live_parameters_sock = messaging . sub_sock ( context , service_list [ ' liveParameters ' ] . port , conflate = True , poller = poller )
# live_map_data_sock = messaging.sub_sock(context, service_list['liveMapData'].port, conflate=True, poller=poller)
car_state = messaging . new_message ( )
car_state . init ( ' carState ' )
controls_state = messaging . new_message ( )
controls_state . init ( ' controlsState ' )
model = messaging . new_message ( )
model . init ( ' model ' )
radar_state = messaging . new_message ( )
radar_state . init ( ' radarState ' )
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 . sensorValid = 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 controls_state_sock :
controls_state = 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 , controls_state , live_parameters )
elif socket is radar_state_sock :
radar_state = msg
PL . update ( rcv_times , car_state , CP , VM , PP , radar_state , controls_state , model , live_map_data )
# elif socket is live_map_data_sock:
# live_map_data = msg
def main ( gctx = None ) :
plannerd_thread ( )
if __name__ == " __main__ " :
main ( )