TL;DR
- 누운 몸통 테스트가 중력 때문에 왜곡된 판정이었음. 몸통을 세우면 문이 기둥을 따라 123mm → 41/61mm까지 내려감 → 풀 수 있음.
- 문 끼우기·세우기·top 나사 체결·문 닫기를
solve.py에 구현. 전체 1/6, 병목은 몸통 세우기(3/6 수준).
1배경/목적
FurnitureBench 8종 중 cabinet은 처음에 "불가능"으로 분류됐다(261003 리포트: 스냅핏). 근거가 된 테스트는 누운 몸통에 문을 미는 것이었고 중력 때문에 결과가 왜곡됐다. 재확인 결과 top plate의 문 영역이 뚫려 있었고, 몸통을 세워 문을 떨어뜨리면 기둥을 따라 123mm → 41/61mm까지 내려갔다.
cabinet real 데모는 Google Drive 할당량 때문에 받지 못해 FurnitureBench scripted policy(cabinet_door.py, cabinet_top.py)를 참고했다. 순서: 누운 몸통에 문을 수평 슬라이드 → 몸통 세움 → top 나사 체결.
2작업 내용
대상: experiments/furniture_bench_franka/solution/solve.py (동결본 solution_cb1 … solution_cb24).
문짝 _cabinet_door
- 손잡이 고리(두께 7.5mm)를 위에서 잡음. 기준 위치에서 기둥 방향으로 16cm 물러난 뒤 4mm씩 closed loop 슬라이드.
- 문 높이
CAB_DOOR_RISE=1.5mm. 메쉬 signed distance 기준 FurnitureBench 값 5mm는 122mm 지점부터 top plate에 3mm 파고듬. 높이 여유 ±1mm.
- 진입 직전 팔 처짐 2–3mm는 높이 적분 보정(
zc)으로 보정. 막히면 높이 ±1–2.5mm 재시도, 몸통이 4° 이상 돌거나 15mm 이상 밀리면 중단, 그립 최대 3회 재시도.
몸통 세우기 _cabinet_stand
- stud를 잡고 먼 쪽 아래 모서리를 축으로 IK 원호 회전. 피치 후보 5–65° 중 회전 도달 각도가 최대인 것 선택, 이후 3cm 추가 push, 공중에서 수직 맞춘 뒤 바닥까지 내림.
- cb24: 회전 기준 모서리를 그립 직후 위치로 재계산하고 모서리가 테이블에서 뜬 만큼 손 높이 보정(closed loop).
top _cabinet_top · 문 닫기 _cabinet_close_door
- 120×58mm 블록 중심을 집어 stud 위에서 180°씩 돌리고 재파지(블록 180° 대칭). 메쉬 나사산 helix 확인: 오른나사, pitch 9.3mm → 위에서 볼 때 시계방향.
- 손 높이는 pitch만큼 내려가는 feedforward + 몸통 움직임 추종. 높이를 유지하면 나사가 가벼운 몸통을 들어 올려 넘어뜨림.
- 세우면 문이 40–160° 열림 → 오므린 손가락으로 앞면을 밀어 최대 3회 닫음. top 체결 전/후 2회 수행.
Scene (robobench/suites/assembly/scenes/furniture_bench.py)
DATUM_FIX: 왼쪽 문 기준 x -0.02275 -> -0.0275
(원래 값은 몸통에 2.86mm 파고듦, 허용오차 5mm 대비 여유 0.25mm)
hinge_parts / hinge_damping=20: PhysX에 관절 마찰이 없어 문의 끌림을 각감쇠로 대체
3결과
| 단계 | 결과 |
| 문 2개 (cb16 + cb14) | 5/6 (오차 0.5–1.7mm) |
| top 단독 (cb6/cb7/cb11, seed 0/2/4) | 3/3 (오차 0.1–0.3mm, cos 0.99+) |
| 몸통 세우기 | ~3/6 (공중 3cm 뜸, 넘어짐, IK 끊김) |
| 전체 (cb23) | 1/6 (seed 2): 문 1.5/1.0mm, top 0.2mm, cos 0.999 |
실패한 시도: 문 5mm 띄움 → 진입 시 걸림 / 0.5mm 띄움 → 팔 처짐 걸림 / 몸통 3mm 밀림에서 중단 → 진입 즉시 중단 / 손잡이 잡아 닫기 → IK 자세 없음 / 감쇠 없이 밀어 닫기 → 문이 91° → 161°로 더 열림.
4Takeaway
cabinet도 단일 팔 scripted solve로 풀림(첫 성공). 261003의 "강체 시뮬레이션에서 불가" 결론은 누운 자세 테스트의 중력 왜곡에 의한 오판.
해석
세 하위 단계 중 문(5/6)과 top(3/3)은 안정적이고, 몸통 세우기(~3/6)가 전체 1/6의 지배적 병목이다.
5Next Steps
- cb24(closed-loop 회전)로 세우기 성공률 측정.
- top이 테이블에서 떨어져 나가는 경우(seed 5, 1182mm) 분석.
- chair: real 데모 재시도(1시간 간격 루프) + FurnitureBench scripted chair 참고.
- sim-to-real(AprilTag 텍스처, 카메라, 배경 정렬)은 cabinet/chair 이후(사용자 결정).