05 · 리더 암 디지털 트윈(실물 암으로 시뮬레이션 암 구동)
실물 리더 암을 손으로 끌어 MuJoCo 창의 시뮬레이션 팔로워 암이 실시간으로 거울처럼 따라오게 합니다——디지털 트윈 시연, 시뮬레이션 데이터 수집의 올바른 실행 방법입니다.
사전 조건
리더 암이 캘리브레이션되어 있어야 합니다(03 참조); 예시 포트는 COM124입니다(이 머신에서 현역 리더 암의 실측값, 연결할 때마다 번호가 바뀔 수 있으므로 03장에서 확인 후 교체하세요).
명령
export UV_CACHE_DIR='C:\Users\admin\AppData\Local\Temp\uv-cache'
uv run --frozen --with mujoco python examples/so101_mujoco/teleoperate.py \
--robot.type=so101_mujoco \
--teleop.type=so101_leader_trim --teleop.port=COM124 --teleop.id=juxi_leader \
--teleop.use_degrees=false--robot.type=so101_mujoco: 제어 대상은 시뮬레이션 암이며 창이 자동으로 열립니다;--teleop.*: 조작 장치는 실물 리더 암입니다(순수 읽기, 절대 토크를 걸지 않아 리더 암에 위험 없음);--teleop.use_degrees=false: 필수. 리더 암이 출력하는 단위(스트로크 비율제)를 시뮬레이션 암과 일치시킵니다.
--robot.type을 so101_follower --robot.port=COM172 --robot.id=juxi_so101 --robot.max_relative_target=5로 바꾸면 "실물 리더 암 → 실기 팔로워 암"의 일반적인 키트 활용법이 되며, 같은 리더 암 캘리브레이션을 그대로 쓸 수 있습니다.
영점이 어긋날 때: 자동 중심 미세 조정(so101_leader_trim)
현상: 리더 암을 "눈으로 보기에 중간"에 놓아도 시뮬레이션 암이 몇 도 어긋납니다.
원리: lerobot의 정규화 영점 = 캘리브레이션 스윕으로 기록된 범위의 중점 (min+max)/2; 반면 캘리브레이션 Enter 시의 "중간 자세"는 원시값 2048로 기록됩니다. 어떤 관절의 기계적 스트로크 자체가 비대칭이면, 두 "중점"은 영원히 고정된 양만큼 차이가 납니다 (실측 1번 서보: 기록 범위 776–3457, 중점 2116, 2048과 68 카운트 차이 ≈ 5.6°). 이 편차는 재캘리브레이션으로 없앨 수 없습니다(스트로크 비대칭은 기계 구조가 결정), 반드시 소프트웨어에서 보상해야 합니다.
해법: so101_leader_trim 플러그인이 캘리브레이션 파일에서 공식에 따라 각 관절의 보상을 자동 계산해 실시간으로 빼 주며, 재캘리브레이션 후에도 자동으로 따라가므로 수동 파라미터 조정이 필요 없습니다:
补偿ᵢ = (2048 − minᵢ) / (maxᵢ − minᵢ) × 200 − 100이 머신에서 실측으로 적용된 값(시작 로그에 출력됩니다):
| 관절 | 보상(단위) |
|---|---|
| shoulder_pan | −5.11 |
| shoulder_lift | −0.92 |
| elbow_flex | +2.54 |
| wrist_flex | +0.69 |
나머지 관절은 편차가 <0.05로 보상이 필요 없습니다; 그리퍼(0에서 100)와 각도제 모드는 미세 조정에 참여하지 않습니다.
개발자 노트: 이 플러그인의
name은 반드시"so_leader"로 유지해야 합니다——name은 캘리브레이션 파일 조회 디렉터리 키이므로, 사용자 정의 타입 이름을 쓰면 캘리브레이션 파일을 찾지 못해 재캘리브레이션 절차가 잘못 트리거됩니다.

