# direct_visual_lidar_calibration: SuperGlue(자동) vs Manual

## 공통 단계 (한 번만 하면 됨, 재실행 불필요)

```bash
# 1. bag 5개 녹화 (cam1 또는 cam2, 정지 상태 10~15초씩)
ros2 bag record -o cam1_calib_01 /cam1/image /cam1/camera_info /livox/lidar
# ... 02~05 반복

# 2. preprocess
ros2 run direct_visual_lidar_calibration preprocess \
  ~/dvlc_data/cam1_bags ~/dvlc_data/cam1_preprocessed -av
```

`cam1_preprocessed/` 안의 `.ply`(포인트클라우드), `.png`(카메라 이미지), `_lidar_intensities.png`(LiDAR 반사강도 이미지)는 초기 추정 방법과 무관하게 그대로 재사용됩니다. **여기를 지우거나 다시 만들 필요 없음.**

---

## 방법 A: SuperGlue 자동 초기 추정

```bash
ros2 run direct_visual_lidar_calibration find_matches_superglue.py \
  ~/dvlc_data/cam1_preprocessed --superglue indoor --force_cpu --rotate_camera 90

ros2 run direct_visual_lidar_calibration initial_guess_auto ~/dvlc_data/cam1_preprocessed
```

- `calib.json`의 `results.init_T_lidar_camera_auto`에 저장됨
- 결과물: `<bag_name>_superglue.png` (매칭선 시각화), `<bag_name>_matches.json`
- **오늘 확인된 문제**: 체커보드처럼 반복적인 패턴이 있는 장면에서는 SuperGlue/SuperPoint 특징점이 코너를 잘못 매칭하기 쉬움 (스크린샷에서 체커보드 영역 정합이 어긋난 것으로 보임). SuperGlue는 애초에 텍스처가 풍부한 일반 실내 장면(가구, 벽, 문틀 등)을 겨냥한 것이라, 체커보드 같은 인공 패턴엔 오히려 약함.
- 장점: 손 안 대고 5개 bag 한 번에 처리 가능, 여러 번 반복 가능
- 단점: 라이선스 비영리 제한, 반복 패턴/텍스처 부족 장면에서 오매칭 발생

## 방법 B: Manual 초기 추정

```bash
ros2 run direct_visual_lidar_calibration initial_guess_manual ~/dvlc_data/cam1_preprocessed
```

- `calib.json`의 `results.init_T_lidar_camera`(manual)에 저장됨 — **이 키가 있으면 `calibrate`가 무조건 이걸 우선 사용**
- 절차:
  1. 포인트클라우드에서 우클릭 → 3D점, 이미지에서 우클릭 → 대응하는 2D점
  2. **Add picked points** 클릭
  3. 벽 모서리/문틀 코너 등 애매하지 않은 지점 위주로 최소 3쌍, 가능하면 5쌍+
  4. **Estimate** → `blend_weight` 슬라이더로 투영 정합 확인
  5. **Save**
- 장점: 정확한 코너를 직접 골라서 오매칭 위험이 낮음, 라이선스 문제 없음
- 단점: bag마다 수작업, 시간 소요

---

## 재작업 흐름 (지금 상황)

기존에 auto로 진행했던 결과가 마음에 안 들면:

```bash
# manual 초기 추정만 다시
ros2 run direct_visual_lidar_calibration initial_guess_manual ~/dvlc_data/cam1_preprocessed

# 그 다음 fine registration 재실행 (manual 값을 자동으로 우선 사용함)
ros2 run direct_visual_lidar_calibration calibrate ~/dvlc_data/cam1_preprocessed
```

`preprocess`는 다시 할 필요 없고, `find_matches_superglue.py`/`initial_guess_auto`로 만든 auto 결과도 그냥 남겨둬도 무방합니다 (calibrate가 manual을 우선시하므로 방해되지 않음).

## 결과 확인

```bash
ros2 run direct_visual_lidar_calibration viewer ~/dvlc_data/cam1_preprocessed
```

`data selection` 드롭다운에서 `CALIBRATION_RESULT` / `AUTOMATIC_INITIAL_GUESS` / `MANUAL_INITIAL_GUESS`를 바꿔가며 비교 가능 (스크린샷에 나온 화면). `blend_weight`를 조절해 포인트클라우드 색상 투영과 실제 이미지가 얼마나 겹치는지 확인.
