Index
2026-09-18 ~ 09-19 — Engineering

native_icl 하네스 개선 — 연속성 검사 v1→v6과 제어·감시 옵션 (CPU 테스트 43→146)

FurnitureBench | scripts/demo_icl_sensor | continuation_guard / motion_guards / grip_guard / camera_profile

TL;DR

146
CPU 테스트 (43→146)
23.1%→2.49 mm
stage 006 거부 → v6 표면 거리
23
continuation 거부 (Trial 1 종료 시점)
228 / 233
native_icl job COMPLETED (sacct 09-17~)

1 배경 / 목적

카드 native_icl 첫 파지의 stage 006은 “cross-job 물리 restore 검증 실패”(카메라1 국소 depth 변화 23.1%)로 파지 성패 판정 전에 멈췄다. native_icl은 실행 중 worker에 명령을 보낼 수 없는 클러스터 제약(§4 job 격리) 때문에 job 1개 = 관측 1회 + 액션 1개이고, 물리 상태는 checkpoint로만 이어진다. 따라서 이어받은 상태가 실제로 이어졌는지를 센서만으로 검사하는 continuation guard가 핵심 병목이고, 그 검사와 stage 내부 제어의 품질이 곧 실험 결과가 된다.

원칙 (문서에 고정): 물리·마찰·그리퍼 힘·메시·성공 판정은 바꾸지 않는다. 검사 기준을 통과시키려고 값을 완화하거나 결측을 외삽하지 않는다. 기존 거부와 continuation_breaks를 소급해 통과로 바꾸지 않는다.

2 작업 내용

2-1. 복원 검사 v1 → v6

버전시점변경근거 / 결과
v1stage 006고정 카메라·wrist 픽셀 깊이 직접 비교국소 변화 23.1% → continuation_rejected (EE 오차 0.000127 m 등 로봇 상태는 정상)
v209-18wrist 국소 검사를 보정 RGB-D + 측정 EE pose로 얻은 로봇 좌표계 표면의 양방향 최근접 거리로 교체 (5 mm, 국소 15%)픽셀 대응이 로봇 미세 이동에 깨지는 문제 제거
v309-18wrist 전체 깊이 검사도 로봇 좌표계 표면으로 (5 mm, 전역 1.5%, 국소 15%)국소/전역 일관, 정면 카메라·RGB·로봇 상태 검사 유지
v409-18043→044, 044→045: 먼 바닥(7~200 m) 성긴 표본이 최근접 점 5 mm 초과 → 완전 관측된 3×3 패치 평면성(잔차 ≤1 mm)+삼각형 내부 포함 시에만 면까지 거리 사용결측 채움·외삽·비평면 연결 금지. 88 tests, 과거 단절 8회 보존
v509-183×3 중 관측점 ≥6개 평면성 1 mm, 세 꼭짓점 모두 관측된 삼각형만 보간90 tests. 그래도 047→048→049 원거리 바닥 경계 국소 17.49% 거부 → stage 050 = 046 rewind
v609-19두 카메라 모두 관측 표면 간 거리(고정 카메라 픽셀 깊이의 경사면 오탐 제거). 이미 거부된 검사에선 추가 표면 계산 생략 가능(명시)obs 313→314 최악 타일: 픽셀 깊이 변화 51.4% vs 실제 표면 거리 최대 2.49 mm

2-2. stage 내부 제어·감시 옵션 (기본 off, 모델이 동작마다 명시)

옵션도입이유 / 검증
ramp_control_steps(1–40) + 절대 목표 램프stage 061 적용3 mm 병진 상한이 계속 포화 → 입구 전 X/Z ≈13/11 mm 처짐. 원래 축별 35 mm 상한 유지 + 30 step 참조 램프로 교체
position_integral(≤20 mm), orientation_integral, rotation_error_gain(1–2)stage 059~068stage 067: 위치 0.2 mm 도달·각도 0.0245 rad 잔존, 적분 bias가 0.05 rad에서 포화 → 상한 0.12 rad (기본 off, 이동마다 초기화)
settle_control_steps(0 또는 4–80)stage 071측정 시작 pose 유지 후 이동, 마지막 4 step 미충족 시 settle_timeout으로 전진 안 함. 070은 대기 중 취소, 071이 첫 검증
release_gripperstage 054~064개방하며 이탈. 상승 중 개방(stage 064)을 시뮬레이터에서 1회 검증
min_gripper_width_m / 최대 폭 조건최소: 초기, 최대: stage 223 이후폭이 범위를 벗어나면 grasp_width_lost 중단(잡힘 성공 판정은 아님). stage 223에서 7.30 mm로 벌어진 사례
stationary_tag_guard, stop_on_stall(12 sample), stationary_depth_guard(영역 1–4)stage 145~158Trial 1 stage 138의 접촉 중 하우징 이동을 실시간 중단으로 대응. 힘 센서·충돌 인증 아님, 샘플 사이 이동은 못 막음
on_continuation_rejection=hold_current_robot_posestage 141capture에서만: 거부돼도 새 관측 저장 + 그 EE pose로 50 step 유지(상한 60). 원 요청은 무효·거부 횟수 증가
observation_refresh_frames(1–20) 폐기stage 14020 frame 동안 마지막 토크 유지 → 팔 21 cm 이동. 이후 1만 허용, 추가 45프레임은 action 수와 분리 기록
observation_profile=wrist_front_rear_rgbdstage 212후방 고정 RGB-D 추가(capture 결정에서만, 동작과 동시 불가). 3-view 결과는 2-view와 동일 입력 예산으로 보고 금지

보조 도구: inspect_native_stage.py는 job 종료 확인 후 정해진 경로·hash가 맞는 공개 관측만 출력(raw log·체크포인트·오류 상세 미노출), robot_gripper_geometry.py는 URDF 손목·손가락 collision 형상만으로 EE 후보의 범위를 계산(물체 mesh·scorer 목표 미열람, 충돌 안전 인증 아님).

3 결과

CPU 테스트 수시점
43stage 006 (첫 파지 카드)
88v4 관측면 복원
90v5
96release_gripper (제어 경로 테스트 6개 포함)
104orientation_integral
105stage 061/068 상한 수정
108settle_control_steps
118rejection hold
124stationary_tag_guard/stop_on_stall (+simulator Python3.8 6개)
128stationary_depth_guard (+simulator 10개)
146최종 (+ 카메라 구성 7개, 실행 환경)
v6 효과 (관측 313→314): 픽셀 깊이 변화 비율 51.4%였던 최악 타일이 표면 최근접 거리 기준 최대 2.49 mm (기준 5 mm 이내). 경사진 로봇 표면이 작게 움직이면 광선 방향 깊이가 크게 바뀌는 오탐이었다.
v5까지 못 넘긴 사례: 047→048→049는 wrist horizon의 150~280 m 바닥 경계에서 국소 17.49% 거부 — 측정 표면 밖 외삽 금지 원칙상 통과 처리하지 않고 stage 046 rewind(050). rewind는 시뮬레이션 체크포인트 되돌림이며 물리적 연속 복구가 아니다.
재발 결함: stage 060에서 3 mm 병진 상한이 계속 포화해 입구 전 X/Z가 ≈13/11 mm 처졌고(→ 30 step 참조 램프), stage 230에서 같은 종류의 상한이 높이 지지를 잘라 EE가 29.3 mm 처졌다(명령 ≈+2.5 mm Z vs 목표 68.2 mm).

운영 지표(sacct, 09-17 이후 fb_native_icl_stage 233 job): COMPLETED 228, FAILED 2, CANCELLED 2, TIMEOUT 1. Trial 1 종료 시점 총 관측 거부 23건(활성 분기 단절 21건), Trial 2 이어받기 거부 3건(CURRENT_PROGRESS_KO.md).

4 Takeaway

의미

거부의 상당수는 비교 공간 문제(픽셀 대응·성긴 원거리 표본)였고, 임계값 완화 없이 비교 공간만 바꿔 오탐을 줄였다. 이로써 stage당 30~50초짜리 job 체인이 실제 조립 시도(Trial 2, stage 145→230)를 이어갈 수 있게 됐다.

반대로 검사가 보장하지 못하는 것도 분명하다: PhysX 접촉 캐시는 저장되지 않고 복원 시 물리 1 step이 진행되므로 “보이는 상태의 일관성”만 검증한다. stage 165(접촉 후 하우징 7 mm 이동)·141(홀드 후 가구 이동 정착)처럼 숨은 접촉 상태 변화는 guard를 통과한 뒤에도 발생했다.

5 Next Steps

미해결 한계

v6가 wrist horizon 원거리 표본 사례(047→049형)를 실제 worker 복원에서 통과시키는지는 재현되지 않았다(v5까지는 CPU 재검증만). 접촉 중 이동 감시는 샘플 사이 움직임을 막지 못하고 단색 평면의 접선 운동을 놓칠 수 있다. 제어 옵션이 늘어 모델의 옵션 선택 오류(stage 230형)가 새 실패원이 됐다.

다음 작업

  1. norm cap 계열 옵션은 위치 피드백과 높이 보상을 분리해 “상한이 보상을 자르지 않음”을 CPU 제어 경로 테스트로 고정(stage 230 재현 케이스 추가).
  2. guard 통과/거부와 실제 물리 연속성의 일치도를 측정: 복원 직후 공개 관측 vs 연속 실행 관측 비교 실험(별도 worker).
  3. 실물 적용 시 후방 카메라 포함 내부·외부 보정 실측(CALIBRATION_KO.md 절차) — 시뮬레이터 보정값(simulated_sensor)으로 대체 금지.