You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.2 KiB
124 lines
3.2 KiB
#!/usr/bin/env python3
|
|
import os
|
|
import unittest
|
|
|
|
from common.params import Params
|
|
from selfdrive.test.longitudinal_maneuvers.maneuver import Maneuver
|
|
from selfdrive.manager.process_config import managed_processes
|
|
|
|
|
|
def put_default_car_params():
|
|
from selfdrive.car.honda.values import CAR
|
|
from selfdrive.car.honda.interface import CarInterface
|
|
cp = CarInterface.get_params(CAR.CIVIC)
|
|
Params().put("CarParams", cp.to_bytes())
|
|
|
|
|
|
# TODO: make new FCW tests
|
|
maneuvers = [
|
|
Maneuver(
|
|
'steady state following a car at 20m/s, then lead decel to 0mph at 1m/s^2',
|
|
duration=50.,
|
|
initial_speed=20.,
|
|
lead_relevancy=True,
|
|
initial_distance_lead=35.,
|
|
speed_lead_values=[20., 20., 0.],
|
|
speed_lead_breakpoints=[0., 15., 35.0],
|
|
),
|
|
Maneuver(
|
|
'steady state following a car at 20m/s, then lead decel to 0mph at 2m/s^2',
|
|
duration=50.,
|
|
initial_speed=20.,
|
|
lead_relevancy=True,
|
|
initial_distance_lead=35.,
|
|
speed_lead_values=[20., 20., 0.],
|
|
speed_lead_breakpoints=[0., 15., 25.0],
|
|
),
|
|
Maneuver(
|
|
'steady state following a car at 20m/s, then lead decel to 0mph at 3m/s^2',
|
|
duration=50.,
|
|
initial_speed=20.,
|
|
lead_relevancy=True,
|
|
initial_distance_lead=35.,
|
|
speed_lead_values=[20., 20., 0.],
|
|
speed_lead_breakpoints=[0., 15., 21.66],
|
|
),
|
|
Maneuver(
|
|
'steady state following a car at 20m/s, then lead decel to 0mph at 5m/s^2',
|
|
duration=40.,
|
|
initial_speed=20.,
|
|
lead_relevancy=True,
|
|
initial_distance_lead=35.,
|
|
speed_lead_values=[20., 20., 0.],
|
|
speed_lead_breakpoints=[0., 15., 19.],
|
|
),
|
|
Maneuver(
|
|
"approach stopped car at 20m/s",
|
|
duration=30.,
|
|
initial_speed=20.,
|
|
lead_relevancy=True,
|
|
initial_distance_lead=50.,
|
|
speed_lead_values=[0., 0.],
|
|
speed_lead_breakpoints=[1., 11.],
|
|
),
|
|
Maneuver(
|
|
"approach slower cut-in car at 20m/s",
|
|
duration=20.,
|
|
initial_speed=20.,
|
|
lead_relevancy=True,
|
|
initial_distance_lead=50.,
|
|
speed_lead_values=[15., 15.],
|
|
speed_lead_breakpoints=[1., 11.],
|
|
only_lead2=True,
|
|
),
|
|
Maneuver(
|
|
"stay stopped behind radar override lead",
|
|
duration=20.,
|
|
initial_speed=0.,
|
|
lead_relevancy=True,
|
|
initial_distance_lead=10.,
|
|
speed_lead_values=[0., 0.],
|
|
speed_lead_breakpoints=[1., 11.],
|
|
only_radar=True,
|
|
),
|
|
]
|
|
|
|
|
|
class LongitudinalControl(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
os.environ['SIMULATION'] = "1"
|
|
os.environ['SKIP_FW_QUERY'] = "1"
|
|
os.environ['NO_CAN_TIMEOUT'] = "1"
|
|
|
|
params = Params()
|
|
params.clear_all()
|
|
params.put_bool("Passive", bool(os.getenv("PASSIVE")))
|
|
params.put_bool("OpenpilotEnabledToggle", True)
|
|
params.put_bool("CommunityFeaturesToggle", True)
|
|
|
|
# hack
|
|
def test_longitudinal_setup(self):
|
|
pass
|
|
|
|
|
|
def run_maneuver_worker(k):
|
|
def run(self):
|
|
man = maneuvers[k]
|
|
print(man.title)
|
|
put_default_car_params()
|
|
managed_processes['plannerd'].start()
|
|
|
|
valid = man.evaluate()
|
|
|
|
managed_processes['plannerd'].stop()
|
|
self.assertTrue(valid)
|
|
return run
|
|
|
|
|
|
for k in range(len(maneuvers)):
|
|
setattr(LongitudinalControl, f"test_longitudinal_maneuvers_{k+1}",
|
|
run_maneuver_worker(k))
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(failfast=True)
|
|
|