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