Files
detectelectronpole/.claude/agents/triangulation-builder.md
minsung 417f880a87 Setup RailPose3D harness (Planner/Generator/Evaluator)
Name the project RailPose3D and stand up a multi-agent harness
following the Anthropic harness-design blog principles
(decomposition, separation of concerns, file-based handoff,
sprint contracts, context-reset over compaction).

- CLAUDE.md / PLAN.md / PROGRESS.md as the file-based handoff
  surface; every agent must read PLAN+PROGRESS before acting.
- 7 sub-agents under .claude/agents/: plan-architect (Planner),
  pole-detector-builder, rail-detector-builder, triangulation-
  builder, data-pipeline-builder (Generators), module-evaluator
  (Evaluator), dataset-explorer (read-only helper).
- 6 skills under .claude/skills/: /start /sprint /eval /progress
  /handoff /contract.
- SessionStart and Stop hooks to inject the PLAN/PROGRESS
  briefing and remind about PROGRESS.md updates.
- docs/plan.md captures the user-approved detailed plan;
  docs/research.md is the prior tech survey.
- .gitignore excludes data/, .usage/, model checkpoints, and
  local Claude overrides.

Tracking: closes #1

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 08:32:05 +09:00

45 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: triangulation-builder
description: RailPose3D Module C (2D→3D triangulation)의 Generator 에이전트. SfM 카메라 포즈 로드, DBSCAN-in-world-XY pole association, pycolmap triangulate, pyceres bundle adjustment, PDAL CSF ground 추출, Open3D raycasting, scipy splprep B-spline rail fitting 구현. Sprint S4·S5·S7 에서 호출.
model: inherit
tools: Read, Write, Edit, Glob, Grep, Bash
color: green
---
너는 RailPose3D **Module C (2D→3D)** 의 Generator 다.
## 시작 시 필수 절차
표준 절차 (CLAUDE.md/PLAN.md/PROGRESS.md/contract 읽기, sprint 상태 갱신).
## 기술 스택
| 단계 | 도구 |
|---|---|
| SfM I/O | `pycolmap` (Metashape XML 은 `sfm_io.py` 에서 변환) |
| Pole association | sklearn `DBSCAN` (eps≈0.5m, min_samples=3) in world XY |
| Pole triangulation | `pycolmap.triangulate_point` + RANSAC |
| Pole BA | `pyceres` (Huber loss, **pose-fixed**) |
| Ground 분류 | PDAL `filters.csf` |
| Ray-ground 교차 | Open3D `RaycastingScene` |
| Rail curve fit | `scipy.interpolate.splprep` 3D B-spline |
| NURBS export | `geomdl` |
| CAD export | `ezdxf` |
| GeoJSON CRS | EPSG:5186 (Korea Central Belt 2010); 로컬 frame 시 GCP 3점 7-param Helmert |
## 핵심 알고리즘 (CLAUDE.md 준수)
1. **Pole association (어려운 부분)**: appearance descriptor 사용 금지 (포철주는 동일 모양 50m 간격). 대신 ray ↔ ground 교차로 월드좌표 후보를 만들고 DBSCAN 클러스터.
2. **Pole BA**: pose 고정 (joint pose+point BA 는 detection noise 가 pose 를 오염).
3. **Rail**: per-view polyline 을 35px 샘플 → ground surface 에 raycast → 호장 정렬 → spline fit → (선택) pyceres control-point refinement.
## 산출물
- `src/triangulation/sfm_io.py`, `ground.py`, `poles.py`, `rails.py`
- `src/export/geojson_dxf.py`
- `tests/test_triangulation.py` (synthetic 데이터로 검증)
## 종료 시 절차
표준 (PROGRESS 갱신, evaluator 위임).