mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-23 11:43:55 +08:00
* init * more init * keep it alive * fixes * more fixes * more fix * new submodule for nn data * bump submodule * update path to submodule * spacing??? * update submodule path * update submodule path * bump * dump * bump * introduce params * Add Neural Network Lateral Control toggle to developer panel This introduces a new toggle for enabling Neural Network Lateral Control (NNLC), providing detailed descriptions of its functionality and compatibility. It includes UI integration, car compatibility checks, and feedback links for unsupported vehicles. * decouple even more * static * codespell * remove debug * in structs * fix import * convert to capnp * fixes * debug * only initialize if NNLC is enabled or allow to enable * oops * fix initialization * only allow engage if nnlc is off * fix toggle param * fix tests * lint * fix more test * capnp test * try this out * validate if it's not None * make it 33 to match * align * share the same friction input calculation * return stock values if not enabled * unused * split base and child * space * rename * NeuralNetworkFeedForwardModel * less * just use file name * try this * more explicit * rename * move it * child class for additional controllers * rename * time to split out custom lateral acceleration * move around * space * fix * TODO-SP * TODO-SP * update regardless, it's an extension now * update name and expose toggle * ui: sunnypilot Panel -> Steering Panel * Update selfdrive/ui/sunnypilot/qt/offroad/settings/lateral_panel.h * merge * move to steering panel * no need for this * live params in a thread * no live for now * new structs * more ui * more flexible * more ui * no longer needed * another ui * cereal changes * bump opendbc * simplify checks * all in one place * split Enhanced Lat Accel * handle unrecognized platform * test for fingerprinting * fix fingerprint * NNLC: Mock data for unrecognized cars * fix fingerprints * test to verify model loading * bump neural_network_data * use pytest * use different one for now * fix ui preview alignments * typing * more type * show a platform * show match * init params for tests * ok ruff * make sure to loop through tests * ok again ruff * ok we need this lol --------- Co-authored-by: DevTekVE <devtekve@gmail.com>
53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
from parameterized import parameterized
|
|
|
|
from cereal import car, log
|
|
from opendbc.car.car_helpers import interfaces
|
|
from opendbc.car.honda.values import CAR as HONDA
|
|
from opendbc.car.toyota.values import CAR as TOYOTA
|
|
from opendbc.car.nissan.values import CAR as NISSAN
|
|
from opendbc.car.vehicle_model import VehicleModel
|
|
from openpilot.selfdrive.car.helpers import convert_to_capnp
|
|
from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID
|
|
from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque
|
|
from openpilot.selfdrive.controls.lib.latcontrol_angle import LatControlAngle
|
|
from openpilot.selfdrive.locationd.helpers import Pose
|
|
from openpilot.common.mock.generators import generate_livePose
|
|
from openpilot.sunnypilot.selfdrive.car import interfaces as sunnypilot_interfaces
|
|
|
|
|
|
class TestLatControl:
|
|
|
|
@parameterized.expand([(HONDA.HONDA_CIVIC, LatControlPID), (TOYOTA.TOYOTA_RAV4, LatControlTorque), (NISSAN.NISSAN_LEAF, LatControlAngle)])
|
|
def test_saturation(self, car_name, controller):
|
|
CarInterface = interfaces[car_name]
|
|
CP = CarInterface.get_non_essential_params(car_name)
|
|
CP_SP = CarInterface.get_non_essential_params_sp(CP, car_name)
|
|
CI = CarInterface(CP, CP_SP)
|
|
sunnypilot_interfaces.setup_car_interface_sp(CP, CP_SP)
|
|
CP_SP = convert_to_capnp(CP_SP)
|
|
VM = VehicleModel(CP)
|
|
|
|
controller = controller(CP.as_reader(), CP_SP.as_reader(), CI)
|
|
|
|
CS = car.CarState.new_message()
|
|
CS.vEgo = 30
|
|
CS.steeringPressed = False
|
|
|
|
params = log.LiveParametersData.new_message()
|
|
|
|
lp = generate_livePose()
|
|
pose = Pose.from_live_pose(lp.livePose)
|
|
|
|
# Saturate for curvature limited and controller limited
|
|
for _ in range(1000):
|
|
_, _, lac_log = controller.update(True, CS, VM, params, False, 0, pose, True)
|
|
assert lac_log.saturated
|
|
|
|
for _ in range(1000):
|
|
_, _, lac_log = controller.update(True, CS, VM, params, False, 0, pose, False)
|
|
assert not lac_log.saturated
|
|
|
|
for _ in range(1000):
|
|
_, _, lac_log = controller.update(True, CS, VM, params, False, 1, pose, False)
|
|
assert lac_log.saturated
|