UR5e · OnRobot 2FG7 · Intel RealSense D435i

UR5e Sim2Real Bin Picking

5 cm 큐브를 집어 작업면 위 가변 목표에 놓는 과제를 NVIDIA Isaac Lab에서 학습하고, 같은 관측·행동·안전 계약을 그대로 유지한 채 실기 UR5e로 옮기는 프로젝트입니다. 상태 기반 Teacher를 PPO로 먼저 학습한 뒤, RGB-D 영상만 보는 Vision Student로 증류합니다.

문서프로젝트 개요
판정 기준일2026-09-25
sim 봉인 평가✓ Teacher · Student 통과
실기 평가✕ 파지 0 / 10 · 재실험 예정
배포 레인랩 실험 레인 (adopted: false)

00현재 판정

Teacher v2(34D, 대칭 그리퍼)와 Vision Student가 모두 sim 봉인 평가(seed 42–45 × 512 = 2,048 에피소드, 보조 없음)를 통과했습니다. 실기에서는 Vision Student를 10회 실행해 파지에 한 번도 성공하지 못했고(0 / 10), 원인 분석 후 재실험할 예정입니다. 정식 릴리스 레인(패리티·지연 벤치마크·커밋 동결)은 거치지 않았습니다.

Teacher(왼쪽)와 Vision Student(오른쪽)가 5 cm 큐브를 집어 목표 위치에 놓는 Isaac Sim 롤아웃
채택된 Teacher(왼쪽, 34D 상태 관측)와 Vision Student(오른쪽, RGB-D 영상 관측)의 Isaac Sim 롤아웃
Teacher 성공률 (placed)
100.00%
Wilson 95% 하한 99.81% · 2,048 / 2,048
Student 성공률 (placed)
94.53%
Wilson 95% 하한 93.46% · 1,936 / 2,048
정책당 봉인 평가
2,048
에피소드 · 인식 오차 DR과 실행 제한 적용
실기 파지 (Vision Student)
✕ 0 / 10
false grasp · 원인 분석 후 재실험 — 영상과 분석

01실기 배포 — Vision Student 10회 평가

실제 UR5e · OnRobot 2FG7 · RealSense D435i에서 Vision Student 정책을 실행한 장면 (원본 속도, 27초)
실행sim에서 학습한 Vision Student, 실기 10회
파지 성공0 / 10
실패 양상카메라 영상만으로 큐브에 접근·하강했지만 집지 못함. 정책 내부의 held latch는 파지로 판정한 false grasp

예상 원인

  • 핑거 폭 · 파지력 피드백 없음 — 명령 상태만으로는 미파지를 구별하지 못한다
  • 근접 시 카메라 FOV 이탈과 depth 결측
  • 그리퍼 지연, TCP 오프셋(미보정)

다음 단계

핑거 폭 · TCP 높이 · 깊이 영상을 단계별로 기록해 원인을 분리한 뒤 재실험합니다. 원인이 해소되기 전까지 실기 자동 작업 배포는 보류합니다.

02작업 셀

툴 체인

  1. UR5e 6축 협동 로봇, base 고정RTDE servoL · 20 Hz
  2. Magbot TCW1 툴 체인저tool0 → 86.5 mm
  3. 브라켓 + Intel RealSense D435i eye-in-hand RGB-D848 × 480 · depth→color 정렬
  4. OnRobot 2FG7 평행 그리퍼, 양 손가락 대칭 구동내측 폭 74 / 34 mm · DO 펄스 개폐

기하 (base frame, m)

물체한 변 0.05 큐브 1개
작업면중심 (−0.50, 0.00) · 0.58 × 1.25 × 0.04
상면 z = −0.0375
목표 구역x ∈ [−0.725, −0.275]
y ∈ [−0.300, 0.300] · z = −0.0125
안전 AABB(−0.75, −0.35, −0.0375) – (−0.21, 0.35, 0.60)
TCP 하강 바닥z = −0.0075

전체 치수도는 저장소의 ur5e_workcell_drawing.html에 있습니다.

03파이프라인 — Phase 0 → 4

  1. PHASE 0

    환경 · scene smoke

    • Isaac Sim 5.1 + Isaac Lab v2.3.2 기동 확인
    • flange–TCW1–2FG7 체인, 카메라 방향, 작업면 육안 확인
    • RL 이전 파지 물리 진단
    Phase0/scene_bin_ur5e.py
  2. PHASE 1

    State Teacher · PPO

    • 배포 가능한 34D 관측만 쓰는 actor
    • critic은 sim 참값을 더한 비대칭 관측
    • 인식 오차 DR, 실행 속도 상한 clamp
    • 16,384 env × 25k iter
    scripts/train.ps1 -Preset Teacher
  3. PHASE 2

    RGB-D Vision Student

    • 채택 Teacher의 행동을 정답으로 증류 (rsl-rl DistillationRunner)
    • RGB-D 112² + 고유수용 관측
    • 512 env × 25k iter
    scripts/train.ps1 -Preset Distill
  4. PHASE 3

    캘리브레이션 · sim 리허설

    • TCP offset, ChArUco hand-eye, scene registration
    • 실기 배포 코드 경로를 sim 로봇에 물려 리허설
    deployment/Calib_*.py
    Phase3/SimDeploy_Rehearsal.py
  5. PHASE 4

    fail-closed 실기

    • SafetyGuard 속도·작업영역 clamp, e-stop latch
    • 증거·캘리브레이션이 없으면 실행을 거부
    • 모션은 명시적 인가 플래그로만
    Phase4/Run_Task_Teacher.py
    Phase4/Run_Task.py

04관측 · 행동 계약

Teacher actor 관측

  • 관절 위치 · 속도12
  • gripper_command_state1
  • TCP pose7
  • 목표 위치3
  • 큐브 위치 추정치3
  • held latch1
  • 직전 행동7
  • 합계34D

카메라 영상은 보지 않습니다. 큐브 위치는 참값이 아니라, 실기 depth 인식 모듈과 같은 규칙(결측·편향·노이즈)으로 만든 추정치입니다.

Student actor 관측

  • depth 1 × 112 × 11212,544
  • RGB 3 × 112 × 11237,632
  • 관절 위치 · 속도12
  • gripper_command_state1
  • TCP pose7
  • 목표 위치3
  • 직전 행동7
  • 합계50,206D

전처리는 common/obs_preprocess.py 하나를 sim과 실기가 공유하고, obs_spec.json이 순서·크기·config hash를 봉인합니다.

행동

  • TCP Δ위치 (base frame)3
  • TCP Δ축각3
  • 그리퍼 (< 0 이면 close)1
  • 합계7D

스텝당 스케일 0.0125 m / 0.025 rad는 배포 SafetyGuard 상한(0.25 m/s · 0.5 rad/s × 0.05 s)과 같습니다. sim은 Differential IK, 실기는 같은 의미의 ActionMapper → servoL로 실행합니다.

정책 20 Hz물리 120 Hzdecimation 6에피소드 10 s = 200 step

05배포 레인

모듈형 — 인식 모듈 + Teacher v2권장 시작점

  1. D435i depth
  2. 큐브 위치 추정
  3. Teacher 34D → 7D
  4. SafetyGuard
  5. servoL

인식 실패가 화면에 바로 드러나 원인(캘리브레이션 · 작업면 높이 · 조명)을 분리해 고칠 수 있습니다.

Phase4/Run_Task_Teacher.py · exported_experimental/teacher_177c7eefed0f/

end-to-end — Vision Student

  1. D435i RGB-D
  2. 공유 전처리
  3. Student 50,206D → 7D
  4. SafetyGuard
  5. servoL

중간 단계 없이 영상만으로 동작합니다. 단순하지만 실패 원인을 분리하기 어려워 Teacher로 파이프라인을 먼저 확인한 뒤 넘어갑니다.

Phase4/Run_Task.py · exported_experimental/student_8b415b9b0831/

■ 정식 릴리스 레인 — 차단(P0) · 두 번들은 랩 실험 레인(adopted: false)이라 사람이 e-stop 앞에서 --yes-i-am-at-the-estop로 명시 인가할 때만 움직입니다. 정식 릴리스(adopted: true, Vision Student 전용)는 motion_safety 증거 collector 부재, RTDE↔RealSense 타임스탬프 동기화 미증명, 2FG7 폭 feedback 부재로 막혀 있으며 Phase4/Deploy_Real.py는 설정을 읽기 전에 종료하는 hard-block stub입니다.

06채택 게이트와 봉인 평가

TeacherStudent
시드별 최소≥ 487 / 512≥ 384 / 512
pooled Wilson 하한≥ 95%≥ 75%
seed 42 · 43 · 44 · 45512 · 512 · 512 · 512482 · 487 · 480 · 487
pooled (Wilson 하한)100.00% (99.81%)94.53% (93.46%)
채택 checkpointmodel_24200model_24000
  • 후보 선발 — 순간 보상이 아니라 게이트가 실제로 재는 placed_success의 trailing-200 median 상위 5개(최종 checkpoint 고정, 간격 500).
  • 평가 — seed 42–45 각각 정확히 512 에피소드, assist·pre-grasp 없음, 인식 오차 DR과 실행 제한 적용.
  • 권한 — adoption.json의 status: adopted와 정확한 checkpoint SHA-256만 다음 단계의 입력이 됩니다.
  • 계보 — 학습·평가·채택·증류는 같은 Git commit · config hash · 스택에서만 성립하고, 예외는 명시적 인자로만 허용합니다.

07실패 원장에서 — F01–F100 중 네 건

F70

순간 보상 선발이 채택을 전멸시켰다

성공 에피소드는 조기 종료되어 보상 합이 깎이므로, mean_reward는 성공률이 오르기 직전에 정점을 찍습니다. 그 정점으로 고른 후보는 전부 게이트에서 떨어졌습니다.

선발 지표와 게이트 지표가 다르면 그 간극은 언젠가 반드시 벌어진다.

F88

sim 100% Teacher가 실기 신호를 볼 수 없었다

구 42D Teacher는 실제 손가락 위치·물체 속도·접촉력처럼 실기에서 만들 수 없는 신호를 관측했습니다. 34D 배포 가능 관측, 인식 오차 DR, 실행 속도 상한 정합으로 다시 설계했습니다.

학습에서 한 번도 겪지 않은 갭은 실기 성공을 기대할 근거가 없다.

F91

한쪽 손가락으로 집고도 99.6%

변환된 USD에서 오른쪽 손가락이 드라이브 없는 수동 관절이었고, 정책은 큐브를 반대쪽 손가락에 밀어붙여 집는 법을 배웠습니다. URDF를 고쳐 재변환하고 대칭 프로브를 채택 절차에 넣었습니다.

파지 정합은 성공률로 드러나지 않는다 — 산출물을 직접 읽고 영상·관절 궤적을 검사한다.

F94

DLSS 경로에서 RGB만 죽었다

타일 128개 이상 + headless DLSS에서 RGB가 검정·깜빡임으로 깨졌고, depth는 정상이었습니다. Student는 깨진 입력에 적응해 학습 곡선이 좋아 보였습니다. antialiasing을 끄고 학습 기동 시 렌더 가드를 걸었습니다.

렌더 결함은 loss로 드러나지 않는다 — 채널별 공간 통계를 학습 시작 시점에도 검사한다.

전체 원장(문제 · 기전 · 조치 · 교훈)은 PROJECT_LOG.md §6에 있습니다.

08고정 스택

학습 OSWindows 11 native (WSL 비지원)
Python3.11.15 · conda isaac51
시뮬레이터NVIDIA Isaac Sim 5.1.0 (pip) · Isaac Lab v2.3.2 (source checkout)
강화학습rsl-rl-lib 3.1.2 · PyTorch 2.7.0 + CUDA 12.8
GPU기준 RTX 3060 Ti 8 GB · 본 실험 RTX 5070 Ti 16 GB
실기 PCWindows 11, conda env_ur_real, Isaac 미설치
실기 SDKur-rtde 1.6.2 · pyrealsense2 2.58

09빠른 시작

모든 경로는 저장소 루트 기준 상대 경로라 어느 폴더에 clone해도 됩니다. 명령은 저장소 루트에서 PowerShell로 실행합니다. 학습·시뮬레이션은 Windows 11 + NVIDIA GPU(VRAM 8 GB 이상), 실기 배포는 Isaac 없는 Windows 11 PC가 필요합니다.

git clone https://github.com/ChangeDayAndNight/UR5e_SIM2REAL-public.git
cd UR5e_SIM2REAL-public

1 · 시뮬레이션에서 학습된 정책 보기

# 처음 한 번: conda 환경 isaac51에 Isaac Sim 5.1 · Isaac Lab v2.3.2 · PyTorch · 프로젝트 확장 설치
powershell -ExecutionPolicy Bypass -File scripts/bootstrap_training.ps1
conda activate isaac51
python Phase3/SimDeploy_Rehearsal_Teacher.py --policy-dir exported_experimental/teacher_177c7eefed0f --gui --episodes 5

2 · 처음부터 학습

powershell -ExecutionPolicy Bypass -File scripts/train.ps1 -Preset Teacher -Smoke
powershell -ExecutionPolicy Bypass -File scripts/train.ps1 -Preset Teacher -NumEnvs 16384 -MaxIterations 25000 -Seed 42 -Headless
powershell -ExecutionPolicy Bypass -File scripts/train.ps1 -Preset Distill -DistillFrom <TEACHER_MODEL_PT> -NumEnvs 512 -MaxIterations 25000 -Seed 42 -Headless

3 · 실기 배포 (Isaac Sim 불필요)

powershell -ExecutionPolicy Bypass -File setup.ps1
conda activate env_ur_real

# 1) configs\real.local.yaml 에 로봇 IP · 카메라 시리얼 입력, TCP offset · hand-eye 캘리브레이션
# 2) 추론만(모션 없음) — 검출률 30% 미만이면 3)으로 가지 않는다
python Phase4\Run_Task_Teacher.py --policy-dir exported_experimental\teacher_177c7eefed0f `
    --dry-run --verbose-perception --target-pos="-0.50,0.15,-0.0125"

# 3) 실제 모션 — 사람이 e-stop 앞에서
python Phase4\Run_Task_Teacher.py --policy-dir exported_experimental\teacher_177c7eefed0f `
    --yes-i-am-at-the-estop --home-first --target-pos="-0.50,0.15,-0.0125"

10저장소 구조

Phase0/ … Phase4/
단계별 실행 스크립트 — scene smoke, Teacher 학습·평가, Student 증류·export, 리허설, 실기 러너
source/ur5e_binpick/
Isaac Lab 확장 패키지 — 태스크, MDP, 에이전트 설정
common/
sim·실기 공유 순수 로직 — 관측 전처리, 행동 매핑, 그리퍼 명령 상태, 큐브 인식
sim/ · real/
같은 인터페이스의 sim / 실기 로봇·카메라 어댑터
deployment/
캘리브레이션, 패리티 검증, 배포 번들 빌드, 배포 PC 런북
configs/
common · sim · dr · safety · calib — 계약을 소유하는 설정 파일
scripts/
학습 런처, preflight, 채택 파이프라인, 저장소 검증
analysis/ · diagnostics/
평가 통계·논문 표 / 물리·렌더·가시성 프로브
calibration/
hand-eye ChArUco 캡처와 번들 조정
assets/
UR5e + 2FG7 URDF·USD, D435i mesh (NOTICE · LICENSE 보존)
exported_experimental/
sim 채택 정책 번들 2종 (Teacher · Student)
tests/
Isaac·하드웨어 없이 도는 순수 pytest

11한계와 남은 일