기존 260915 카드(cartesian_source_ik_bridge)에서 공식 DROID RobotIKSolver를 teacher-forced로 재현해 rows 9-40 전부 bitwise 일치(RMSE=0)를 확인했고, 70ms causal bridge smoke도 성공했다. 이번 세션은 그 다음 단계로 진짜 causal 폐루프(매 스텝 현재 시뮬레이션 상태로 fresh IK를 다시 푸는 방식)에서 오차가 어디서 오는지 — state drift인지, action 적용 타이밍인지, controller feedback gain인지 — 를 분리했다.
HYPOTHETICAL_LOCAL_DLS...NOT_2023_CONTROLLER_OR_IK_TRUTH) 상태였다. 원인이 IK 알고리즘 자체(이미 260915에 배제)인지, 아니면 폐루프 상태 drift·타이밍·gain인지 확인이 필요했다.
rows 9-40 free space(테이블/오브젝트 없음), B125615 XML + 125316 hybrid 행렬(factor 0.5) 고정. 매 제어 스텝마다 현재 시뮬레이션 q/qvel + 해당 row raw 6-vector Cartesian velocity로 fresh IK를 새로 풀어 qdes를 얻고, non-finite 값·BADQPOS/QVEL/QACC 카운터 증가 시 즉시 중단하는 안전장치 포함. 32 read samples, 31 controls, 2170개 1ms step.
이전 결과가 "action-state를 관측 시점(66ms 이전)으로 되돌리면 나아지지 않을까"라는 가설을 테스트. control_start(env.step 이전)와 step_end(호스트 반환 이후) 사이를 관측 read-start 상태들로 선형보간해 action-state와 비교. 로봇 command 전송이 unjoined 백그라운드 스레드라 어느 시점도 실제 actuation timestamp는 아님을 명시.
Facebookresearch/fairo commit 0a01a7f의 franka_hardware.yaml 기본값(Kq/Kx/Kxd는 130562의 2배, Kqd는 동일)으로 완전히 교체 — gain sweep이 아니라 "공식 소스가 실제로 쓰는 preset 그대로"라는 단일 비교. 130562 커널을 그대로 복사해 production 경로는 항상 fresh IK를 재계산하도록 유지.
| Partition | Source-IK q RMSE (130562) | 이전 DLS | Recorded-target oracle | DLS 대비 감소 |
|---|---|---|---|---|
| Fit rows 9-30 | 0.02315894 rad | 0.03699890 rad | 0.00830596 rad | 37.4% |
| Holdout rows 31-40 (nonblind) | 0.04412068 rad | 0.06528948 rad | 0.01019340 rad | 32.4% |
| Controls | State term RMSE | Delta term RMSE | 합성 target 차이 |
|---|---|---|---|
| 9–30 (22개) | 0.0246952 rad | 0.00379495 rad | 0.0225991 rad |
| 31–39 (9개, nonblind) | 0.0443339 rad | 0.00606490 rad | 0.0435914 rad |
| 비교 대상 | Fit RMSE (rad) | Holdout RMSE (rad) |
|---|---|---|
| 시뮬레이션 상태 vs recorded action state | 0.0246952 | 0.0443339 |
| Control-start 보간 상태 vs action state | 0.00025591 | 0.00017120 |
| Step-end 보간 상태 vs action state | 0.00089856 | 0.00074421 |
호스트 호출 시간은 2~6ms(median 3ms)에 불과 — action-state는 이미 control_start와 거의 일치하므로, action-state를 66ms 뒤로 옮기는 재해석은 근거 없음으로 기각.
| Preset | Fit q RMSE | Holdout q RMSE |
|---|---|---|
| 130562 (기존) | 0.0231589400 | 0.0441206816 |
| Fairo 공식 기본값 | 0.0906692770 (3.91x) | 0.1951873293 (4.42x) |
이번 확장으로 original-action Cartesian replay 실패(125568)의 잔차 성격이 더 명확해졌다: IK 알고리즘 자체(260915에 이미 배제), action-timestamp 해석(오늘 배제) 모두 원인이 아니고, 폐루프 상태 누적 drift가 지배적이며 controller gain은 알려진 하나의 preset(130562) 근방에서 민감하다. 즉 다음 개입은 "숫자를 더 튜닝"하는 게 아니라 2023 실제 하드웨어 설정에 대한 소스 근거를 더 찾아야 하는 문제로 좁혀졌다.
State term(0.025~0.044 rad)이 왜 이렇게 크게 누적되는지 아직 분해되지 않았다 — 원본 action-space가 velocity인지 다른 표현인지도 확정되지 않음. Full-task(오브젝트 포함) contact 재현 실패(125568)는 이번 robot-only 진단으로는 아직 복구되지 않았다.
1) gain/delay grid search는 금지 — 대신 소스 근거(2023 하드웨어 로그, 추가 공식 문서)가 확보될 때만 하나의 bounded intervention을 시도. 2) state term이 dominant이므로 state 초기화/누적 방식 자체를 다음 진단 대상으로 지정. 3) wall/camera 진단(260917-scene_camera_correspondence_chain.html)과 독립적으로 진행 — 두 트랙 모두 G001/G003 완료 조건에 필요.