mirror of
https://github.com/infiniteCable2/openpilot.git
synced 2026-08-21 08:23:44 +08:00
Hyundai CAN: re-enable auto-enable radar tracks (#945)
* Hyundai CAN: re-enable auto-enable radar tracks * check if radar tracks config bit is already enabled * only show success message if already enabled * test if it would actually skip * 5 bytes only * tested skipping, revert * lint * move to opendbc right after fping * more * lint * bump
This commit is contained in:
@@ -165,10 +165,6 @@ inline static std::unordered_map<std::string, uint32_t> keys = {
|
||||
|
||||
// sunnypilot car specific params
|
||||
{"HyundaiLongitudinalTuning", PERSISTENT},
|
||||
{"HyundaiRadarTracks", PERSISTENT},
|
||||
{"HyundaiRadarTracksConfirmed", PERSISTENT},
|
||||
{"HyundaiRadarTracksPersistent", PERSISTENT},
|
||||
{"HyundaiRadarTracksToggle", PERSISTENT},
|
||||
|
||||
{"DynamicExperimentalControl", PERSISTENT},
|
||||
};
|
||||
|
||||
+1
-1
Submodule opendbc_repo updated: 52d2957b47...c5d42d5493
@@ -274,7 +274,6 @@ class Car:
|
||||
# Initialize CarInterface, once controls are ready
|
||||
# TODO: this can make us miss at least a few cycles when doing an ECU knockout
|
||||
self.CI.init(self.CP, self.CP_SP, *self.can_callbacks)
|
||||
sunnypilot_interfaces.init_interfaces(self.CP, self.CP_SP, self.params, *self.can_callbacks)
|
||||
# signal pandad to switch to car safety mode
|
||||
self.params.put_bool_nonblocking("ControlsReady", True)
|
||||
|
||||
|
||||
@@ -545,7 +545,6 @@ class SelfdriveD(CruiseHelper):
|
||||
self.personality = self.read_personality_param()
|
||||
|
||||
self.mads.read_params()
|
||||
self.car_events_sp.read_params()
|
||||
time.sleep(0.1)
|
||||
|
||||
def run(self):
|
||||
|
||||
@@ -45,18 +45,6 @@ DeveloperPanel::DeveloperPanel(SettingsWindow *parent) : ListWidget(parent) {
|
||||
});
|
||||
addItem(experimentalLongitudinalToggle);
|
||||
|
||||
// TODO-SP: Move to Vehicles panel when ported back
|
||||
hyundaiRadarTracksToggle = new ParamControl(
|
||||
"HyundaiRadarTracksToggle",
|
||||
tr("Hyundai: Enable Radar Tracks"),
|
||||
tr("Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. "
|
||||
"This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance."), "");
|
||||
hyundaiRadarTracksToggle->setConfirmation(true, false);
|
||||
QObject::connect(hyundaiRadarTracksToggle, &ParamControl::toggleFlipped, [=](bool state) {
|
||||
updateToggles(offroad);
|
||||
});
|
||||
addItem(hyundaiRadarTracksToggle);
|
||||
|
||||
enableGithubRunner = new ParamControl("EnableGithubRunner", tr("Enable GitHub runner service"), tr("Enables or disables the github runner service."), "");
|
||||
addItem(enableGithubRunner);
|
||||
|
||||
@@ -96,9 +84,6 @@ void DeveloperPanel::updateToggles(bool _offroad) {
|
||||
capnp::FlatArrayMessageReader cmsg(aligned_buf.align(cp_bytes.data(), cp_bytes.size()));
|
||||
cereal::CarParams::Reader CP = cmsg.getRoot<cereal::CarParams>();
|
||||
|
||||
auto hyundai = CP.getBrand() == "hyundai";
|
||||
auto hyundai_mando_radar = hyundai && (CP.getFlags() & 4096);
|
||||
|
||||
if (!CP.getAlphaLongitudinalAvailable() || is_release) {
|
||||
params.remove("AlphaLongitudinalEnabled");
|
||||
experimentalLongitudinalToggle->setEnabled(false);
|
||||
@@ -112,11 +97,9 @@ void DeveloperPanel::updateToggles(bool _offroad) {
|
||||
experimentalLongitudinalToggle->setVisible(CP.getAlphaLongitudinalAvailable() && !is_release);
|
||||
|
||||
longManeuverToggle->setEnabled(hasLongitudinalControl(CP) && _offroad);
|
||||
hyundaiRadarTracksToggle->setVisible(hyundai_mando_radar && hasLongitudinalControl(CP));
|
||||
} else {
|
||||
longManeuverToggle->setEnabled(false);
|
||||
experimentalLongitudinalToggle->setVisible(false);
|
||||
hyundaiRadarTracksToggle->setVisible(false);
|
||||
}
|
||||
experimentalLongitudinalToggle->refresh();
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ private:
|
||||
ButtonControl* errorLogBtn;
|
||||
ParamControl* longManeuverToggle;
|
||||
ParamControl* experimentalLongitudinalToggle;
|
||||
ParamControl* hyundaiRadarTracksToggle;
|
||||
ParamControl* enableGithubRunner;
|
||||
bool is_release;
|
||||
bool offroad = false;
|
||||
|
||||
@@ -23,12 +23,6 @@ class CarSpecificEventsSP:
|
||||
self.params = params
|
||||
|
||||
self.low_speed_alert = False
|
||||
self.hyundai_radar_tracks = self.params.get_bool("HyundaiRadarTracks")
|
||||
self.hyundai_radar_tracks_confirmed = self.params.get_bool("HyundaiRadarTracksConfirmed")
|
||||
|
||||
def read_params(self):
|
||||
self.hyundai_radar_tracks = self.params.get_bool("HyundaiRadarTracks")
|
||||
self.hyundai_radar_tracks_confirmed = self.params.get_bool("HyundaiRadarTracksConfirmed")
|
||||
|
||||
def update(self, CS: structs.CarState, events: Events):
|
||||
events_sp = EventsSP()
|
||||
@@ -48,8 +42,4 @@ class CarSpecificEventsSP:
|
||||
if self.low_speed_alert:
|
||||
events.add(EventName.belowSteerSpeed)
|
||||
|
||||
if self.CP.brand == 'hyundai':
|
||||
if self.hyundai_radar_tracks and not self.hyundai_radar_tracks_confirmed:
|
||||
events_sp.add(EventNameSP.hyundaiRadarTracksConfirmed)
|
||||
|
||||
return events_sp
|
||||
|
||||
@@ -5,12 +5,8 @@ This file is part of sunnypilot and is licensed under the MIT License.
|
||||
See the LICENSE.md file in the root directory for more details.
|
||||
"""
|
||||
|
||||
from opendbc.car import Bus, structs
|
||||
from opendbc.car.can_definitions import CanRecvCallable, CanSendCallable
|
||||
from opendbc.car.car_helpers import can_fingerprint
|
||||
from opendbc.car import structs
|
||||
from opendbc.car.interfaces import CarInterfaceBase
|
||||
from opendbc.car.hyundai.radar_interface import RADAR_START_ADDR
|
||||
from opendbc.car.hyundai.values import HyundaiFlags, DBC as HYUNDAI_DBC
|
||||
from opendbc.sunnypilot.car.hyundai.longitudinal.helpers import LongitudinalTuningType
|
||||
from opendbc.sunnypilot.car.hyundai.values import HyundaiFlagsSP
|
||||
from openpilot.common.params import Params
|
||||
@@ -26,6 +22,7 @@ def log_fingerprint(CP: structs.CarParams) -> None:
|
||||
else:
|
||||
sentry.capture_fingerprint(CP.carFingerprint, CP.brand)
|
||||
|
||||
|
||||
def _initialize_custom_longitudinal_tuning(CI: CarInterfaceBase, CP: structs.CarParams, CP_SP: structs.CarParamsSP,
|
||||
params: Params = None) -> None:
|
||||
if params is None:
|
||||
@@ -63,47 +60,9 @@ def _initialize_neural_network_lateral_control(CI: CarInterfaceBase, CP: structs
|
||||
CP_SP.neuralNetworkLateralControl.fuzzyFingerprint = not exact_match
|
||||
|
||||
|
||||
def _initialize_radar_tracks(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None) -> None:
|
||||
if params is None:
|
||||
params = Params()
|
||||
|
||||
if CP.brand == 'hyundai':
|
||||
if CP.flags & HyundaiFlags.MANDO_RADAR and CP.radarUnavailable:
|
||||
# Having this automatic without a toggle causes a weird process replay diff because
|
||||
# somehow it sees fewer logs than intended
|
||||
if params.get_bool("HyundaiRadarTracksToggle"):
|
||||
CP_SP.flags |= HyundaiFlagsSP.ENABLE_RADAR_TRACKS.value
|
||||
if params.get_bool("HyundaiRadarTracks"):
|
||||
CP.radarUnavailable = False
|
||||
|
||||
|
||||
def setup_interfaces(CI: CarInterfaceBase, params: Params = None) -> None:
|
||||
CP = CI.CP
|
||||
CP_SP = CI.CP_SP
|
||||
|
||||
_initialize_custom_longitudinal_tuning(CI, CP, CP_SP, params)
|
||||
_initialize_neural_network_lateral_control(CI, CP, CP_SP, params)
|
||||
_initialize_radar_tracks(CP, CP_SP, params)
|
||||
|
||||
|
||||
def _enable_radar_tracks(CP: structs.CarParams, CP_SP: structs.CarParamsSP, can_recv: CanRecvCallable,
|
||||
params: Params) -> None:
|
||||
if CP.brand == 'hyundai':
|
||||
if CP_SP.flags & HyundaiFlagsSP.ENABLE_RADAR_TRACKS:
|
||||
can_recv()
|
||||
_, fingerprint = can_fingerprint(can_recv)
|
||||
radar_unavailable = RADAR_START_ADDR not in fingerprint[1] or Bus.radar not in HYUNDAI_DBC[CP.carFingerprint]
|
||||
|
||||
radar_tracks = params.get_bool("HyundaiRadarTracks")
|
||||
radar_tracks_persistent = params.get_bool("HyundaiRadarTracksPersistent")
|
||||
|
||||
params.put_bool_nonblocking("HyundaiRadarTracksConfirmed", radar_tracks)
|
||||
|
||||
if not radar_tracks_persistent:
|
||||
params.put_bool_nonblocking("HyundaiRadarTracks", not radar_unavailable)
|
||||
params.put_bool_nonblocking("HyundaiRadarTracksPersistent", True)
|
||||
|
||||
|
||||
def init_interfaces(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params,
|
||||
can_recv: CanRecvCallable, can_send: CanSendCallable):
|
||||
_enable_radar_tracks(CP, CP_SP, can_recv, params)
|
||||
|
||||
@@ -122,10 +122,6 @@ EVENTS_SP: dict[int, dict[str, Alert | AlertCallbackType]] = {
|
||||
ET.NO_ENTRY: NoEntryAlert("Controls Mismatch: Lateral"),
|
||||
},
|
||||
|
||||
EventNameSP.hyundaiRadarTracksConfirmed: {
|
||||
ET.PERMANENT: NormalPermanentAlert("Radar tracks available. Restart the car to initialize")
|
||||
},
|
||||
|
||||
EventNameSP.experimentalModeSwitched: {
|
||||
ET.WARNING: NormalPermanentAlert("Experimental Mode Switched", duration=1.5)
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user