feat: publish full RELLIS qualification

This commit is contained in:
DCCONSTRUCTIONS
2026-07-25 21:38:22 +03:00
parent 21c7a5507c
commit d8b7ed4526
5 changed files with 156 additions and 33 deletions
@@ -10,8 +10,10 @@ import {
type LidarGroundViewMode,
} from "./LidarGroundPointCloud";
import {
fetchGroundQualification,
fetchGroundReview,
fetchGroundReviewFrame,
type GroundQualification,
type GroundReview,
type GroundReviewFrame,
type GroundReviewFrameSummary,
@@ -324,6 +326,7 @@ function qualifiedModeExplanation(mode: LidarGroundViewMode) {
}
function RellisQualifiedReview({ runId }: { runId: string }) {
const [qualification, setQualification] = useState<GroundQualification | null>(null);
const [review, setReview] = useState<GroundReview | null>(null);
const [frame, setFrame] = useState<GroundReviewFrame | null>(null);
const [selectedSequence, setSelectedSequence] = useState<string | null>(null);
@@ -336,15 +339,20 @@ function RellisQualifiedReview({ runId }: { runId: string }) {
useEffect(() => {
const controller = new AbortController();
setError(null);
setQualification(null);
setReview(null);
setFrame(null);
cache.current.clear();
void fetchGroundReview(runId, { signal: controller.signal })
.then((value) => {
if (controller.signal.aborted || !value) return;
setReview(value);
setSelectedSequence(value.frames[0]?.datasetSequenceId ?? null);
setSelectedFrame(value.frames[0]?.frameId ?? null);
void Promise.all([
fetchGroundQualification(runId, { signal: controller.signal }),
fetchGroundReview(runId, { signal: controller.signal }),
])
.then(([qualificationValue, reviewValue]) => {
if (controller.signal.aborted || !qualificationValue || !reviewValue) return;
setQualification(qualificationValue);
setReview(reviewValue);
setSelectedSequence(reviewValue.frames[0]?.datasetSequenceId ?? null);
setSelectedFrame(reviewValue.frames[0]?.frameId ?? null);
})
.catch((loadError: unknown) => {
if (!controller.signal.aborted) setError(errorMessage(loadError));
@@ -440,7 +448,7 @@ function RellisQualifiedReview({ runId }: { runId: string }) {
<header className="dataset-sequence-review__truth">
<div>
<span className="section-eyebrow">RELLIS · FULL VALIDATION</span>
<h2>Пять последовательностей Ouster OS1 с покадровым сравнением</h2>
<h2>Две validation-последовательности Ouster OS1 с покадровым сравнением</h2>
<p>
Все {review.frameCount.toLocaleString("ru-RU")} validation-сканов
выровнены с labels и pose index. Высота Patchwork++ определена только
@@ -577,6 +585,26 @@ function RellisQualifiedReview({ runId }: { runId: string }) {
</article>
</div>
{qualification ? (
<div
className="rellis-review__decision"
data-passed={qualification.decision.passed ? "true" : "false"}
>
<strong>
{qualification.decision.passed
? "Кандидат прошёл независимую проверку"
: "Patchwork++ не прошёл независимую проверку"}
</strong>
<span>
Полный validation: obstacle recall{" "}
{formatPercent(qualification.current.micro.obstacleNonGroundRecall)}
{" → "}
{formatPercent(qualification.patchwork.micro.obstacleNonGroundRecall)}.
Алгоритм не принят для navigation/safety.
</span>
</div>
) : null}
<p className="dataset-sequence-review__raw-note">
Это независимая исследовательская проверка переносимости. Она не
включает управление машиной и не принимает алгоритм для navigation/safety.