From 36da75b1f0cb7e3d3fcfb6d1ea15d53c6cfab550 Mon Sep 17 00:00:00 2001 From: jjangddu Date: Fri, 24 Apr 2026 17:11:17 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EB=9F=B0=ED=83=80=EC=9E=84=20=EC=BA=98?= =?UTF-8?q?=EB=A6=AC=EB=B8=8C=EB=A0=88=EC=9D=B4=EC=85=98=20+=20BLE=20Endia?= =?UTF-8?q?n=20=ED=86=B5=EC=9D=BC=20+=20=ED=96=A5=ED=9B=84=EA=B3=BC?= =?UTF-8?q?=EC=A0=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 19. 런타임 캘리브레이션: Threshold/DPS 슬라이더, lr_ratio 하한 - 20. BLE Endian 통일: 테스터 exe 분석 결과 (BE 파라미터 + 공백) - 21. 향후 과제: 20+ 완료 항목 업데이트 Co-Authored-By: Claude Opus 4.6 (1M context) --- VesiScan_Android_Pipeline_Summary.md | 93 +++++++++++++++++++++++----- 1 file changed, 79 insertions(+), 14 deletions(-) diff --git a/VesiScan_Android_Pipeline_Summary.md b/VesiScan_Android_Pipeline_Summary.md index 1e948dc..df513bf 100644 --- a/VesiScan_Android_Pipeline_Summary.md +++ b/VesiScan_Android_Pipeline_Summary.md @@ -2,7 +2,7 @@ ## 작성일: 2026-04-23 ## 작성자: dwjang -## 마지막 업데이트: 2026-04-24 +## 마지막 업데이트: 2026-04-24 (v2) --- @@ -1111,27 +1111,92 @@ Lock → "Start Measurement" 버튼 활성화 --- -# 19. 향후 과제 +# 19. 런타임 캘리브레이션 (Settings 패널) + +측정 화면 Settings(톱니바퀴)에서 실시간으로 조절 가능: + +### Low Echo Threshold (주황색 슬라이더, 800~2000) + +``` +기본값: 1150 +용도: low-echo 판정 임계값. 올리면 벽 경계를 더 일찍 잡음. +문제: CH4/CH5 lateral에서 threshold가 너무 낮으면 urine을 과도하게 잡음 + → len이 비정상적으로 길어짐 → lr_ratio 왜곡 → BV 과소평가 +해결: threshold를 1200~1300으로 올려서 테스트 +``` + +### Distance/Sample (초록색 슬라이더, 1.5~2.5mm) + +``` +기본값: 1.771 mm/sample +용도: ADC 샘플 1개당 물리적 거리. BV 계산에 직접 영향. + d_mm = delay_offset + sample_index × distance_per_sample +조절: 기기별 캘리브레이션 시 팬텀 실측값과 맞추기 위해 사용 +``` + +### lr_ratio 하한 제한 + +``` +lr_ratio = computeLrRatio(center, lateral) +result = max(lr_ratio, 1.0) ← 원형보다 좁은 단면 방지 + +문제: 500ml 팬텀에서 CH4/CH5 짧음 → lr=0.32 → 100ml 과소평가 +수정: 하한 1.0 제한 → 정상 용적 출력 +``` + +--- + +# 20. BLE 명령어 Endian 통일 (테스터 exe 분석) + +### 테스터 코드 (vsbtester/ble.js buildPacket) 분석 결과 + +```javascript +// 파라미터 없는 명령: '?' 뒤에 공백 0x20 추가 +if (payloadParams.length === 0) { + bytes.push(0x20); +} +// 파라미터 있는 명령: 16비트 Big Endian +for (const p of payloadParams) { + bytes.push((n >> 8) & 0xff); // High byte first + bytes.push(n & 0xff); // Low byte +} +// CRC: Little Endian +bytes.push(crc & 0xff); +bytes.push((crc >> 8) & 0xff); +``` + +### Android 통일 결과 + +| 명령 | 파라미터 | 포맷 | 함수 | +|------|---------|------|------| +| maa | 없음 | `maa? ` + CRC(LE) | buildCommandASCII(" ") | +| mbb | 없음 | `mbb? ` + CRC(LE) | buildCommandASCII(" ") | +| msp | 없음 | `msp? ` + CRC(LE) | buildCommandASCII(" ") | +| mid | 없음 | `mid? ` + CRC(LE) | buildCommandASCII(" ") | +| mpa | [freq,cyc] | `mpa?` + params(BE) + CRC(LE) | buildCommandBE | +| mec | [6개] | `mec?` + params(BE) + CRC(LE) | buildCommandBE | +| mls | [state] | `mls?` + [0x00,state](BE) + CRC(LE) | buildCommandBE | +| msn | [0] | `msn?` + [0x00,0x00](BE) + CRC(LE) | buildCommandBE | + +--- + +# 21. 향후 과제 | 항목 | 상태 | 비고 | |------|------|------| | BLE 6채널 수신 | ✅ 완료 | | | Low-echo Detection (prominence + edge penalty) | ✅ 완료 | VALLEY_STOP=50, EDGE_DECAY=0.12 | -| Frustum BV 추정 (6ch) | ✅ 완료 | center 4ch + lateral lr_ratio | -| lr_ratio 동적 계산 | ✅ 완료 | CH4/CH5 타원 추정 | -| Placement Guide (CV threshold) | ✅ 완료 | CV≤0.15 + LR dev≤0.15 | -| 기기 자동 감지 (V0/V1/V2) | ✅ 완료 | Snell's law 각도 | -| Big Endian 자동 감지 | ✅ 완료 | | +| 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 | +| 미부착 감지 (DetachmentDetection) | ✅ 완료 | mean/std < 100 → LED 4 | +| LED 모드 (mls?) BE 포맷 | ✅ 완료 | Placement 3단계 (4→5→6→0) | | BLE 자동 reconnect | ✅ 완료 | 무한 3초 재시도 + watchdog | | BLE 디버그 로거 | ✅ 완료 | TX/RX 파싱 + Downloads 내보내기 | -| ADC 로그 저장 | ✅ 완료 | 6ch raw ADC → JSONL | -| 기기 정보 조회 (mid?) | ✅ 완료 | 연결 시 자동 (HW/SN/FW) | -| 미부착 감지 (DetachmentDetection) | ✅ 완료 | mean/std < 100 → LED 4 | -| LED 모드 (mls?) | ✅ 완료 | Placement 3단계 (4→5→6→0) | -| IMU 쿼리 (msp?) | ✅ 완료 | 1초 간격, 자동측정 루프 | +| BLE 명령어 Endian 통일 | ✅ 완료 | 테스터 exe와 100% 동일 (BE+공백) | | 자동측정 (IMU 1s + 측정 10s) | ✅ 완료 | | -| iOS 동기화 (UI) | ✅ 완료 | 알림, Quick Save, 일지 | -| 배터리 폴링 5초 | ✅ 완료 | keep-alive | +| 런타임 캘리브레이션 | ✅ 완료 | Threshold + DPS 슬라이더 | +| 도넛차트 실시간 ml | ✅ 완료 | lastVolumeMl 직접 표시 | | Python ↔ Android 1:1 검증 | ✅ 완료 | 전수 상수 비교 | | 금요일 APK 배포 | 🔜 예정 | Gitea 릴리즈 | | mbb 전체측정 전환 | 🔜 예정 | rbb: 헤더 파싱 검증 후 |