      pm.send('lateralPlan', plan_send)
  
      if LOG_MPC:
        dat = messaging.new_message('liveMpc')
        dat.liveMpc.x = list(self.mpc_solution[0].x)
        dat.liveMpc.y = list(self.mpc_solution[0].y)
        dat.liveMpc.psi = list(self.mpc_solution[0].psi)
        dat.liveMpc.tire_angle = list(self.mpc_solution[0].tire_angle)
        dat.liveMpc.cost = self.mpc_solution[0].cost
        pm.send('liveMpc', dat)
 
</s> remove     ret.lateralTuning.pid.kf = 0.00006
    ret.lateralTuning.pid.kiBP, ret.lateralTuning.pid.kpBP = [[0.0], [0.0]]
    ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.01], [0.005]]
    ret.steerMaxBP = [0.]  # m/s
    ret.steerMaxV = [1.]
 </s> add  </s> remove     if self.CP.lateralTuning.which() == 'pid':
 </s> add     if self.CP.steerControlType == car.CarParams.SteerControlType.angle:
      controlsState.lateralControlState.angleState = lac_log
    elif self.CP.lateralTuning.which() == 'pid': </s> remove   sm['liveParameters'].valid = True
  sm['liveParameters'].sensorValid = True
  sm['liveParameters'].steerRatio = CP.steerRatio
  sm['liveParameters'].stiffnessFactor = 1.0

 </s> add  </s> remove       self.angle_steers_des = lat_plan.steeringAngleDeg # get from MPC/LateralPlanner

 </s> add  </s> remove       solution->tire_angle_rate[i] = acadoVariables.u[i];
 </s> add       solution->curvature_rate[i] = acadoVariables.u[i];
      dat.liveMpc.x = list(self.mpc_solution.x)
      dat.liveMpc.y = list(self.mpc_solution.y)
      dat.liveMpc.psi = list(self.mpc_solution.psi)
      dat.liveMpc.curvature = list(self.mpc_solution.curvature)
      dat.liveMpc.cost = self.mpc_solution.cost
      pm.send('lateralPlan', plan_send)
  
      if LOG_MPC:
        dat = messaging.new_message('liveMpc')
      dat.liveMpc.x = list(self.mpc_solution.x)
      dat.liveMpc.y = list(self.mpc_solution.y)
      dat.liveMpc.psi = list(self.mpc_solution.psi)
      dat.liveMpc.curvature = list(self.mpc_solution.curvature)
      dat.liveMpc.cost = self.mpc_solution.cost
      dat.liveMpc.x = list(self.mpc_solution.x)
      dat.liveMpc.y = list(self.mpc_solution.y)
      dat.liveMpc.psi = list(self.mpc_solution.psi)
      dat.liveMpc.curvature = list(self.mpc_solution.curvature)
      dat.liveMpc.cost = self.mpc_solution.cost
      dat.liveMpc.x = list(self.mpc_solution.x)
      dat.liveMpc.y = list(self.mpc_solution.y)
      dat.liveMpc.psi = list(self.mpc_solution.psi)
      dat.liveMpc.curvature = list(self.mpc_solution.curvature)
      dat.liveMpc.cost = self.mpc_solution.cost
      dat.liveMpc.x = list(self.mpc_solution.x)
      dat.liveMpc.y = list(self.mpc_solution.y)
      dat.liveMpc.psi = list(self.mpc_solution.psi)
      dat.liveMpc.curvature = list(self.mpc_solution.curvature)
      dat.liveMpc.cost = self.mpc_solution.cost
      dat.liveMpc.x = list(self.mpc_solution.x)
      dat.liveMpc.y = list(self.mpc_solution.y)
      dat.liveMpc.psi = list(self.mpc_solution.psi)
      dat.liveMpc.curvature = list(self.mpc_solution.curvature)
      dat.liveMpc.cost = self.mpc_solution.cost
        pm.send('liveMpc', dat)
keep keep keep keep replace replace replace replace replace keep
 LateralPlanner should only compute curvature (#20289)

* get curvature from planner

* no need to check active

* remove that

* remove self

* liveParams not needed

* cast

* fix test bug

* fixes

* fix ui.py

* fix radians

* update refs

* update refs

* bump cereal

* bump cereal

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com> 
selfdrive/controls/lib/lateral_planner.py