Index
2026-04-18 — Analysis

DROID cross-view alignment — Step 0+3: Baseline vs 18-DoF hand-eye BA

droid_align | 4 AUTOLab sessions · 8 frames · trimmed-NN Chamfer

TL;DR

-66%
exo-exo
-32%
wrist-exo
1.99cm
BA exo-exo
6.55cm
BA wrist-exo
18
DoF / session
4
Sessions

1 배경 / 목적

DROID 의 wrist 뷰가 exo 와 심하게 어긋남 (육안상 "desk 가 대각선으로 흐름"). VGGT / Pi3 는 wrist 에서 실패. Policy 학습에 3D signal 을 안정적으로 흘리기 위해 multi-view alignment 품질 자체를 개선해야 함.

기존 한계: DROID 이 퍼블리시한 extrinsic 으로 point cloud 를 base frame 에 올리면 동일 desk 가 뷰마다 다른 위치에 찍힘. 특히 wrist 가 worst-case.
핵심 구조적 단순화: observation/camera_extrinsics/*_left 의 std ≈ 1e-15 (세션 상수), FK(cartesian_position) @ *_left_gripper_offset == *_left (diff 0.000 mm). 즉 wrist alignment 에러의 전부가 1 개의 상수 T_ee_cam 에 있음. FK 는 Franka sub-mm, intrinsic 은 ZED calib → 모두 신뢰 & 고정. 세션당 미지수는 18 DoF 뿐.

2 작업 내용 (어떻게)

파이프라인

세션당 8 개 균등 샘플 프레임 → per-cam depth unproject → 3 쌍 cross-view trimmed NN Chamfer 합을 loss 로 18 파라미터 ([T_base_exo1, T_base_exo2, T_ee_wristcam] × 6D axis-angle) 최적화.

src/calib/se3.py torch SE(3): axis-angle Rodrigues, 6D ↔ 4×4 src/calib/handeye_ba.py _chamfer_trimmed: torch.cdist + topk(k, largest=False).mean() run_ba: Adam lr=5e-3, 300 iters scripts/30_run_ba.py per-session driver → artifacts/<uuid>/calib_ba.json scripts/11_measure_with_calib.py 공통 metric runner, --use_calib 스위치 BA config: stride=8, max_depth=1.8 m, keep_frac=0.4, lr=5e-3, 300 iters Eval config: stride=6, max_depth=1.8 m, keep_frac=0.5, k=8 (baseline 과 동일)

왜 이 방법

3 결과 (수치)

세션별 mean Chamfer (cm, lower = better)

sessionpairbaselineBAΔrel
09h-53m-50sexo1↔exo28.631.54−7.09−82%
09h-53m-50sexo1↔wrist14.767.22−7.54−51%
09h-53m-50sexo2↔wrist8.736.91−1.82−21%
10h-13m-22sexo1↔exo27.021.37−5.65−80%
10h-13m-22sexo1↔wrist12.357.21−5.14−42%
10h-13m-22sexo2↔wrist6.274.41−1.86−30%
11h-15m-19sexo1↔exo24.373.03−1.34−31%
11h-15m-19sexo1↔wrist12.458.22−4.23−34%
11h-15m-19sexo2↔wrist9.577.80−1.77−19%
14h-55m-32sexo1↔exo23.552.03−1.52−43%
14h-55m-32sexo1↔wrist6.245.88−0.36−6%
14h-55m-32sexo2↔wrist6.814.74−2.07−30%

집계 (4 세션 평균, cm)

pairbaselineBAΔrel
exo1↔exo25.891.99−3.90−66%
exo1↔wrist11.457.13−4.32−38%
exo2↔wrist7.855.97−1.88−24%
wrist ↔ exo 평균9.656.55−3.10−32%

세션별 BA 파라미터 shift

Session Δt_exo1 Δt_exo2 Δt_eecam 09h-53m-50s 386 mm 116 mm 58 mm 10h-13m-22s 184 mm 70 mm 39 mm 11h-15m-19s 268 mm 263 mm 261 mm ← outlier 14h-55m-32s 143 mm 130 mm 78 mm

4 의미 (Takeaway)

Exo-exo 는 사실상 해결. 1.99 cm 는 ZED NEURAL depth noise + 잔차 수준. 더 짜려면 extrinsic 이 아닌 depth 재생성 이 필요.
Wrist 는 extrinsic 바닥. 6.55 cm 잔차 = exo-exo 의 2x 이상. 여기부터는 depth scale / biasself-occlusion 이 지배. 다음 레버리지는 depth 쪽에 있음.

왜 11h-15m 만 outlier 인가 (가설)

ΔT_ee_cam 이 다른 세션 40–80 mm 인데 이 세션만 261 mm. 8 개 균등 프레임에서 로봇이 거의 정지해 있거나 유사한 pose 만 커버해 T_ee_cam 이 under-constrained → BA 가 trans/rot 를 서로 swap 해 임의의 로컬 미니멈에 수렴. 해결책: (1) pose variance 기반 프레임 샘플링, (2) soft-trim/Huber, (3) init 근처 regularizer.

5 보완점 / 다음 (Next)