feat: add RELLIS dataset compatibility smoke
This commit is contained in:
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user