feat(perception): add full camera-first shadow
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from k1link.compute.rig_geometry import (
|
||||
RIG_GEOMETRY_SCHEMA,
|
||||
RigGeometryError,
|
||||
parse_rig_geometry,
|
||||
)
|
||||
|
||||
|
||||
def _unbound() -> dict[str, object]:
|
||||
return {
|
||||
"schema_version": RIG_GEOMETRY_SCHEMA,
|
||||
"profile_id": "portable-k1/unbound-v1",
|
||||
"rig_kind": "portable",
|
||||
"qualification": {
|
||||
"state": "unbound",
|
||||
"reason": "no measured mount",
|
||||
"evidence_sha256": [],
|
||||
},
|
||||
"coordinate_frames": {
|
||||
"lidar_frame": "k1-lidar",
|
||||
"body_frame": None,
|
||||
"body_from_lidar": None,
|
||||
},
|
||||
"vehicle_body": None,
|
||||
"authority": {
|
||||
"commands_enabled": False,
|
||||
"navigation_or_safety_accepted": False,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def test_unbound_portable_rig_fails_closed_without_inventing_geometry() -> None:
|
||||
geometry = parse_rig_geometry(_unbound())
|
||||
|
||||
assert geometry.metric_body_geometry_available is False
|
||||
assert geometry.collision_geometry_qualified is False
|
||||
assert geometry.collision_contract()["state"] == "unavailable"
|
||||
assert geometry.collision_contract()["recent_collision_publishable"] is False
|
||||
|
||||
|
||||
def test_unbound_rig_rejects_hidden_physical_values() -> None:
|
||||
value = _unbound()
|
||||
value["coordinate_frames"] = {
|
||||
"lidar_frame": "k1-lidar",
|
||||
"body_frame": "vehicle-body",
|
||||
"body_from_lidar": None,
|
||||
}
|
||||
|
||||
with pytest.raises(RigGeometryError, match="must not contain physical values"):
|
||||
parse_rig_geometry(value)
|
||||
|
||||
|
||||
def test_measured_mount_does_not_grant_collision_authority() -> None:
|
||||
value = _unbound()
|
||||
value.update(
|
||||
{
|
||||
"profile_id": "measured-rig/v1",
|
||||
"rig_kind": "vehicle-mounted",
|
||||
"qualification": {
|
||||
"state": "measured",
|
||||
"reason": "bench measurement only",
|
||||
"evidence_sha256": ["a" * 64],
|
||||
"uncertainty": {
|
||||
"translation_1sigma_m": 0.01,
|
||||
"rotation_1sigma_deg": 0.2,
|
||||
"body_dimension_1sigma_m": 0.01,
|
||||
},
|
||||
},
|
||||
"coordinate_frames": {
|
||||
"lidar_frame": "k1-lidar",
|
||||
"body_frame": "vehicle-body",
|
||||
"body_from_lidar": {
|
||||
"from_frame": "k1-lidar",
|
||||
"to_frame": "vehicle-body",
|
||||
"translation_m": [0.0, 0.0, 1.0],
|
||||
"quaternion_xyzw": [0.0, 0.0, 0.0, 1.0],
|
||||
},
|
||||
},
|
||||
"vehicle_body": {
|
||||
"frame": "vehicle-body",
|
||||
"shape": "axis-aligned-box",
|
||||
"minimum_xyz_m": [-1.0, -0.5, -0.2],
|
||||
"maximum_xyz_m": [1.0, 0.5, 1.2],
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
geometry = parse_rig_geometry(value)
|
||||
|
||||
assert geometry.metric_body_geometry_available is True
|
||||
assert geometry.collision_geometry_qualified is False
|
||||
assert geometry.collision_contract()["state"] == "unavailable"
|
||||
Reference in New Issue
Block a user