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

OpenArm 2.0 × FurnitureBench one_leg — oracle 하네스 양팔 조립 진단 (v8→v12b, 조립 성공 0/5)

FurnitureBench | OpenArm 2.0 | scripts/openarm_harness | core/extra, 1 episode = 1 job

TL;DR

0/5
assemble 성공
3/3
right grasp
0.037 mm
control max err
16.68→6.46
mm rel. pos err (v8b→v11)

1 배경 / 목적

계획서 .omx/plans/20260918-openarm2-furniturebench-harness.md의 질문 3개: (1) 이 배치·그리퍼·제어기로 도달·파지·운반·삽입이 가능한가 → (2) 현재 세션이 영상·실측을 보고 성공하는 실행 계획을 만들 수 있는가 → (3) 보지 않은 초기 상태에서도 성공하는가. 이 카드는 (1)의 개발 seed 9201–9203 단계다. 전략은 한 팔이 상판을 누르며 지지(press), 다른 팔이 다리를 조립.

조건 (과대 해석 금지): 부품 정답 pose를 쓰는 privileged oracle 진단이며 episode 내 모델 호출은 0. 결과 명칭은 “OpenArm-adapted FurnitureBench”로 stock Franka 점수와 동일 조건이 아니다. 한 job = 한 episode, 전부 core/extra, worker 원격 제어 없음(완료 후 보고서·영상 검토 → 다음 독립 실험).

2 작업 내용

scripts/openarm_harness/{scene,kinematics,controller,geometry,run,submit,summarize}.py + evaluate.sh, tests/openarm_harness/ (v8 시점 CPU 테스트 22개) Kinematics : OpenArm URDF root-frame FK/IK (Franka 상수·OSC 미사용) Controller.move : Cartesian 위치 + SLERP, 샘플마다 IK · table/rail/cross-arm AABB 검사 · 실측 추종 검사 (tolerance 예: unseat 3 mm) v9 이후 distal-arm(link3 이상, shoulder mount 제외) ↔ mast convex-face 검사 추가. 그 밖의 self/dynamic 충돌은 물리엔진에만 맡김(사전 검사 아님) Grasp gate : ≥3 cm lift를 1 s 유지, ≥4 cm 이동(5 cm carry 요청), 놓은 뒤 1 s 정착 — finger 닫힘만으로 성공 판정 안 함 Assembly report : 공식 success latch / 종료 시 동시 매칭 / release 후 안정성을 분리 기록 submit.py : 실행 소스를 *_bundle로 복사 + 의존 hash 기록, --source-bundle로 동일 스냅샷 재사용(변경 시 제출 거부)

시도 이력 (조립 경로)

손목 카메라 광축 수정: attachment를 +90° Y 회전해 광축을 tool −Z로 교정(기존 identity는 tool +X를 향해 이전 영상이 옆을 봄). 실제 renderer 보정 행렬 + 61 step probe(camera_axis_debug_v7)로 확인. 실물 광학 보정은 주장하지 않음.

3 결과

Job버전gate결과
135791 / 135792v2-leftcontrol / graspcontrol 통과(TCP 최대 0.064 mm), grasp 실패: joint_branch_jump (place_leg IK)
135987v4-leftcontrol통과 — 양팔 Cartesian 이동 12회, 최대 위치 오차 0.037 mm
135988 / 135989 / 135990v4-leftgrasp seed 9201/9202/92032/3: lift 59.30/59.18 mm, carry 50.00/49.96 mm, release drift 0.67/1.54 mm. 9203은 접근 IK 거부(wrist limit)
136015v6-bimanualsupport (rim pinch)실패: 접근 목표보다 16.4 mm 벗어남, finger1 접촉력 ≈17 N → 고정 front rail 충돌 유력. 의존 job 136016–19 취소(정책 실패로 집계 안 함)
136171 / 136178 / 136179v7-rightgrasp seed 9201/9202/92033/3 통과: lift 59.43/59.5/59.4 mm, carry 49.97/49.9/50.0 mm, release XY drift <0.81 mm
136173 → 136188v7/v8 presssupport통과: 1 s 접촉 유지, 최대 net finger force 2.07 N, 상판 drift 0.8–0.9 mm (삽입 하중 저항은 미검증)
136190v8bassemble (얕은 삽입)공식 false: release match 0/120, robot contact 0, 다리는 서 있음. 상대 위치 오차 16.68 mm, 회전 13.38°
136238v9 regraspassemble실패: park_before_regrasp TCP 오차 32.94 mm — body_link0 ↔ right_link4 서로 반대 ≈99 N net contact(팔-몸통 간섭)
136270v10 mast guardassemble실패: park 통과(0.0133 mm) 후 jaw 닫는 중 다리가 넘어짐, empty-grasp gate가 중단(finger ≈0)
136298v11 antipodalassemble실패: 재파지 성공(finger −0.1625/−0.1605 rad), 부품 오차 6.46 mm/2.67°, 삽입이 TCP 추종 오차 5.42 mm에서 중단
136331v12bassemble (unseat→정렬→단계 삽입)실패: 재파지 후 첫 이동 unseat_regrasped_leg에서 위치 오차 9.25 mm(허용 3 mm), 회전 0.0254 rad
9 / 9 / 7
episode job 통과 / 실패 / 취소 (25)
12
의존 취소 (dev 2 + held-out 10)
≈2 h 02 m
v8b 제출→v12b 종료 (02:04:56→03:06:39)
파지·지지 축은 신뢰할 만함: 왼팔 profile(v4)은 seed 9203에서 wrist limit IK 거부(2/3)였으나 오른팔 profile(v7)로 바꾸자 3/3. 상판 press는 rim pinch(고정 rail 충돌, 17 N)를 버리고 상판 안쪽 닫힌 손가락 press로 바꿔 통과.
v12b 실패 (136331): 재파지(finger −0.157/−0.178 rad)까지 성공했으나 첫 이동 unseat_regrasped_leg에서 요청 z 0.5337 m 대비 실측 0.5249 m(8.8 mm 부족), settled=false, 위치 오차 9.25 mm > 허용 3 mm → measured tracking failure. 원인은 아직 미확정(가설: 다리가 소켓/상판에 걸려 저항 vs 손목 한계 부근 IK) — 영상·trace 검토 전이라 단정하지 않음.
문서/실측 불일치: status_20260918.md 마지막 항목은 “136331 PENDING, capacity blocked”로 끝나지만 sacct 기준 136331은 03:04:03 시작·2:36 실행 후 FAILED, 의존 12 job은 CANCELLED, 요약 job 136395(03:07)는 전부 no_report로 기록. status 문서는 실행 이전 상태에서 멈춰 있다.

4 Takeaway

의미

OpenArm 2.0 양팔의 도달·파지·운반·상판 지지는 oracle 조건에서 물리적으로 가능(3/3, 0.8 mm drift)하다. 병목은 파지 이후 정밀 삽입이며 5회 시도가 서로 다른 지점에서 실패: 삽입 미완(v8b) → 팔-몸통 99 N 간섭(v9) → 닫힘 방향(v10) → 삽입 추종 5.42 mm(v11) → unseat 추종 9.25 mm(v12b). v11이 가장 멀리 갔고(부품 오차 6.46 mm) v12b는 삽입 전 단계에서 멈췄다 — unseat 단계 추가가 새 실패 지점이 됐다.

따라서 질문 (1)은 “아직 아니오/미확정”, (2)(3)은 시작 전. 조립 성공·held-out 성능·실물 전이는 이 카드가 아무것도 주장하지 않는다.

5 Next Steps

미해결 한계

삽입/나사 체결 자체는 미구현(--stage assemble은 oracle 진단, screw 동작 없음). 충돌 사전 검사는 정적 table/rail/cross-arm AABB + distal-arm/mast convex face로 한정되며 동적 부품·기타 self-collision은 미검사. 지지 press는 삽입 하중 저항이 검증되지 않았다.

다음 실험

  1. v12b motion.mp4·trace.jsonl로 z 8.8 mm 부족의 원인 분리 (다리 저항 vs IK/관절 한계). 허용 오차(3 mm)·충돌 검사는 완화하지 않는다.
  2. 원인에 따라 v13: unseat 없이 현재 얕은 삽입 상태에서 재파지 후 수직 압입, 또는 unseat 속도·경로 조정. 새 output dir(preempt 재시도 포함)로 독립 job 1개씩.
  3. 개발 seed 9202/9203 통과 후 소스 동결(--source-bundle) → unseen 10 seed(94001–94010) 평가. 죽은 조건부 체인은 재제출 필요.