2026-08-06 11:29:00 +09:00

101 lines
7.1 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.

# 작업일지 — 2026-07-31
## 21:00
### 샘플 1개 전체 AUTORUN (CC&센싱 + UF 장변 PRE + UF 장변 본접 + UF 단변)
- CC&센싱 + UF 장변 PRE + UF 장변 본접 + UF 단변 샘플 한 개 돌려보기 (전체 AUTORUN)
- CC 용접 OK, **UF 장변 PRE 출사 중 드로잉과 출사 위치 매칭이 안되는 이슈 발생**
- → 캘판 확인 결과 문제 없음 확인
- → front 위치 값 변경해서 확인 중
- → source 상 확인 중 front일 때 ct5이 적용된 상태로 쏴지는 지 확인 중 (pm9시)
---
### [결과] front일 때도 ct5는 적용된 상태로 출사됨 — "ct5 미적용"은 아님
> **소스 수정 없음. 분석만 기록.**
#### 1. ct5(보정테이블) 적용 여부 — Auto / Manual 모두 정상
| 경로 | 테이블 2(레이저 ct5) 선택 | 출사 | 테이블 1(Vision) 원복 |
|---|---|---|---|
| Auto | `SeqAutoRunPTOP.cs:796` (Laser Gate ON 직전) | `ExecuteList` | `:853` / `:993` / `:1237` |
| Manual | `SeqComponentTeachingRun.cs:301` (`InitializeDeviceStatus`, 진입 시) | `:616` `ExecuteList` | `:688` (`EndWelding`) |
| Manual(공통) | `SeqTeachingRun.cs:222` | `:362` `ExecuteList` | `:389` |
- 티칭런은 원복이 **루프 밖 `EndWelding`** 에 있어, 분할 객체 그룹을 몇 번 반복 출사하든 **전 구간이 테이블 2 상태**로 실행됨.
로그의 `Change SelectCorrectionTable Time` 이 run 당 1회만 찍히는 것과 일치(19:36 run = offset 로그 2회/원복 로그 1회).
- RTC 는 보정을 **리스트 실행 시점**에 적용하므로, Auto 가 업로드 뒤에 테이블을 고르는 순서 차이는 동작에 영향 없음.
- `SeqUploadWeldingList.cs` 자체는 `SelectCorrectionTable` 을 호출하지 않음(테이블 선택은 호출측 시퀀스 담당).
#### 2. Front offset 적용 여부 — 외곽 포함 전 객체 정상 반영
- `LaserAngleOffsetSelector.cs:26~36` — `D70510=89.0deg` < `avg 135` (Front=90/Down=180) → **Front 판정**,
`SystemParameter.FrontOffsetX/Y` 를 `SeqUploadWeldingList_InitParam.CellMeasureCenterOffsetX/Y` 로 전달.
- `SeqUploadWeldingList.cs:288~289` → `_ExternalCommandOffset` → 각 `Load*ScannerParam()` 의 `xOffset/yOffset`.
- 절대좌표 명령 **전수 확인 결과 누락 없음** — `JumpAbs / MarkAbs / ArcAbs / ParaJumpAbs / ParaMarkAbs` 60여 개 호출 전부
`+xOffset, +yOffset` 적용. Line·Dot·Spline·SnowMan·**Arc(외곽선+해칭)**·Arc3Point·ZigZag·Group 모두 해당.
- ⚠ **로그 함정**: `[Line Weld] Jump (x,y)` / `[Arc Weld] Arc center (...)` 는 **offset 적용 前 원본 좌표**를 찍음
(`:877`, `:1224`, `:1379`). 로그만 보면 offset 미적용처럼 보이나 실제 `JumpAbs()` 인자에는 들어감.
- 설정 변경은 **재기동 없이 다음 발진에 즉시 반영됨** — 오늘 로그 전체가 동일 프로세스(PID 4984)인데
FrontOffset 이 18:24 `(0.25, 0.11)` → 19:36 `(1.05, -0.1)` 로 바뀐 채 기록됨.
#### 3. 진짜 문제 — ct5 는 Front/Down 구분이 없음
- 스캐너 초기화 시 **테이블 2개만** 로드 (`ScannerRTC5.cs:65~80`, `ScannerRTC6.cs:69~84`)
- 테이블 1 = `Config.CorrectionFile` (Vision)
- 테이블 2 = `Config.LaserCorrectionFile` (Laser, 발진용)
- 즉 **수직(Down) 자세에서 취득한 ct5 를 Front 자세에도 그대로 사용**하고,
자세 차이는 `Front Offset X/Y` **상수 평행이동 하나로만** 보정 중.
- 좌표 자유도가 평행이동뿐임을 파이프라인 전체에서 확인:
- `Scanner.cs:314/418` — `JumpAbs/MarkAbs` 는 좌표를 그대로 통과시키는 래퍼(변환 없음)
- `ScannerConfig.cs` — 회전각·비등방 배율 필드 자체가 없음. `ScaleXYFactor:41` 는 전역 bits/mm 단일값
- 유일한 per-pose 변환 = `SeqUploadWeldingList` 의 offset 덧셈
→ **드로잉-출사 불일치의 원인은 "ct5 미적용"이 아니라, Down 자세 ct5 를 Front 자세에 그대로 쓰는 데 따른
배율/회전/키스톤 잔차로 추정.** 상수 offset 은 필드 전체를 동일하게 평행이동시키므로
원점 근처는 맞고 외곽으로 갈수록 벌어지는 현상을 보정할 수 없음.
#### 4. "사분면별로 offset 부호를 다르게" 검토 → 채택 불가
- 사분면마다 상수 offset 부호를 바꾸면 **축 경계에서 불연속** 발생. 원점을 가로지르는 장변/원호가 축에서 끊김.
스캐너 왜곡은 연속 함수라 계단형 보정 대상이 아님.
- 다만 "사분면마다 부호가 다르게 보인다"는 관찰은 **배율(스케일) 오차의 지문**이 맞음 —
`err = (k−1)·(x, y)` 이면 원점 0, Q1(+,+) Q2(−,+) Q3(−,−) Q4(+,−) 로 자동으로 부호가 갈림.
자유도는 4개가 아니라 **1개(배율)**.
- 유사 후보: 비등방 배율(kx≠ky), 회전(오차가 접선 방향), **키스톤** — Front 는 헤드가 기울어 있어 키스톤이 유력.
- 업로드단(`SeqUploadWeldingList`)에 배율을 넣는 방식도 불가:
`ArcAbs(cx, cy, sweep)` 은 중심점+쓸림각만 주는 명령이라 중심만 스케일하면 반지름이 어긋나고,
비등방이면 원이 타원이 되어 **`ArcAbs` 로 표현 자체가 불가** → 원호 전부를 직선 분할해야 하고
Spline·ZigZag·Wobbel 까지 연쇄 영향. **배율/회전/키스톤은 ct5 가 담당할 영역.**
---
### 다음 확인 (현장) — 지금 하는 front 값 튜닝이 곧 판별 시험
UF 장변이 판별에 적합. 19:36 로그 기준 라인 스팬 Y ≈ **+70.7 → −59.9 (약 130mm)** 로 오차가 증폭되어 보임.
1. FrontOffset 조정해서 **장변 한쪽 끝**을 드로잉과 일치시킴
2. 그 상태로 **반대쪽 끝** 확인
| 결과 | 판정 | 조치 |
|---|---|---|
| 반대쪽도 같이 맞음 | 순수 평행이동 | **파라미터 튜닝으로 종결** (코드/빌드 불필요) |
| 한쪽 맞추면 반대쪽이 그만큼 벌어짐 | 배율/키스톤 | **Front 전용 ct5 필요** (`k−1 = δ / 130mm` 로 배율 오차 산출) |
(정밀 판별이 필요하면 원점 + 축상 ±X/±Y + 4모서리 = 9점 마킹으로 평행이동/배율/회전/키스톤 성분 분해)
### 후속 작업
- [ ] 위 1·2 시험으로 오차 성분 확정 (평행이동 vs 배율/키스톤)
- [ ] (배율/키스톤일 경우) **Front 자세 전용 ct5 취득 후 테이블 3에 로드**, 각도 판정으로 2/3 분기
- `ScannerConfig` 에 `LaserCorrectionFileFront` 추가
- `ScannerRTC5.cs:76` / `ScannerRTC6.cs:76` 에 `LoadCorrectionFile(..., 3, ...)` 추가
- `SeqAutoRunPTOP.cs:796`, `SeqComponentTeachingRun.cs:301` 의 `SelectCorrectionTable(2)` 를
`LaserAngleOffsetSelector` 와 **동일한 각도 판정**으로 2/3 분기
- [ ] `SeqUploadWeldingList` 의 Jump/Arc 로그에 **offset 적용 後 좌표 병기** (현재 로그로는 반영 여부 판별 불가)
- [ ] (선택) Auto 의 `SelectCorrectionTable(2)` 를 Manual 과 동일하게 업로드 前으로 이동 — 순서 통일
- [ ] (선택) 티칭런 `OnStopped():757` / `OnForceError():733` 에 테이블 1 원복 없음 —
정지/에러 시 테이블 2가 남음. 스카우트(`SeqScoutNormal:204`)에서 1을 선택하므로 실사용 복구는 되나 명시 권장