docs: Placement 2단계 순차 + 패킷 retry + max volume 표시 업데이트
- 18. Placement: 2단계 순차 흐름도 (상하→좌우→CV Green) 대표님 요구사항 반영 (센서 이동 안내, 크기 패턴, 대칭성) - 패킷 드랍 자동 retry 설명 - 향후 과제: 순차 Placement, 패킷 retry, max volume 완료 항목 추가 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1044,60 +1044,76 @@ Stop Scanning → LED 0 (OFF)
|
||||
|
||||
---
|
||||
|
||||
# 18. Placement 전체 파이프라인 (CV threshold + Detachment + LED)
|
||||
# 18. Placement 전체 파이프라인 (2단계 순차 탐색 + CV)
|
||||
|
||||
### 원본: placement.py (원은지님, 2026-04-24)
|
||||
### 대표님 요구사항 반영 (2026-04-27)
|
||||
|
||||
### 전체 흐름도
|
||||
|
||||
```
|
||||
Start Scanning (3초 간격 자동 반복)
|
||||
↓
|
||||
[매 스캔]
|
||||
↓
|
||||
6채널 ADC 수신 (maa? → reb:×6 → raa:)
|
||||
[매 스캔] 6채널 ADC 수신 → Detachment 체크
|
||||
↓
|
||||
┌───────────────────────────────────────┐
|
||||
│ 1. Detachment Detection │
|
||||
│ signal[20:80] - median([80:100]) │
|
||||
│ 0. Detachment Detection │
|
||||
│ mean(|y|) < 100 AND std < 100? │
|
||||
│ → YES: LED 4 (미부착) → 다음 스캔 │
|
||||
└───────────────────────────────────────┘
|
||||
↓ NO (부착됨)
|
||||
┌───────────────────────────────────────┐
|
||||
│ 2. Echo Analysis (6채널) │
|
||||
│ SG denoise → Low-echo detection │
|
||||
│ → ant/post wall 위치 (mm) │
|
||||
└───────────────────────────────────────┘
|
||||
↓
|
||||
┌───────────────────────────────────────┐
|
||||
│ 3. CV Threshold (Center CH0~CH3) │
|
||||
│ depth_mm = (post-ant) × DPS × cos(θ)│
|
||||
│ CV = std(depths) / mean(depths) │
|
||||
│ CV ≤ 0.15? → PASS │
|
||||
└───────────────────────────────────────┘
|
||||
↓
|
||||
┌───────────────────────────────────────┐
|
||||
│ 4. LR Deviation (CH4 vs CH5) │
|
||||
│ lr_dev = (depth4-depth5) / mean │
|
||||
│ |lr_dev| ≤ 0.15? → PASS │
|
||||
└───────────────────────────────────────┘
|
||||
↓
|
||||
┌───────────────────────────────────────┐
|
||||
│ 5. 최종 판정 │
|
||||
│ CV PASS AND LR PASS │
|
||||
│ → YES: LED 6 (최적 위치) → Lock │
|
||||
│ → NO: LED 5 (탐색 중) │
|
||||
│ + 방향 가이드 │
|
||||
│ (MOVE UP/DOWN/LEFT/RIGHT) │
|
||||
│ + severity (slight/moderate/severe) │
|
||||
└───────────────────────────────────────┘
|
||||
↓
|
||||
Threshold Relaxation (반복 시):
|
||||
CV_thr = 0.15 + scanCount × 0.02
|
||||
→ 오래 조절해도 안 되면 기준 완화
|
||||
╔═══════════════════════════════════════╗
|
||||
║ Step 1/3: 상하 탐색 (VERTICAL) ║
|
||||
║ ║
|
||||
║ 안내: "센서를 아래에서 위로 천천히 ║
|
||||
║ 이동하세요" ║
|
||||
║ ║
|
||||
║ CH3,2,1,0 low echo 검출 ║
|
||||
║ 조건: 3개 이상 + 크기 유사 ║
|
||||
║ 또는 3≥2≥1≥0 패턴 ║
|
||||
║ ║
|
||||
║ 미달 → "위로 이동" / "아래로 이동" ║
|
||||
║ PASS → Step 2로 자동 전환 ║
|
||||
╚═══════════════════════════════════════╝
|
||||
↓ PASS
|
||||
╔═══════════════════════════════════════╗
|
||||
║ Step 2/3: 좌우 탐색 (LATERAL) ║
|
||||
║ ║
|
||||
║ 안내: "센서를 좌우로 천천히 ║
|
||||
║ 이동하세요" ║
|
||||
║ ║
|
||||
║ CH4, CH5 대칭성 확인 ║
|
||||
║ |len4-len5| / max < 0.3 → 대칭 ║
|
||||
║ ║
|
||||
║ 미달 → "왼쪽으로" / "오른쪽으로" ║
|
||||
║ 상하 벗어남 → Step 1로 복귀 ║
|
||||
║ PASS → Step 3로 자동 전환 ║
|
||||
╚═══════════════════════════════════════╝
|
||||
↓ PASS
|
||||
╔═══════════════════════════════════════╗
|
||||
║ Step 3/3: 최종 Green (CV 확인) ║
|
||||
║ ║
|
||||
║ CV = std(depths) / mean(depths) ║
|
||||
║ CV ≤ threshold → Green! ║
|
||||
║ ║
|
||||
║ Threshold Relaxation (5회 단위): ║
|
||||
║ 1~5회: 0.15 ║
|
||||
║ 6~10회: 0.20 ║
|
||||
║ 11~15회: 0.25 ║
|
||||
║ 16+회: 0.30 (최대) ║
|
||||
║ ║
|
||||
║ CV 미달 → Step 1부터 다시 ║
|
||||
║ PASS → LED 6 (ALIGN_COMPLETE) + Lock ║
|
||||
╚═══════════════════════════════════════╝
|
||||
↓ Green!
|
||||
"Start Measurement" 버튼 활성화
|
||||
```
|
||||
|
||||
Lock → "Start Measurement" 버튼 활성화
|
||||
### 패킷 드랍 대응
|
||||
|
||||
```
|
||||
maa? → reb 4개만 수신 (CH4,CH5 드랍)
|
||||
→ INCOMPLETE_SCAN 4/6 → 자동 retry (최대 2회)
|
||||
→ retry 후 6채널 수신 → 정상 진행
|
||||
```
|
||||
|
||||
### BLE 디버그 로그 출력 예시
|
||||
@@ -1280,7 +1296,7 @@ ADC 파싱 시 Big/Little Endian을 자동 감지:
|
||||
| Low-echo Detection (prominence + edge penalty) | ✅ 완료 | VALLEY_STOP=50, EDGE_DECAY=0.12 |
|
||||
| Frustum BV 추정 (6ch) | ✅ 완료 | center 4ch + lateral lr_ratio(≥1.0) |
|
||||
| lr_ratio 동적 계산 | ✅ 완료 | CH4/CH5 타원 추정, 하한 1.0 |
|
||||
| Placement Guide (CV threshold) | ✅ 완료 | CV≤0.15 + LR dev≤0.15 + relaxation |
|
||||
| Placement Guide 2단계 순차 | ✅ 완료 | 상하(3ch+크기)→좌우(대칭)→CV Green |
|
||||
| 미부착 감지 (DetachmentDetection) | ✅ 완료 | mean/std < 100 → LED 4 |
|
||||
| LED 모드 (mls?) BE 포맷 | ✅ 완료 | Placement 3단계 (4→5→6→0) |
|
||||
| BLE 자동 reconnect | ✅ 완료 | 무한 3초 재시도 + watchdog |
|
||||
@@ -1288,7 +1304,8 @@ ADC 파싱 시 Big/Little Endian을 자동 감지:
|
||||
| BLE 명령어 Endian 통일 | ✅ 완료 | 테스터 exe와 100% 동일 (BE+공백) |
|
||||
| 자동측정 (IMU 1s + 측정 10s) | ✅ 완료 | |
|
||||
| 런타임 캘리브레이션 | ✅ 완료 | Threshold 슬라이더 + DPS 직접입력 + SG 토글 |
|
||||
| 도넛차트 실시간 ml | ✅ 완료 | lastVolumeMl 직접 표시 |
|
||||
| 도넛차트 max volume 표시 | ✅ 완료 | maxVolumeMl 직접 표시 |
|
||||
| 패킷 드랍 자동 retry | ✅ 완료 | 6ch 미만 수신 시 자동 재전송 (최대 2회) |
|
||||
| ADC CSV 저장 | ✅ 완료 | Downloads/VesiScan_ADC/일별.csv + 설정값 포함 |
|
||||
| Endian 감지 안정화 | ✅ 완료 | VBT=BE 기본, 애매한 경우 기기 기반 fallback |
|
||||
| Python ↔ Android 1:1 검증 | ✅ 완료 | 전수 상수 비교 |
|
||||
|
||||
Reference in New Issue
Block a user