random car control

pull/28530/head
Maxime Desroches 2 years ago
parent 4b63feddec
commit b4a509819e
  1. 34
      selfdrive/car/tests/test_car_interfaces.py

@ -1,6 +1,8 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import math import math
import unittest import unittest
import hypothesis.strategies as st
from hypothesis import given, settings
import importlib import importlib
from parameterized import parameterized from parameterized import parameterized
@ -9,11 +11,36 @@ from selfdrive.car import gen_empty_fingerprint
from selfdrive.car.car_helpers import interfaces from selfdrive.car.car_helpers import interfaces
from selfdrive.car.fingerprints import _FINGERPRINTS as FINGERPRINTS, all_known_cars from selfdrive.car.fingerprints import _FINGERPRINTS as FINGERPRINTS, all_known_cars
def get_random_car_control():
def actuators():
return st.fixed_dictionaries({
'gas': st.floats(min_value=0.0, max_value=1.0, width=32),
'brake': st.floats(min_value=0.0, max_value=1.0, width=32),
'steer': st.floats(min_value=-1.0, max_value=1.0, width=32),
'steerOutputCan': st.floats(width=32),
'steeringAngleDeg': st.floats(width=32),
'curvature' : st.floats(width=32),
'speed' : st.floats(width=32),
'accel' : st.floats(width=32)
})
return st.fixed_dictionaries({
'enabled': st.booleans(),
'latActive': st.booleans(),
'longActive': st.booleans(),
'actuators': actuators(),
'actuatorsOutput': actuators(),
'orientationNED': st.lists(st.floats(width=32)),
'angularVelocity': st.lists(st.floats(width=32)),
'cruiseControl': st.fixed_dictionaries({'cancel': st.booleans(), 'resume': st.booleans(), 'override': st.booleans()})
})
class TestCarInterfaces(unittest.TestCase): class TestCarInterfaces(unittest.TestCase):
@parameterized.expand([(car,) for car in all_known_cars()]) @parameterized.expand([(car,) for car in all_known_cars()])
def test_car_interfaces(self, car_name): @settings(max_examples=5)
@given(cc_msg=get_random_car_control())
def test_car_interfaces(self, car_name, cc_msg):
if car_name in FINGERPRINTS: if car_name in FINGERPRINTS:
fingerprint = FINGERPRINTS[car_name][0] fingerprint = FINGERPRINTS[car_name][0]
else: else:
@ -57,14 +84,15 @@ class TestCarInterfaces(unittest.TestCase):
self.assertTrue(len(tune.indi.outerLoopGainV)) self.assertTrue(len(tune.indi.outerLoopGainV))
# Run car interface # Run car interface
CC = car.CarControl.new_message() CC = car.CarControl.new_message(**cc_msg)
for _ in range(10): for _ in range(10):
car_interface.update(CC, []) car_interface.update(CC, [])
car_interface.apply(CC, 0) car_interface.apply(CC, 0)
car_interface.apply(CC, 0) car_interface.apply(CC, 0)
CC = car.CarControl.new_message() CC = car.CarControl.new_message(**cc_msg)
CC.enabled = True CC.enabled = True
for _ in range(10): for _ in range(10):
car_interface.update(CC, []) car_interface.update(CC, [])
car_interface.apply(CC, 0) car_interface.apply(CC, 0)

Loading…
Cancel
Save