feat(lidar): admit and benchmark GOOSE baseline

This commit is contained in:
DCCONSTRUCTIONS
2026-07-25 14:14:20 +03:00
parent 881e97312b
commit 951b40c870
20 changed files with 2871 additions and 241 deletions
+9
View File
@@ -415,6 +415,15 @@ app.include_router(
/ "lidar-ground-v1"
/ "benchmarks"
),
dataset_admission_provider=lambda: (
REPOSITORY_ROOT / ".runtime" / "dataset-gateway" / "admission.json"
),
dataset_preview_provider=lambda: (
REPOSITORY_ROOT / ".runtime" / "dataset-gateway" / "preview.json"
),
dataset_ground_preview_provider=lambda: (
REPOSITORY_ROOT / ".runtime" / "dataset-gateway" / "ground-comparison.json"
),
)
)
+48 -2
View File
@@ -20,7 +20,15 @@ from k1link.compute import (
lidar_pack_catalog_item,
lidar_pack_detail,
)
from k1link.datasets import dataset_gateway_catalog
from k1link.datasets import (
DatasetAdmissionError,
configured_dataset_admission_manifest,
configured_dataset_ground_preview,
configured_dataset_preview,
dataset_gateway_catalog,
read_dataset_ground_preview,
read_dataset_native_scan_preview,
)
LIDAR_CATALOG_SCHEMA: Final = "missioncore.lidar-replay-pack-catalog/v1"
LIDAR_GROUND_CATALOG_SCHEMA: Final = "missioncore.lidar-ground-benchmark-catalog/v1"
@@ -29,6 +37,7 @@ _PACK_ID = re.compile(r"^lidar-replay-pack-[a-f0-9]{64}$")
_BENCHMARK_ID = re.compile(r"^ground-benchmark-[a-f0-9]{64}$")
_FIELD_REVIEW_ID = re.compile(r"^lidar-field-review-[a-f0-9]{64}$")
RootProvider = Callable[[], Path | None]
DatasetArtifactProvider = Callable[[], Path | None]
def configured_lidar_replay_root() -> Path | None:
@@ -51,12 +60,49 @@ def build_lidar_router(
root_provider: RootProvider = configured_lidar_replay_root,
ground_root_provider: RootProvider = configured_lidar_ground_root,
field_review_root_provider: RootProvider = configured_lidar_field_review_root,
dataset_admission_provider: DatasetArtifactProvider = configured_dataset_admission_manifest,
dataset_preview_provider: DatasetArtifactProvider = configured_dataset_preview,
dataset_ground_preview_provider: DatasetArtifactProvider = configured_dataset_ground_preview,
) -> APIRouter:
router = APIRouter(prefix="/api/v1/lidar", tags=["lidar"])
@router.get("/dataset-gateway")
def get_dataset_gateway() -> dict[str, object]:
return dataset_gateway_catalog()
return dataset_gateway_catalog(
admission_manifest_path=dataset_admission_provider(),
)
@router.get("/dataset-gateway/preview")
def get_dataset_gateway_preview() -> dict[str, Any]:
path = dataset_preview_provider()
if path is None or not path.is_file():
raise HTTPException(
status_code=404,
detail="Первый размеченный native scan ещё не импортирован.",
)
try:
return read_dataset_native_scan_preview(path)
except DatasetAdmissionError as exc:
raise HTTPException(
status_code=500,
detail="Preview датасета не прошло проверку целостности.",
) from exc
@router.get("/dataset-gateway/ground-comparison")
def get_dataset_gateway_ground_comparison() -> dict[str, Any]:
path = dataset_ground_preview_provider()
if path is None or not path.is_file():
raise HTTPException(
status_code=404,
detail="Ground baseline ещё не сравнивался с GOOSE-разметкой.",
)
try:
return read_dataset_ground_preview(path)
except DatasetAdmissionError as exc:
raise HTTPException(
status_code=500,
detail="Ground comparison не прошло проверку целостности.",
) from exc
@router.get("/replay-packs")
def list_lidar_replay_packs(