mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-01 03:24:05 +08:00
Align braking tests with upstream native cruise floor
Preserve named preset, native MPC and softer Traffic braking coverage. Add actual-value diagnostics for the remaining native planner reference assertion. Refresh the protected source receipt without changing production behavior.
This commit is contained in:
@@ -37,17 +37,27 @@ class GlobalBrakingTests(unittest.TestCase):
|
||||
standard, _ = self.run_planner('standard')
|
||||
eco, _ = self.run_planner('eco')
|
||||
sport, _ = self.run_planner('sport')
|
||||
self.assertEqual(snapshot(ordinary), snapshot(standard))
|
||||
self.assertGreater(eco.a_cruise, ordinary.a_cruise)
|
||||
self.assertLess(sport.a_cruise, ordinary.a_cruise)
|
||||
self.assertAlmostEqual(eco.mpc.params[0, 4], ordinary.mpc.params[0, 4])
|
||||
self.assertAlmostEqual(sport.mpc.params[0, 4], ordinary.mpc.params[0, 4])
|
||||
# The upstream native floor is independent of StarPilot's named presets.
|
||||
self.assertAlmostEqual(ordinary.a_cruise, -0.5)
|
||||
self.assertAlmostEqual(standard.a_cruise, -1.2)
|
||||
self.assertAlmostEqual(eco.a_cruise, -0.6)
|
||||
self.assertAlmostEqual(sport.a_cruise, -2.4)
|
||||
self.assertGreater(eco.a_cruise, standard.a_cruise)
|
||||
self.assertLess(sport.a_cruise, standard.a_cruise)
|
||||
for planner in (ordinary, standard, eco, sport):
|
||||
self.assertEqual(planner.output_a_target, planner.a_cruise)
|
||||
self.assertEqual(str(planner.mpc.source), '0')
|
||||
self.assertFalse(planner.output_should_stop)
|
||||
self.assertIsNone(planner.last_profile)
|
||||
self.assertEqual(planner.mpc._cached_cost_weights, ordinary.mpc._cached_cost_weights)
|
||||
self.assertEqual(planner.mpc.params[:, [0, 1, 4, 5]].tolist(),
|
||||
ordinary.mpc.params[:, [0, 1, 4, 5]].tolist())
|
||||
|
||||
def test_slc_style_hazards_and_category_override(self):
|
||||
ceiling = CruiseCeiling(19.0, ACTIVE)
|
||||
eco, coast = self.run_planner('eco', ceiling=ceiling)
|
||||
self.assertEqual(coast['braking_style'], 'eco')
|
||||
self.assertEqual(coast['full_brake_floor'], -1.2)
|
||||
self.assertEqual(coast['full_brake_floor'], -0.6)
|
||||
self.assertIsNotNone(coast['slc_target'])
|
||||
lead, coast = self.run_planner('eco', ceiling=ceiling, lead=True)
|
||||
self.assertTrue(coast['relevant_lead'])
|
||||
|
||||
@@ -553,7 +553,9 @@ class ProfileRuntimeTests(unittest.TestCase):
|
||||
sm, _ = messages(lead=case == 'lead', e2e=case == 'e2e', force=case == 'force')
|
||||
sm['carControl'].longActive = True
|
||||
planner.update(sm)
|
||||
self.assertAlmostEqual(planner.output_a_target, target, places=6)
|
||||
actual = (float(planner.output_a_target), float(planner.a_cruise), str(planner.mpc.source),
|
||||
float(planner.v_desired_trajectory[0]))
|
||||
self.assertAlmostEqual(planner.output_a_target, target, places=6, msg=f'actual native planner tuple: {actual!r}')
|
||||
self.assertAlmostEqual(planner.a_cruise, cruise, places=6)
|
||||
self.assertEqual(str(planner.mpc.source), source)
|
||||
self.assertAlmostEqual(planner.v_desired_trajectory[0], speed0, places=6)
|
||||
@@ -650,8 +652,9 @@ class ProfileRuntimeTests(unittest.TestCase):
|
||||
self.assertEqual(soft.last_cruise_ceiling_status, 'applied')
|
||||
self.assertLessEqual(soft.a_cruise, baseline.a_cruise + 1e-8)
|
||||
self.assertLessEqual(strong.a_cruise, baseline.a_cruise + 1e-8)
|
||||
self.assertAlmostEqual(soft.a_cruise, baseline.a_cruise)
|
||||
self.assertLess(strong.a_cruise, baseline.a_cruise)
|
||||
self.assertAlmostEqual(baseline.a_cruise, -0.5)
|
||||
self.assertAlmostEqual(soft.a_cruise, -0.75)
|
||||
self.assertLess(strong.a_cruise, soft.a_cruise)
|
||||
|
||||
def test_selected_profile_keeps_lead_and_e2e_as_braking_candidates(self):
|
||||
selected = ProfileTuning('standard', 2.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.5, 0.75)
|
||||
|
||||
@@ -65,7 +65,8 @@ class SelectedProfilesTests(unittest.TestCase):
|
||||
self.assertIsNone(selected.acceleration_max)
|
||||
ordinary, _ = self.run_planner()
|
||||
comfort, coast = self.run_planner(selected)
|
||||
self.assertGreater(comfort.a_cruise, ordinary.a_cruise)
|
||||
self.assertAlmostEqual(ordinary.a_cruise, -0.5)
|
||||
self.assertAlmostEqual(comfort.a_cruise, -0.6)
|
||||
self.assertEqual(coast['full_brake_floor'], -0.6)
|
||||
self.assertIsNone(comfort.last_profile)
|
||||
self.assertEqual(comfort.mpc.params[0, 4], ordinary.mpc.params[0, 4])
|
||||
@@ -235,12 +236,22 @@ class SelectedProfilesTests(unittest.TestCase):
|
||||
normal, _ = self.run_planner(SelectedProfileTuning(cruise_brake_magnitude=1.2))
|
||||
comfort, coast = self.run_planner(SelectedProfileTuning(cruise_brake_magnitude=0.6, braking_style='eco'))
|
||||
sport, _ = self.run_planner(SelectedProfileTuning(cruise_brake_magnitude=2.4, braking_style='sport'))
|
||||
self.assertEqual(snapshot(ordinary), snapshot(normal))
|
||||
self.assertGreater(comfort.a_cruise, ordinary.a_cruise)
|
||||
self.assertLess(sport.a_cruise, ordinary.a_cruise)
|
||||
# The upstream native floor is independent of StarPilot's named presets.
|
||||
self.assertAlmostEqual(ordinary.a_cruise, -0.5)
|
||||
self.assertAlmostEqual(normal.a_cruise, -1.2)
|
||||
self.assertAlmostEqual(comfort.a_cruise, -0.6)
|
||||
self.assertAlmostEqual(sport.a_cruise, -2.4)
|
||||
self.assertGreater(comfort.a_cruise, normal.a_cruise)
|
||||
self.assertLess(sport.a_cruise, normal.a_cruise)
|
||||
self.assertEqual(coast['full_brake_floor'], -0.6)
|
||||
self.assertIsNone(comfort.last_profile)
|
||||
self.assertEqual(comfort.mpc.params[0, 4], ordinary.mpc.params[0, 4])
|
||||
for planner in (ordinary, normal, comfort, sport):
|
||||
self.assertEqual(planner.output_a_target, planner.a_cruise)
|
||||
self.assertEqual(str(planner.mpc.source), '0')
|
||||
self.assertFalse(planner.output_should_stop)
|
||||
self.assertIsNone(planner.last_profile)
|
||||
self.assertEqual(planner.mpc._cached_cost_weights, ordinary.mpc._cached_cost_weights)
|
||||
self.assertEqual(planner.mpc.params[:, [0, 1, 4, 5]].tolist(),
|
||||
ordinary.mpc.params[:, [0, 1, 4, 5]].tolist())
|
||||
|
||||
def test_selected_braking_retains_native_hazard_priority(self):
|
||||
for kwargs in ({'lead': True}, {'force': True}):
|
||||
|
||||
@@ -61,9 +61,9 @@ class TrafficAccelerationPlannerTests(unittest.TestCase):
|
||||
self.assertLess(traffic.a_cruise, baseline.a_cruise)
|
||||
|
||||
def test_soft_saved_traffic_keeps_slc_and_force_decel_braking(self):
|
||||
target = self.tuning(acceleration=0.6, braking=0.5)
|
||||
target = self.tuning(acceleration=0.6, braking=0.35)
|
||||
self.assertAlmostEqual(target.acceleration_max, 0.6)
|
||||
self.assertAlmostEqual(target.cruise_brake_magnitude, 0.5)
|
||||
self.assertAlmostEqual(target.cruise_brake_magnitude, 0.35)
|
||||
for force in (False, True):
|
||||
with self.subTest(force=force):
|
||||
baseline = LongitudinalPlanner(self.cp, init_v=V_EGO)
|
||||
@@ -77,7 +77,9 @@ class TrafficAccelerationPlannerTests(unittest.TestCase):
|
||||
self.assertEqual(traffic.mpc.solution_status, 0)
|
||||
self.assertLessEqual(traffic.a_cruise, baseline.a_cruise + 1e-8)
|
||||
self.assertEqual(traffic.last_cruise_ceiling_status, 'force_decel' if force else 'applied')
|
||||
self.assertLessEqual(traffic.a_cruise, -1.2 + 1e-8)
|
||||
self.assertIsNotNone(traffic.last_profile)
|
||||
self.assertAlmostEqual(traffic.last_profile.cruise_brake_magnitude, 0.35)
|
||||
self.assertLessEqual(traffic.a_cruise, -0.5 + 1e-8)
|
||||
|
||||
def test_soft_saved_traffic_preserves_lead_and_model_stop_candidates(self):
|
||||
target = self.tuning(acceleration=0.6, braking=0.5)
|
||||
@@ -214,9 +216,9 @@ class TrafficAccelerationPlannerTests(unittest.TestCase):
|
||||
self.assertEqual(planner.mpc.solution_status, 0)
|
||||
self.assertAlmostEqual(planner.output_a_target, baseline.output_a_target, places=5)
|
||||
if case in ('slc', 'curve'):
|
||||
self.assertLessEqual(planner.a_cruise, -1.2 + 1e-8)
|
||||
self.assertLessEqual(planner.a_cruise, -0.5 + 1e-8)
|
||||
elif case == 'force_decel':
|
||||
self.assertLessEqual(planner.a_cruise, -1.2 + 1e-8)
|
||||
self.assertLessEqual(planner.a_cruise, -0.5 + 1e-8)
|
||||
elif case == 'model_stop':
|
||||
self.assertEqual(str(planner.mpc.source), '4')
|
||||
self.assertTrue(planner.output_should_stop)
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"protected_inventory_sha256": "cf94285f53f2b75634643e3da57c8d1885bfc907fdf6cdf53c0c99e217bb7b96", "schema_version": 1}
|
||||
{"protected_inventory_sha256":"ca7c47e28fbe479734ceb2ed60530e28c22ee210ba497dc573a315be51e209e9","schema_version":1}
|
||||
|
||||
Reference in New Issue
Block a user