3.4 Leader-Follower 캘리브레이션
3.4.1 데이터 경로
Leader-Follower 제어는 단순 복사처럼 보이지만 실제 경로는 다음과 같다.
- : Leader의 원시 엔코더 값
- : 캘리브레이션 에 따른 정규화 또는 각도 변환
- : 관절 순서와 방향을 나타내는 부호/순열 변환
- : 기구 조립과 영점 차이를 보정하는 오프셋
Safe: 위치·속도·작업 공간·통신 상태 제한
12-bit 엔코더라면 한 회전을 4096 카운트로 표현할 수 있지만, 실제 유효 범위와 래핑 방식은 서보 설정에 의존한다. “2048이 항상 0 rad”처럼 하드코딩하지 않는다.
3.4.2 LeRobot 캘리브레이션 절차
공식 SO-101 안내의 핵심은 Leader와 Follower가 같은 물리 자세일 때 같은 의미의 위치 값을 갖도록 각각 캘리브레이션하는 것이다. 중앙 자세를 기록한 뒤 모든 관절을 전체 안전 범위로 움직여 범위를 수집한다.[Hugging Face SO-101]
# 포트 이름은 예시다. 한 번에 한 장치만 연결해 식별한다.
lerobot-find-port
lerobot-setup-motors \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=lab_follower_01
lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=lab_leader_01
id는 캘리브레이션 파일을 찾는 키이므로 이후 명령에서도 동일하게 사용한다. 캘리브레이션 중에는 기계 스토퍼를 세게 누르지 말고 관절을 안전 범위 안에서 천천히 훑는다.
3.4.3 그리퍼 표현의 함정
공식 SO-101 시뮬레이션 설명에서 LeRobot 그리퍼는 0을 완전 닫힘, 100을 완전 열림으로 나타낸다. 그러나 이 매핑이 URDF/MJCF에 그대로 반영되지 않을 수 있다.[TheRobotStudio SO-101 Simulation]
따라서 다음 세 값을 구분한다.
- 원시 서보 tick
- LeRobot 정규화 값(예: 0~100)
- URDF의 회전 또는 선형 관절 위치(rad 또는 m)
그리퍼 변환은 일반 팔 관절의 radian 배열에 섞지 말고 명시적인 함수와 단위로 관리한다.
3.4.4 첫 프레임 정렬
Leader가 접힌 상태이고 Follower가 펼쳐진 상태에서 1:1 복사를 시작하면 첫 명령 한 번으로 큰 이동이 발생한다. 안전한 시작 절차는 다음과 같다.
- 두 암의 현재 상태를 읽는다.
- 관절 이름, 개수, 유한값, 캘리브레이션 ID를 검증한다.
- Follower를 Leader의 첫 자세로 제한 속도 보간(slew)한다.
- 정렬 오차가 임계값 아래일 때만 실시간 미러링을 연다.
- 데드맨 입력이 놓이면 마지막 명령이 아니라 측정된 현재 자세를 유지한다.
LeRobot의 공식 Isaac Teleop 예제도 기본적으로 Follower를 Leader의 첫 자세까지 일정 시간에 걸쳐 정렬하고, 입력 스트림이 오래되면 측정 자세를 유지하는 계약을 둔다.[Hugging Face Isaac Teleop]
잠깐 점검 — Leader 값을 곧바로 복사해도 될까?
- 두 로봇의 관절 이름은 같지만 한 관절의 회전 방향이 반대라면 어느 변환을 확인해야 하는가?
- Leader 메시지가 제한 시간보다 오래되었다면 Follower는 마지막 명령을 계속 실행해야 하는가?
확인 포인트: 첫 질문은 부호·순열 변환 와 영점 오프셋 를 확인해야 한다. 두 번째는 아니다. 워치독(watchdog)이 오래된 명령을 거부하고 측정 자세 유지 또는 정지 상태로 전환해야 한다.