mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 21:43:44 +08:00
80fbb4f6db
Register vehicle controls, planner modes, UI actions and Galaxy services after their providers exist. Wire the shared runtime entrypoints and cover their combined behavior. Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com> Co-authored-by: Daniel Koepping <elkoled@gmail.com> Co-authored-by: Danny <dannyirwin31@yahoo.com> Co-authored-by: DimitriChrysafis <Dimitri.chrysafis@gmail.com> Co-authored-by: Dom <168790843+firestar5683@users.noreply.github.com> Co-authored-by: Harald Schäfer <harald.the.engineer@gmail.com> Co-authored-by: Kacper Rączy <gfw.kra@gmail.com> Co-authored-by: Prabhaav Pillai <prabhaav@msu.edu> Co-authored-by: dirwin31 <83434411+dirwin31@users.noreply.github.com> Co-authored-by: firestarsdog <229254897+firestarsdog@users.noreply.github.com> Co-authored-by: stef <19478336+stefpi@users.noreply.github.com> Co-authored-by: whoisdomi <dcantu83@gmail.com> Co-authored-by: Intelli <contact@intelli.software> Co-authored-by: haraschax <6804392+haraschax@users.noreply.github.com> Co-authored-by: prabhaavp <prabhaav@msu.edu>
57 lines
2.6 KiB
Python
57 lines
2.6 KiB
Python
from openpilot.starpilot.longitudinal.tests.extension_helpers import extension_state
|
|
from types import SimpleNamespace
|
|
import unittest
|
|
|
|
from opendbc.car import gen_empty_fingerprint, structs
|
|
from opendbc.car.gm.interface import CarInterface
|
|
from opendbc.car.gm.values import CAR
|
|
from opendbc.car.gm.bolt_cc import BoltCcLongitudinalPolicy
|
|
from opendbc.car.gm.longitudinal import GMPedalLongitudinalPolicy
|
|
from openpilot.common.realtime import DT_CTRL
|
|
from openpilot.selfdrive.controls.lib.longcontrol import LongControl
|
|
|
|
|
|
def params(identity, pedal=False):
|
|
fingerprint = gen_empty_fingerprint()
|
|
fingerprint[2][0x320] = 8
|
|
fingerprint[2][0x180] = 4
|
|
if pedal:
|
|
fingerprint[0][0x201] = 6
|
|
return CarInterface.get_params(identity, fingerprint, [], False, False, False)
|
|
|
|
|
|
class TestBoltCcIntegrator(unittest.TestCase):
|
|
def test_actual_longcontrol_reduces_stale_positive_integrator_during_deceleration(self):
|
|
for identity in (CAR.CHEVROLET_BOLT_CC_2017, CAR.CHEVROLET_BOLT_CC_2018_2021, CAR.CHEVROLET_BOLT_CC_2022_2023):
|
|
controller = LongControl(params(identity))
|
|
self.assertIsInstance(extension_state(controller, 'vehicle_policy'), BoltCcLongitudinalPolicy)
|
|
controller.pid.i = 0.8
|
|
state = structs.CarState.new_message()
|
|
state.vEgo, state.aEgo = 28.0, 0.2
|
|
output = controller.update(True, state, -0.2, False, (-3.0, 2.0))
|
|
expected_i = 0.8 * 0.46 + controller.pid.k_i * DT_CTRL * -0.4
|
|
self.assertAlmostEqual(controller.pid.i, expected_i)
|
|
self.assertAlmostEqual(output, 2.0 * -0.4 + expected_i - 0.2)
|
|
controller.reset()
|
|
self.assertEqual(controller.pid.i, 0.0)
|
|
|
|
def test_actual_longcontrol_caps_positive_command_on_negative_target(self):
|
|
controller = LongControl(params(CAR.CHEVROLET_BOLT_CC_2018_2021))
|
|
controller.pid.i = 2.0
|
|
state = structs.CarState.new_message()
|
|
state.vEgo, state.aEgo = 28.0, 0.16
|
|
output = controller.update(True, state, -0.2, False, (-3.0, 2.0))
|
|
self.assertAlmostEqual(output, 0.04)
|
|
|
|
def test_active_pedal_retains_its_existing_policy_and_creep_exclusion(self):
|
|
controller = LongControl(params(CAR.CHEVROLET_BOLT_CC_2018_2021, pedal=True))
|
|
self.assertIsInstance(extension_state(controller, 'vehicle_policy'), GMPedalLongitudinalPolicy)
|
|
policy = BoltCcLongitudinalPolicy()
|
|
pid = SimpleNamespace(i=0.8)
|
|
policy.prepare_pid(pid, -0.2, -0.4, 0.35, 0, (-3, 2))
|
|
self.assertEqual(pid.i, 0.8)
|
|
self.assertEqual(policy.shape_output(0.3, -0.2, -0.4, 0.35), 0.3)
|
|
controller.pid.i = 0.8
|
|
extension_state(controller, 'vehicle_policy').prepare_pid(controller.pid, -0.2, -0.4, 28.0, 0, (-3, 2))
|
|
self.assertAlmostEqual(controller.pid.i, 0.368)
|