OPGM - QOL tweaks - lower Volt enable speed - EV gas/brake lookup tables
Co-Authored-By: Eric Brown <13560103+nworb-cire@users.noreply.github.com>
This commit is contained in:
parent
6101fd0eb2
commit
f1a2a6474c
@ -6,7 +6,7 @@ from openpilot.common.realtime import DT_CTRL
|
|||||||
from opendbc.can.packer import CANPacker
|
from opendbc.can.packer import CANPacker
|
||||||
from openpilot.selfdrive.car import apply_driver_steer_torque_limits, create_gas_interceptor_command
|
from openpilot.selfdrive.car import apply_driver_steer_torque_limits, create_gas_interceptor_command
|
||||||
from openpilot.selfdrive.car.gm import gmcan
|
from openpilot.selfdrive.car.gm import gmcan
|
||||||
from openpilot.selfdrive.car.gm.values import DBC, CanBus, CarControllerParams, CruiseButtons, GMFlags, CC_ONLY_CAR, SDGM_CAR
|
from openpilot.selfdrive.car.gm.values import DBC, CanBus, CarControllerParams, CruiseButtons, GMFlags, CC_ONLY_CAR, SDGM_CAR, EV_CAR
|
||||||
from openpilot.selfdrive.car.interfaces import CarControllerBase
|
from openpilot.selfdrive.car.interfaces import CarControllerBase
|
||||||
|
|
||||||
VisualAlert = car.CarControl.HUDControl.VisualAlert
|
VisualAlert = car.CarControl.HUDControl.VisualAlert
|
||||||
@ -122,6 +122,11 @@ class CarController(CarControllerBase):
|
|||||||
self.apply_brake = int(min(-100 * self.CP.stopAccel, self.params.MAX_BRAKE))
|
self.apply_brake = int(min(-100 * self.CP.stopAccel, self.params.MAX_BRAKE))
|
||||||
else:
|
else:
|
||||||
# Normal operation
|
# Normal operation
|
||||||
|
if self.CP.carFingerprint in EV_CAR:
|
||||||
|
self.params.update_ev_gas_brake_threshold(CS.out.vEgo)
|
||||||
|
self.apply_gas = int(round(interp(actuators.accel, self.params.EV_GAS_LOOKUP_BP, self.params.GAS_LOOKUP_V)))
|
||||||
|
self.apply_brake = int(round(interp(actuators.accel, self.params.EV_BRAKE_LOOKUP_BP, self.params.BRAKE_LOOKUP_V)))
|
||||||
|
else:
|
||||||
self.apply_gas = int(round(interp(actuators.accel, self.params.GAS_LOOKUP_BP, self.params.GAS_LOOKUP_V)))
|
self.apply_gas = int(round(interp(actuators.accel, self.params.GAS_LOOKUP_BP, self.params.GAS_LOOKUP_V)))
|
||||||
self.apply_brake = int(round(interp(actuators.accel, self.params.BRAKE_LOOKUP_BP, self.params.BRAKE_LOOKUP_V)))
|
self.apply_brake = int(round(interp(actuators.accel, self.params.BRAKE_LOOKUP_BP, self.params.BRAKE_LOOKUP_V)))
|
||||||
# Don't allow any gas above inactive regen while stopping
|
# Don't allow any gas above inactive regen while stopping
|
||||||
|
@ -171,6 +171,7 @@ class CarInterface(CarInterfaceBase):
|
|||||||
ret.lateralTuning.pid.kiV = [0.]
|
ret.lateralTuning.pid.kiV = [0.]
|
||||||
ret.lateralTuning.pid.kf = 1. # get_steer_feedforward_volt()
|
ret.lateralTuning.pid.kf = 1. # get_steer_feedforward_volt()
|
||||||
ret.steerActuatorDelay = 0.2
|
ret.steerActuatorDelay = 0.2
|
||||||
|
ret.minEnableSpeed = -1.
|
||||||
|
|
||||||
elif candidate == CAR.ACADIA:
|
elif candidate == CAR.ACADIA:
|
||||||
ret.minEnableSpeed = -1. # engage speed is decided by pcm
|
ret.minEnableSpeed = -1. # engage speed is decided by pcm
|
||||||
|
@ -2,6 +2,7 @@ from dataclasses import dataclass, field
|
|||||||
from enum import Enum, IntFlag
|
from enum import Enum, IntFlag
|
||||||
|
|
||||||
from cereal import car
|
from cereal import car
|
||||||
|
from openpilot.common.numpy_fast import interp
|
||||||
from openpilot.selfdrive.car import dbc_dict, PlatformConfig, DbcDict, Platforms, CarSpecs
|
from openpilot.selfdrive.car import dbc_dict, PlatformConfig, DbcDict, Platforms, CarSpecs
|
||||||
from openpilot.selfdrive.car.docs_definitions import CarFootnote, CarHarness, CarDocs, CarParts, Column
|
from openpilot.selfdrive.car.docs_definitions import CarFootnote, CarHarness, CarDocs, CarParts, Column
|
||||||
from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries
|
from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries
|
||||||
@ -67,6 +68,17 @@ class CarControllerParams:
|
|||||||
self.BRAKE_LOOKUP_BP = [self.ACCEL_MIN, max_regen_acceleration]
|
self.BRAKE_LOOKUP_BP = [self.ACCEL_MIN, max_regen_acceleration]
|
||||||
self.BRAKE_LOOKUP_V = [self.MAX_BRAKE, 0.]
|
self.BRAKE_LOOKUP_V = [self.MAX_BRAKE, 0.]
|
||||||
|
|
||||||
|
# determined by letting Volt regen to a stop in L gear from 89mph,
|
||||||
|
# and by letting off gas and allowing car to creep, for determining
|
||||||
|
# the positive threshold values at very low speed
|
||||||
|
EV_GAS_BRAKE_THRESHOLD_BP = [1.29, 1.52, 1.55, 1.6, 1.7, 1.8, 2.0, 2.2, 2.5, 5.52, 9.6, 20.5, 23.5, 35.0] # [m/s]
|
||||||
|
EV_GAS_BRAKE_THRESHOLD_V = [0.0, -0.14, -0.16, -0.18, -0.215, -0.255, -0.32, -0.41, -0.5, -0.72, -0.895, -1.125, -1.145, -1.16] # [m/s^s]
|
||||||
|
|
||||||
|
def update_ev_gas_brake_threshold(self, v_ego):
|
||||||
|
gas_brake_threshold = interp(v_ego, self.EV_GAS_BRAKE_THRESHOLD_BP, self.EV_GAS_BRAKE_THRESHOLD_V)
|
||||||
|
self.EV_GAS_LOOKUP_BP = [gas_brake_threshold, max(0., gas_brake_threshold), self.ACCEL_MAX]
|
||||||
|
self.EV_BRAKE_LOOKUP_BP = [self.ACCEL_MIN, gas_brake_threshold]
|
||||||
|
|
||||||
|
|
||||||
class Footnote(Enum):
|
class Footnote(Enum):
|
||||||
OBD_II = CarFootnote(
|
OBD_II = CarFootnote(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user