feat: add RELLIS dataset compatibility smoke

This commit is contained in:
DCCONSTRUCTIONS
2026-07-25 20:45:30 +03:00
parent 13c35ff446
commit 054feec0d2
19 changed files with 1633 additions and 277 deletions
@@ -35,7 +35,7 @@ after(async () => {
function catalog(overrides = {}) {
return {
schema_version: "missioncore.dataset-gateway-catalog/v2",
schema_version: "missioncore.dataset-gateway-catalog/v3",
access: "read-only",
storage: {
configured: false,
@@ -49,19 +49,60 @@ function catalog(overrides = {}) {
},
sources: [{
source_id: "goose-3d/v2025-08-22",
source_kind: "goose",
display_name: "GOOSE 3D",
role: "primary-offroad-semantic-baseline",
license: "CC-BY-SA-4.0",
commercial_use: "allowed-with-share-alike",
format: "semantickitti-xyzi-label",
frame_semantics: "one-lidar-revolution",
sensor: "VLS-128",
platforms: ["MuCAR-3", "ALICE", "Spot"],
annotations: ["semantic-point", "instance-point"],
superclasses: ["natural-ground", "obstacle"],
download: {
automatic: false,
reason: "operator-admitted-large-artifact-only",
smoke_example_mb: null,
primary_scan_archive_gb: 3.3,
label_archive_gb: null,
poses_archive_gb: null,
validation_archive_gb: 3.3,
},
statistics: {
fragment_count: 8,
annotated_scan_count: 961,
},
admission: {
status: "blocked-storage-policy",
archive: null,
frame: null,
},
}, {
source_id: "rellis-3d/v1.1",
source_kind: "rellis",
display_name: "RELLIS-3D",
role: "independent-offroad-cross-dataset-check",
license: "CC-BY-NC-SA-3.0",
commercial_use: "research-only-license-review-required",
format: "semantickitti-xyzi-label",
frame_semantics: "one-lidar-revolution",
sensor: "Ouster OS1 64",
platforms: ["Clearpath Warthog"],
annotations: ["semantic-point"],
superclasses: ["ground", "obstacle", "ignore"],
download: {
automatic: false,
reason: "operator-admitted-large-artifact-only",
smoke_example_mb: 24,
primary_scan_archive_gb: 14,
label_archive_gb: 0.174,
poses_archive_gb: 0.174,
},
statistics: {
fragment_count: 5,
annotated_scan_count: 13_556,
},
admission: {
status: "blocked-storage-policy",
archive: null,
@@ -115,7 +156,8 @@ test("parses three distinct LiDAR representations and current-input boundary", (
);
assert.equal(parsed.representations[2].accumulation, true);
assert.equal(parsed.currentInput.admittedForPatchworkpp, false);
assert.equal(parsed.source.frameSemantics, "one-lidar-revolution");
assert.equal(parsed.sources[0].frameSemantics, "one-lidar-revolution");
assert.equal(parsed.sources[1].sourceKind, "rellis");
});
test("rejects path exposure and upgraded K1 semantics", () => {
@@ -147,7 +189,7 @@ test("fetches the read-only gateway endpoint", async () => {
});
assert.equal(calls[0].url, "/api/v1/lidar/dataset-gateway");
assert.equal(calls[0].init.method, "GET");
assert.equal(parsed.source.displayName, "GOOSE 3D");
assert.equal(parsed.sources[0].displayName, "GOOSE 3D");
});
test("decodes one bounded point-aligned native-scan preview", async () => {
@@ -182,10 +224,19 @@ test("decodes one bounded point-aligned native-scan preview", async () => {
assert.equal(parsed.pointCount, 2);
assert.deepEqual(parsed.groundTruthGround, [1, 0]);
let requestedUrl = null;
const fetched = await fetchDatasetNativeScanPreview({
fetcher: async () => new Response(JSON.stringify(payload), { status: 200 }),
fetcher: async (url) => {
requestedUrl = url;
return new Response(JSON.stringify(payload), { status: 200 });
},
});
assert.equal(fetched.frameId, "frame-1");
assert.deepEqual(fetched.evaluationMask, [1, 1]);
assert.equal(
requestedUrl,
"/api/v1/lidar/dataset-gateway/preview?source_id=goose-3d%2Fv2025-08-22",
);
payload.semantic_rgb_0_to_255.pop();
assert.throws(
@@ -194,6 +245,92 @@ test("decodes one bounded point-aligned native-scan preview", async () => {
);
});
test("decodes the RELLIS compatibility smoke with explicit ignore mask", async () => {
const payload = {
schema_version: "missioncore.dataset-native-scan-preview/v2",
source_id: "rellis-3d/v1.1",
frame_id: "000104",
representation: "native-scan",
sampling: "deterministic-even-index",
source_point_count: 3,
point_count: 3,
points_xyz_m: [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
remission_0_to_255: [0, 127, 255],
semantic_label_ids: [3, 4, 31],
semantic_rgb_0_to_255: [0, 102, 0, 0, 255, 0, 239, 255, 134],
ground_truth_ground: [1, 0, 0],
evaluation_mask: [1, 1, 0],
classes: [
{
label_id: 3,
class_name: "grass",
hex: "#006600",
ground_target: "ground",
source_point_count: 1,
},
{
label_id: 4,
class_name: "tree",
hex: "#00ff00",
ground_target: "non-ground",
source_point_count: 1,
},
{
label_id: 31,
class_name: "puddle",
hex: "#efff86",
ground_target: "ignore",
source_point_count: 1,
},
],
coordinate_frame: {
frame_id: "sensor/lidar/os1",
handedness: "right",
x: "forward",
y: "left",
z: "up",
transform_applied: false,
},
ground_policy: {
schema_version: "missioncore.rellis-ground-target-policy/v1",
ground: ["grass"],
non_ground: ["tree"],
ignore: ["puddle"],
},
source_evidence: {
repository_url: "https://github.com/unmannedlab/RELLIS-3D",
repository_commit: "c17a118fcaed1559f03cc32cc3a91dedc557f8b8",
label_config_sha256: "5".repeat(64),
point_sha256: "e".repeat(64),
label_sha256: "9".repeat(64),
license: "CC-BY-NC-SA-3.0",
},
safety: {
visualization_only: true,
compatibility_smoke_only: true,
navigation_or_safety_accepted: false,
},
};
const parsed = parseDatasetNativeScanPreview(payload);
assert.equal(parsed.sourceId, "rellis-3d/v1.1");
assert.deepEqual(parsed.evaluationMask, [1, 1, 0]);
assert.equal(parsed.classes[2].groundTarget, "ignore");
assert.equal(parsed.coordinateFrame.frameId, "sensor/lidar/os1");
let requestedUrl = null;
await fetchDatasetNativeScanPreview({
sourceId: "rellis-3d/v1.1",
fetcher: async (url) => {
requestedUrl = url;
return new Response(JSON.stringify(payload), { status: 200 });
},
});
assert.equal(
requestedUrl,
"/api/v1/lidar/dataset-gateway/preview?source_id=rellis-3d%2Fv1.1",
);
});
test("decodes a point-aligned current-vs-Patchwork++ comparison", async () => {
const payload = {
schema_version: "missioncore.dataset-ground-comparison-preview/v2",