Files
NODEDC_MISSION_CORE/tests/test_ai_polygon_motion.py
T

41 lines
1.4 KiB
Python

"""The actuator may soften acceleration but must never prolong a safety command."""
import importlib.util
from pathlib import Path
import pytest
spec = importlib.util.spec_from_file_location(
"motion_control", Path(__file__).parents[1] / "simulation/ai-polygon/motion_control.py"
)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
def test_slow_perception_keeps_continuous_physics_command():
drive = module.DriveEnvelope()
rows = [drive.step(0.15, 0, 1 / 60)[0] for _ in range(180)]
assert rows[0] == pytest.approx(0.2 / 60)
assert all(0 <= b - a <= 0.2 / 60 + 1e-9 for a, b in zip(rows, rows[1:], strict=False))
assert rows[44:] == pytest.approx([0.15] * 136)
def test_braking_and_deadman_bypass_ramp():
drive = module.DriveEnvelope()
for _ in range(60):
drive.step(0.15, 0, 1 / 60)
assert drive.step(0.03, 0, 1 / 60) == (0.03, 0)
assert drive.step(0.15, 0.2, 1 / 60, stop=True) == (0, 0)
assert drive.wheels == (0, 0)
assert drive.step(0.15, 0, 1 / 60)[0] == pytest.approx(0.2 / 60)
def test_curvature_and_direction_change():
drive = module.DriveEnvelope()
for _ in range(60):
speed, yaw = drive.step(0.15, 0.2, 1 / 60)
assert yaw / speed == pytest.approx(0.2 / 0.15)
speed, yaw = drive.step(-0.15, -0.2, 1 / 60)
assert speed < 0 and yaw < 0
assert max(map(abs, drive.wheels)) <= 0.2 / 60 + 1e-9