|
|
@ -105,6 +105,11 @@ class CarController(): |
|
|
|
self.last_pump_ts = 0. |
|
|
|
self.last_pump_ts = 0. |
|
|
|
self.packer = CANPacker(dbc_name) |
|
|
|
self.packer = CANPacker(dbc_name) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.accel = 0 |
|
|
|
|
|
|
|
self.speed = 0 |
|
|
|
|
|
|
|
self.gas = 0 |
|
|
|
|
|
|
|
self.brake = 0 |
|
|
|
|
|
|
|
|
|
|
|
self.params = CarControllerParams(CP) |
|
|
|
self.params = CarControllerParams(CP) |
|
|
|
|
|
|
|
|
|
|
|
def update(self, enabled, active, CS, frame, actuators, pcm_cancel_cmd, |
|
|
|
def update(self, enabled, active, CS, frame, actuators, pcm_cancel_cmd, |
|
|
@ -211,10 +216,9 @@ class CarController(): |
|
|
|
ts = frame * DT_CTRL |
|
|
|
ts = frame * DT_CTRL |
|
|
|
|
|
|
|
|
|
|
|
if CS.CP.carFingerprint in HONDA_BOSCH: |
|
|
|
if CS.CP.carFingerprint in HONDA_BOSCH: |
|
|
|
accel = clip(accel, P.BOSCH_ACCEL_MIN, P.BOSCH_ACCEL_MAX) |
|
|
|
self.accel = clip(accel, P.BOSCH_ACCEL_MIN, P.BOSCH_ACCEL_MAX) |
|
|
|
bosch_gas = interp(accel, P.BOSCH_GAS_LOOKUP_BP, P.BOSCH_GAS_LOOKUP_V) |
|
|
|
self.gas = interp(accel, P.BOSCH_GAS_LOOKUP_BP, P.BOSCH_GAS_LOOKUP_V) |
|
|
|
can_sends.extend(hondacan.create_acc_commands(self.packer, enabled, active, accel, bosch_gas, idx, stopping, starting, CS.CP.carFingerprint)) |
|
|
|
can_sends.extend(hondacan.create_acc_commands(self.packer, enabled, active, accel, self.gas, idx, stopping, starting, CS.CP.carFingerprint)) |
|
|
|
|
|
|
|
|
|
|
|
else: |
|
|
|
else: |
|
|
|
apply_brake = clip(self.brake_last - wind_brake, 0.0, 1.0) |
|
|
|
apply_brake = clip(self.brake_last - wind_brake, 0.0, 1.0) |
|
|
|
apply_brake = int(clip(apply_brake * P.NIDEC_BRAKE_MAX, 0, P.NIDEC_BRAKE_MAX - 1)) |
|
|
|
apply_brake = int(clip(apply_brake * P.NIDEC_BRAKE_MAX, 0, P.NIDEC_BRAKE_MAX - 1)) |
|
|
@ -224,6 +228,7 @@ class CarController(): |
|
|
|
can_sends.append(hondacan.create_brake_command(self.packer, apply_brake, pump_on, |
|
|
|
can_sends.append(hondacan.create_brake_command(self.packer, apply_brake, pump_on, |
|
|
|
pcm_override, pcm_cancel_cmd, fcw_display, idx, CS.CP.carFingerprint, CS.stock_brake)) |
|
|
|
pcm_override, pcm_cancel_cmd, fcw_display, idx, CS.CP.carFingerprint, CS.stock_brake)) |
|
|
|
self.apply_brake_last = apply_brake |
|
|
|
self.apply_brake_last = apply_brake |
|
|
|
|
|
|
|
self.brake = apply_brake / P.NIDEC_BRAKE_MAX |
|
|
|
|
|
|
|
|
|
|
|
if CS.CP.enableGasInterceptor: |
|
|
|
if CS.CP.enableGasInterceptor: |
|
|
|
# way too aggressive at low speed without this |
|
|
|
# way too aggressive at low speed without this |
|
|
@ -233,17 +238,28 @@ class CarController(): |
|
|
|
# Sending non-zero gas when OP is not enabled will cause the PCM not to respond to throttle as expected |
|
|
|
# Sending non-zero gas when OP is not enabled will cause the PCM not to respond to throttle as expected |
|
|
|
# when you do enable. |
|
|
|
# when you do enable. |
|
|
|
if active: |
|
|
|
if active: |
|
|
|
apply_gas = clip(gas_mult * (gas - brake + wind_brake*3/4), 0., 1.) |
|
|
|
self.gas = clip(gas_mult * (gas - brake + wind_brake*3/4), 0., 1.) |
|
|
|
else: |
|
|
|
else: |
|
|
|
apply_gas = 0.0 |
|
|
|
self.gas = 0.0 |
|
|
|
can_sends.append(create_gas_interceptor_command(self.packer, apply_gas, idx)) |
|
|
|
can_sends.append(create_gas_interceptor_command(self.packer, self.gas, idx)) |
|
|
|
|
|
|
|
|
|
|
|
hud = HUDData(int(pcm_accel), int(round(hud_v_cruise)), hud_car, |
|
|
|
|
|
|
|
hud_lanes, fcw_display, acc_alert, steer_required) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Send dashboard UI commands. |
|
|
|
# Send dashboard UI commands. |
|
|
|
if (frame % 10) == 0: |
|
|
|
if (frame % 10) == 0: |
|
|
|
idx = (frame//10) % 4 |
|
|
|
idx = (frame//10) % 4 |
|
|
|
|
|
|
|
hud = HUDData(int(pcm_accel), int(round(hud_v_cruise)), hud_car, |
|
|
|
|
|
|
|
hud_lanes, fcw_display, acc_alert, steer_required) |
|
|
|
can_sends.extend(hondacan.create_ui_commands(self.packer, CS.CP, pcm_speed, hud, CS.is_metric, idx, CS.stock_hud)) |
|
|
|
can_sends.extend(hondacan.create_ui_commands(self.packer, CS.CP, pcm_speed, hud, CS.is_metric, idx, CS.stock_hud)) |
|
|
|
|
|
|
|
|
|
|
|
return can_sends |
|
|
|
if (CS.CP.openpilotLongitudinalControl) and (CS.CP.carFingerprint not in HONDA_BOSCH): |
|
|
|
|
|
|
|
self.speed = pcm_speed |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if not CS.CP.enableGasInterceptor: |
|
|
|
|
|
|
|
self.gas = pcm_accel / 0xc6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
new_actuators = actuators.copy() |
|
|
|
|
|
|
|
new_actuators.speed = self.speed |
|
|
|
|
|
|
|
new_actuators.accel = self.accel |
|
|
|
|
|
|
|
new_actuators.gas = self.gas |
|
|
|
|
|
|
|
new_actuators.brake = self.brake |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return new_actuators, can_sends |
|
|
|