Dont run plannerd for long tests (#22260)

pull/22262/head
HaraldSchafer 4 years ago committed by GitHub
parent 2c04176b5f
commit f0be9a57ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      selfdrive/controls/lib/longitudinal_planner.py
  2. 4
      selfdrive/test/longitudinal_maneuvers/maneuver.py
  3. 39
      selfdrive/test/longitudinal_maneuvers/plant.py
  4. 15
      selfdrive/test/longitudinal_maneuvers/test_longitudinal.py

@ -45,7 +45,7 @@ def limit_accel_in_turns(v_ego, angle_steers, a_target, CP):
class Planner(): class Planner():
def __init__(self, CP): def __init__(self, CP, init_v=0.0, init_a=0.0):
self.CP = CP self.CP = CP
self.mpcs = {} self.mpcs = {}
self.mpcs['lead0'] = LeadMpc(0) self.mpcs['lead0'] = LeadMpc(0)
@ -55,8 +55,8 @@ class Planner():
self.fcw = False self.fcw = False
self.fcw_checker = FCWChecker() self.fcw_checker = FCWChecker()
self.v_desired = 0.0 self.v_desired = init_v
self.a_desired = 0.0 self.a_desired = init_a
self.longitudinalPlanSource = 'cruise' self.longitudinalPlanSource = 'cruise'
self.alpha = np.exp(-DT_MDL/2.0) self.alpha = np.exp(-DT_MDL/2.0)
self.lead_0 = log.ModelDataV2.LeadDataV3.new_message() self.lead_0 = log.ModelDataV2.LeadDataV3.new_message()

@ -28,6 +28,7 @@ class Maneuver():
) )
valid = True valid = True
logs = []
while plant.current_time() < self.duration: while plant.current_time() < self.duration:
speed_lead = np.interp(plant.current_time(), self.speed_lead_breakpoints, self.speed_lead_values) speed_lead = np.interp(plant.current_time(), self.speed_lead_breakpoints, self.speed_lead_values)
log = plant.step(speed_lead) log = plant.step(speed_lead)
@ -36,10 +37,11 @@ class Maneuver():
v_rel = speed_lead - log['speed'] if self.lead_relevancy else 0. v_rel = speed_lead - log['speed'] if self.lead_relevancy else 0.
log['d_rel'] = d_rel log['d_rel'] = d_rel
log['v_rel'] = v_rel log['v_rel'] = v_rel
logs.append(np.array([plant.current_time(), log['distance'], log['distance_lead'], log['speed'], speed_lead, log['acceleration']]))
if d_rel < 1.0: if d_rel < 1.0:
print("Crashed!!!!") print("Crashed!!!!")
valid = False valid = False
print("maneuver end", valid) print("maneuver end", valid)
return valid return valid, np.array(logs)

@ -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 ********

@ -4,14 +4,6 @@ import unittest
from common.params import Params from common.params import Params
from selfdrive.test.longitudinal_maneuvers.maneuver import Maneuver from selfdrive.test.longitudinal_maneuvers.maneuver import Maneuver
from selfdrive.manager.process_config import managed_processes
def put_default_car_params():
from selfdrive.car.honda.values import CAR
from selfdrive.car.honda.interface import CarInterface
cp = CarInterface.get_params(CAR.CIVIC)
Params().put("CarParams", cp.to_bytes())
# TODO: make new FCW tests # TODO: make new FCW tests
@ -124,12 +116,7 @@ def run_maneuver_worker(k):
def run(self): def run(self):
man = maneuvers[k] man = maneuvers[k]
print(man.title) print(man.title)
put_default_car_params() valid, _ = man.evaluate()
managed_processes['plannerd'].start()
valid = man.evaluate()
managed_processes['plannerd'].stop()
self.assertTrue(valid) self.assertTrue(valid)
return run return run

Loading…
Cancel
Save