fix(perception): reconstruct rolling occupancy from K1 increments
This commit is contained in:
@@ -28,6 +28,7 @@ from k1link.perception.threat import (
|
||||
|
||||
REPOSITORY_ROOT = Path(__file__).resolve().parents[1]
|
||||
PROFILE_PATH = REPOSITORY_ROOT / "config/perception/m4-replay-threat-v2.json"
|
||||
ROLLING_PROFILE_PATH = REPOSITORY_ROOT / "config/perception/m4-replay-threat-v3.json"
|
||||
|
||||
|
||||
class _BodyFrames:
|
||||
@@ -61,7 +62,7 @@ def _obstacle(
|
||||
component_id=component_id,
|
||||
identity_scope="ephemeral",
|
||||
state=state,
|
||||
ttl_ns=750_000_000,
|
||||
ttl_ns=(3_000_000_000 if state is TemporalState.RETAINED else 750_000_000),
|
||||
last_hit_ns=current.evidence_time_ns,
|
||||
age_ns=0 if state is TemporalState.CURRENT else 100_000_000,
|
||||
association_basis="test-spatial-support",
|
||||
@@ -307,3 +308,32 @@ def test_semantic_hint_and_ephemeral_component_name_do_not_change_threat_geometr
|
||||
assert values[0].relative_speed_mps == values[1].relative_speed_mps
|
||||
assert values[0].closest_approach_m == values[1].closest_approach_m
|
||||
assert values[0].ttc_seconds == values[1].ttc_seconds
|
||||
|
||||
|
||||
def test_retained_map_can_block_but_cannot_claim_clear_or_motion() -> None:
|
||||
provider = DualEvidenceReplayThreatProvider(
|
||||
body_frame_resolver=_BodyFrames(),
|
||||
profile=load_replay_threat_profile(ROLLING_PROFILE_PATH),
|
||||
)
|
||||
retained_in = _obstacle(
|
||||
"retained-in",
|
||||
GridCell(6, 0, 0),
|
||||
motion=MotionState.UNKNOWN,
|
||||
history=(("frame-000002", 300_000_000, (2.925, 0.225, 0.225)),),
|
||||
state=TemporalState.RETAINED,
|
||||
)
|
||||
retained_out = _obstacle(
|
||||
"retained-out",
|
||||
GridCell(6, 7, 0),
|
||||
motion=MotionState.UNKNOWN,
|
||||
history=(("frame-000002", 300_000_000, (2.925, 3.375, 0.225)),),
|
||||
state=TemporalState.RETAINED,
|
||||
)
|
||||
|
||||
values = provider.assess(_map(occupied=(retained_in, retained_out)))
|
||||
by_id = {item.component_id: item for item in values}
|
||||
|
||||
assert by_id["retained-in"].decision is ThreatDecision.THREAT
|
||||
assert by_id["retained-in"].relative_speed_mps is None
|
||||
assert by_id["retained-out"].decision is ThreatDecision.UNKNOWN
|
||||
assert by_id["retained-out"].corridor_intersection is CorridorIntersection.UNKNOWN
|
||||
|
||||
Reference in New Issue
Block a user