두 팔을 연결하기 전에 같은 의미의 숫자인지 확인한다
Leader-Follower는 사람이 조작하는 leader의 상태를 읽어 follower의 목표를 만드는 방식이다. SO-101의 두 팔이 닮았더라도 포트/장치 ID·모터 ID와 관절 순서, 기구 영점/회전 방향·유효 범위가 같다고 가정하지 않는다. 배열 첫 번째 숫자를 첫 번째 모터에 그대로 복사하는 것보다 이름별 계약을 먼저 확인해야 한다. 그리퍼도 팔의 일반 회전 관절과 별도 의미일 수 있다.
공식 SO-101 안내는 leader/follower의 구성을 구별하고 보정/식별 절차를 제공한다. 여기서는 장비를 연결하거나 토크/전원을 조작하지 않고 이미 주어진 보정 레코드를 검토한다. 같은 의미의 물리 자세가 같은 목표 의미로 이어져야 한다는 원칙과 실제 보정 실행은 다른 일이다. 부품/조립·펌웨어/설정이 달라지면 과거 보정 파일을 그대로 승인하지 않는다.
raw tick은 엔코더가 제공한 수치 단위다. 이를 rad/degree나 정규화 값으로 바꾸는 규칙은 해당 설정/보정에 의존한다. 한 회전의 count 수만 알더라도 tick0이 어느 물리 방향인지, 센서가 감속기 앞/뒤인지와 wrap/다회전 표현을 모르면 관절각이 완성되지 않는다. 이미 출력축 각도로 변환된 값에 기어비를 또 곱하지 않는다.
영점·스케일·방향을 각각 적는다
합성 한 관절의 변환을 q_L=s_L(r_L−r₀)라고 하자. r_L은 leader tick, r₀는 기준 tick, s_L은 출력축 rad/tick의 부호 있는 스케일이고 q_L은 기준에 대한 각도(rad)다. r₀=1000 tick, s_L=0.002 rad/tick, r_L=1100 tick이면 q_L=0.2 rad다. r₀를 1050으로 잘못 읽으면 0.1 rad가 되고, 부호를 반대로 쓰면−0.2 rad가 된다. 단순 offset 오류와 방향 오류를 서로 다른 항목으로 진단한다.
그림 M20.01-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
이 선형식은 입력으로 준 제한 구간에서만 쓰는 교육용 보정이다. 실제 구현의 homing/range·정규화와 동일한 알고리즘이라고 주장하지 않는다. 한 점에서 offset을 맞추는 것만으로 전 범위 스케일/비선형성·백래시를 확인할 수 없으므로 여러 기준 위치와 별도 검증 자료가 필요하다. 유효 범위 밖이나 비유한 값은 정상 관측으로 넣지 않는다.
현재 LeRobot SOFollower 공식 소스는 설정에 따라 일반 관절의 degree 또는 범위 정규화를 택하고 그리퍼를 별도의 0~100 범위로 구성한다. main은 변경될 수 있으므로 재현 시 commit/설정과 실제 feature 의미를 고정한다. 이 값을 모든 버전의 rad 배열로 읽어서는 안 된다. 예를 들어 그리퍼 50은 해당 정규화 좌표이며 0.5 m 간격이나 50 rad가 아니다. 물리 간격과의 대응은 별도 보정/모형으로 확인한다.
상대 매핑은 기준점을 명시해야 한다
편의를 위해 leader가 움직인 만큼 follower 목표를 상대적으로 옮기는 교육용 매핑을 정의한다. q_La는 연결 시 leader 기준 각도, q_Fa는 follower 기준 각도, k는 양의 무차원 배율, ε는 방향을 나타내는+1 또는−1이다. 목표 q_F*는 아래처럼 계산한다.
이것은 절대 관절값 복사와 다른 계약이다. q_La=0.2 rad, q_Fa=0.5 rad, k=0.5, ε=−1에서 q_L=0.4 rad면 leader 변화는+0.2, follower 목표 변화는−0.1이므로 q_F*=0.4 rad다. 배율을 0.25로 바꾸면 목표는 0.45 rad다. 각도/정규화가 섞여 있을 때 k를 무차원이라 쓰면 안 되므로 먼저 같은 각도 표현으로 변환한다.
절대 복사/상대 매핑 중 어느 쪽이 언제나 더 좋은 것은 아니다. 기구학·관절 대응과 작업의 목적에 맞춰 선택하고, 서로 다른 관절 수/작업 자유도라면 단순 관절 복사가 아닌 과업 공간 매핑이 필요할 수 있다. 이 단위의 한 관절 식으로 전체 TCP 경로를 검증했다고 하지 않는다.
클러치는 끊기와 재기준을 함께 정의한다
여기서 클러치란 leader를 재배치하는 동안 follower 목표의 상대 연결을 잠시 끊는 입력이다. 클러치 중에는 follower로 새 상대 변화를 전달하지 않고 유지/정지 정책을 적용한다. 단순히 마지막 목표를 보관했다는 소프트웨어 사실이 실제 모터의 자세 유지나 안전 정지를 보장하지 않으므로, 통신/제어 상태에 맞춘 동작을 따로 정의한다.
위 사례에서 목표 0.4 rad를 보관한 동안 leader를−0.3 rad로 옮겼다고 하자. 해제 시 옛 기준 q_La=0.2/q_Fa=0.5를 그대로 쓰면 목표는 0.5+(−1)×0.5×(−0.3−0.2)=0.75 rad가 된다. 이전 0.4에서 갑자기 0.35 rad가 바뀐다. 클러치를 눌렀다는 플래그만으로 이런 점프가 없어지는 것은 아니다.
해제 시 follower 실제 관측이 0.41 rad이고 유효/최신이라고 확인됐다고 하자. 새 기준을 q_La=−0.3, q_Fa=0.41로 정하면 해제 순간 목표는 0.41 rad다. 이후 leader가−0.1로 움직이면 목표는 0.41−0.5×0.2=0.31 rad다. follower 관측이 오래됐거나 누락됐다면 재기준을 완료했다고 표시하지 않고 보류한다. 보관 목표 0.4와 실제 0.41의 차이도 로그에 남긴다.
제한 뒤 목표와 실제 동작을 다른 열에 남긴다
새 목표가 합법적인 각도여도 한 주기에 너무 큰 변화를 요구할 수 있다. 합성 속도 상한 v_max=0.5 rad/s, 실제 계산 간격 Δt=0.02 s이면 한 번의 허용 변화 크기는 v_maxΔt=0.01 rad다. 현재 관측 0.41에서 희망 목표 0.31로 한 번에−0.1을 보내는 대신, 이 제한 모형에서는 다음 출력 목표를 0.40 rad로 제한한다. 다음 주기의 기준/관측·시간도 다시 확인해야 한다.
이 계산은 목표 변화 제한이지 실제 속도/토크가 한계 안이라는 측정 증거가 아니다. 위치/속도·작업 공간/충돌, 최신성/TTL과 통신 상태를 함께 검사한다. Δt가 너무 크거나 음수·미상일 때 큰 이동을 허용하는 근거로 삼지 말고 정해진 실패 정책을 적용한다. 장비별 정지/비상정지 기능은 교육용 소프트웨어 제한과 별도다.
시연 데이터에는 raw/보정 값, 희망 목표·제한 후 전송 목표·실제 follower 관측을 구분해 남긴다. 학습할 action을 어느 열로 정의했는지 명시해야 정책이 실제로 실행하지 않은 큰 목표를 정답으로 배우는 문제를 검토할 수 있다. 클러치 시작/해제·재기준, 제한 발생과 지연/누락도 기록하며 정상 시연으로 숨기지 않는다. 보정 ID/파일 hash·관절 이름/단위, 장치/소프트웨어 버전과 시간 기준을 묶어야 나중에 의미를 복원할 수 있다.
기존 3.4 Leader-Follower 캘리브레이션과 기존 3.5 실행 루프는 실제 구현의 계약을 연결하는 자료다. 하드웨어 명령은 이번 활동에 사용하지 않으며 아래 수치만으로 검토한다.