TL;DR
- 구조적 관찰: DROID per-frame extrinsic은 세션 상수, wrist는 순수 FK-derived. 세션당 미지수 = 단 18 DoF (T_base_exo1 + T_base_exo2 + T_ee_wristcam).
- Exo-exo 거의 해결: 5.89 → 1.99 cm (-66%). ZED NEURAL depth noise floor 근처 도달.
- Wrist-exo는 개선됐지만 "해결" 아님: 9.65 → 6.55 cm (-32%). 잔차 > exo-exo 2x → extrinsic 단독으로 더 못 내림.
- 11h-15m 세션 outlier: ΔT_ee_cam=261 mm, 로컬 미니멈 혐의 (8 프레임 geometry 다양성 부족).
- BA는 cheap: 300 iters ≈ 10 s/세션 (1 B200 slot).
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 과 동일)
왜 이 방법
- Trimmed Chamfer (keep_frac<1): partial FoV overlap 에 robust. Lower k% 가 공통 영역 대표.
- 6D axis-angle: quaternion 대비 autograd 에 깔끔. Near-identity 특이점은 init 이 published 값이라 문제 없음.
- Chamfer 를 직접 loss 로: correspondence 추정 (ICP) 없이 end-to-end 로 미분 가능. B200 에서 5000×5000 fp32 cdist ≈ 100 MB, trivial.
3 결과 (수치)
세션별 mean Chamfer (cm, lower = better)
| session | pair | baseline | BA | Δ | rel |
| 09h-53m-50s | exo1↔exo2 | 8.63 | 1.54 | −7.09 | −82% |
| 09h-53m-50s | exo1↔wrist | 14.76 | 7.22 | −7.54 | −51% |
| 09h-53m-50s | exo2↔wrist | 8.73 | 6.91 | −1.82 | −21% |
| 10h-13m-22s | exo1↔exo2 | 7.02 | 1.37 | −5.65 | −80% |
| 10h-13m-22s | exo1↔wrist | 12.35 | 7.21 | −5.14 | −42% |
| 10h-13m-22s | exo2↔wrist | 6.27 | 4.41 | −1.86 | −30% |
| 11h-15m-19s | exo1↔exo2 | 4.37 | 3.03 | −1.34 | −31% |
| 11h-15m-19s | exo1↔wrist | 12.45 | 8.22 | −4.23 | −34% |
| 11h-15m-19s | exo2↔wrist | 9.57 | 7.80 | −1.77 | −19% |
| 14h-55m-32s | exo1↔exo2 | 3.55 | 2.03 | −1.52 | −43% |
| 14h-55m-32s | exo1↔wrist | 6.24 | 5.88 | −0.36 | −6% |
| 14h-55m-32s | exo2↔wrist | 6.81 | 4.74 | −2.07 | −30% |
집계 (4 세션 평균, cm)
| pair | baseline | BA | Δ | rel |
| exo1↔exo2 | 5.89 | 1.99 | −3.90 | −66% |
| exo1↔wrist | 11.45 | 7.13 | −4.32 | −38% |
| exo2↔wrist | 7.85 | 5.97 | −1.88 | −24% |
| wrist ↔ exo 평균 | 9.65 | 6.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 / bias 와 self-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)
- Step 0 시각화 갱신: refined calib 으로 PLY / 3-ortho PNG 재렌더 → baseline 과 before/after 육안 비교 (현재 reports/figures/ 는 baseline 만).
- BA robustness: 현재 hard topk →
Huber 또는 soft-trim. 11h-15m 로컬 미니멈 방지.
- Frame 샘플링 개선:
linspace k=8 → T_base_ee translational variance 기반 샘플. Hand-eye observability 를 명시적으로 확보.
- Step 1: URDF gripper mask. Wrist 에서 robot self 픽셀 제거 → BA 재실행. Wrist 잔차 감소 기대.
- Step 4: depth affine (α, β). Wrist depth 근거리 bias 를 per-session 스칼라로 보정. Expected: wrist 6.55 → ~4 cm.
- 세션 확장: 현재 AUTOLab 1 lab × 4. 다른 lab (다른 카메라 페어 / 다른 로봇 포즈) 로 일반화 확인.