TL;DR
- 8종 모두 카메라 기록 가능: 카메라·배경·tag 보드 코드를
scenes/furniture_cameras.py 공용 mixin으로 분리했다.
- 행동 의미 정합: real 장비는 행동의 22%를 3프레임(0.3 s) 뒤에 수행한다(R² 0.68–0.86). 이를 역산해
actions를 만들었고, 원래 값은 actions_achieved로 보존한다.
--fb-reset: real 시작 자세에서 시작한다. 시작 ee 오차는 12 mm 이내이고 4/4 성공, solve 시간은 절반이다.
- 시험 기록: home 시작 18/24 성공. 본 생성으로 6종 × seed 0–15를
--fb-reset으로 실행 중이다.
1배경/목적
sim 데모로 학습한 정책을 real FurnitureBench 로봇에서 돌리려면 세 가지가 real과 같아야 한다.
10/05까지 텍스처, 카메라, 기록기를 만들었다. 다만 다리 계열 4종에는 카메라가 없었고, 행동 형식은 검증하지 않은 상태였다.
2작업 내용
- 카메라 공용화:
FurnitureCameraCfg(필드)와 FurnitureCameraMixin을 두 씬 클래스가 상속한다. 다리 계열에는 흰 ㄷ자 막대와 parts 목록을 추가했다.
- 행동 정의 확인: FurnitureSim의 행동은 현재 ee 기준 목표다(
goal = ee + a, goal_q = ee_q · a_q, OSC 추종).
- real 응답 추정: real chair 데모 3개에서 ee 이동을 지연 0–10 행동에 최소제곱 회귀했다.
- 변환:
actions[t] = achieved[t+3] / gain, 그리퍼 명령도 3프레임 앞당긴다. robot_state에 real과 같은 속도·토크 키를 추가했다.
- wrist 카메라 frame 0 버그 수정: reset 직후에는 링크에 붙은 카메라가 스폰 위치에 남아 있다. 물리 1스텝 후 기록하도록 고쳤다.
- 실패본 분리: 실패 에피소드는
<out>/_failed/에 저장한다.
real 응답 (chair 00000–00002, 지연 k = 0..10 탭)
위치 : k=2 0.05, k=3 0.20–0.21, 합 0.22 R² 0.68–0.86
회전 : k=3 0.14–0.16, 합 x 0.12 / y 0.19 / z 0.19
그리퍼: 명령 변경 후 3–5 프레임에 폭 변화 시작
3결과
| 항목 | real | sim (기존) | sim (변환 후) |
| |dpos| 평균 x/y/z (mm) | 6.6 / 6.0 / 6.9 | 0.9 / 0.8 / 1.9 | 4.2 / 3.7 / 8.5 |
| |dquat| 평균 x/y/z | 0.013 / 0.021 / 0.111 | 0.001 / 0.001 / 0.007 | 0.007 / 0.006 / 0.034 |
| 가구 (home 시작, seed 0–3) | 성공 | 비고 |
| square_table | 4/4 | 3252–3838 프레임 |
| desk | 4/4 | |
| round_table | 4/4 | |
| drawer | 3/4 | s1 실패 |
| lamp | 2/4 | 기존 6/6 |
| stool | 1/4 | 기존 약 3/6 |
square_table · round_table --fb-reset | 4/4 | 시작 ee (0.567, 0.055, 0.124) vs real (0.561, 0.055, 0.112) |

행마다 front | wrist 쌍을 0% / 40% / 100% 시점으로 보여준다. 위 6행은 sim 6종(home 시작), 그 아래 2행은 --fb-reset, 마지막 행은 real chair다. 첫 열 wrist 영상의 회색 덩어리는 frame 0 버그로, 수정 완료했다.

frame 0, 1, 2, 3, 5, 10, 20, 40의 wrist(위)와 front(아래). frame 1부터 손가락과 부품이 real과 같은 구도로 보인다.
chair s3 기록 실패의 원인은 기록 버그가 아니다. 카메라를 켜면 부품 초기 위치가 1–2 mm 달라지고, 좌판이 up z 0.50에서 멈췄다. 같은 이유로 lamp와 stool도 성공률이 떨어졌다.
4Takeaway
real 장비는 행동을 0.3 s 늦게, 22%만 수행하는 저역통과 시스템이다. sim에서 실제로 움직인 양을 그대로 행동으로 쓰면 real에서 약 4.5배 덜 움직인다. sim-to-real에서는 영상보다 이 행동 정합이 먼저 맞아야 한다.
real 시작 자세를 쓰니 해법이 더 빠르고 안정적이었다. 손이 작업물 근처에서 시작하기 때문이다.
5Next
- sim 데모 행동을 real 로봇에서 재생해 22% / 3프레임 모델을 검증한다(하드웨어 필요).
- front 카메라를 base tag 코너 PnP로 보정한다. 조명과 노출도 조정한다.
- chair와 cabinet은 seed를 많이 돌려 성공본만 수집한다.
- lamp와 stool이 기록 중 실패한 원인을 분석한다.
- 본 생성(job 176148–176171) 결과를 집계한다.
6업데이트: 본 생성 결과와 lamp 원인
가구 (--fb-reset, seed 0–15) | 성공 데모 |
| square_table | 15 |
| desk | 15 |
| round_table | 14 |
| drawer | 11 |
| lamp (들어올리기 수정 후, 수정 전 1/15) | 11 |
| stool | 7 |
| 합계 | 73 (62 GB) |
- A/B (카메라 없이 seed 0–3): 새 에셋, 백업 에셋, 새 에셋 + 카메라 모두 s0·s1 성공, s2·s3 실패로 같았다. 에셋과 카메라는 원인이 아니다.
- 해법 버전 v12/v16/v20/v24/v27: seed별 성공이 버전 순서와 무관하게 섞였다. 10/03에 성공한 v12 s3도 지금은 실패한다. 나사 조임 접촉이 혼돈적이다.
- fb-reset 특유의 실패: 손이 부품 12 cm 위에서 시작해 첫 이동이 받침과 갓을 쳤다. 기록 전에 reset → home으로 joint 보간해 들어 올리도록 고쳤다(FK상 x 0.50–0.57에서 수직 상승). 결과 11/16.
접촉이 혼돈적이라 seed별 성공을 예측할 수 없다. 데모는 성공본 필터링으로 수집한다.