A-Go(LeKiwi) Calibration

소프트웨어 설치가 끝났으니 이제 로봇의 몸을 다룰 차례입니다. 모터에 명령을 보내기 전에 반드시 거쳐야 하는 단계가 캘리브레이션입니다. LeKiwi의 팔(팔로워 암)과 이를 조종할 리더 암 양쪽 모두에 진행합니다.

학습 목표

  • 서보 모터에 캘리브레이션이 필요한 이유를 설명할 수 있다.
  • 팔로워 암과 리더 암을 각각 캘리브레이션하고 결과 파일이 어디에 저장되는지 안다.
  • 캘리브레이션 결과 표를 읽고 정상 여부를 판단할 수 있다.

1. 캘리브레이션이란

LeKiwi의 팔에 쓰이는 서보 모터는 관절 위치를 0부터 4095까지의 정수(raw 값) 로 알려 줍니다. 문제는 이 숫자가 모터마다, 조립 상태마다 다르다는 점입니다. 같은 “팔을 곧게 편 자세”라도 어떤 모터는 2048, 어떤 모터는 1900을 내놓습니다. 기어를 끼울 때 이가 한 칸만 어긋나도 값이 달라집니다.

캘리브레이션은 이 raw 값을 관절마다 통일된 기준(각도) 으로 바꾸는 변환표를 만드는 과정입니다. 두 가지를 기록합니다.

기록 항목의미사용처
중간 위치관절 가동 범위의 한가운데 자세에서의 raw 값각도 0도의 기준점
최소·최대 위치관절을 양 끝까지 움직였을 때의 raw 값가동 범위의 양 끝, 안전 한계

이 변환표가 있어야 리더 암의 “어깨 30도”가 팔로워 암의 “어깨 30도”로 정확히 전달됩니다. 리더와 팔로워 모두 캘리브레이션해야 하는 이유입니다.

결과는 로봇 id 이름의 JSON 파일로 저장되며, 이후 텔레오퍼레이션이나 데이터 수집에서 같은 id를 쓰면 자동으로 불러옵니다.

~/.cache/huggingface/lerobot/calibration/robots/lekiwi/<id>.json
~/.cache/huggingface/lerobot/calibration/teleoperators/so_leader/<id>.json

id는 로봇의 이름표입니다.

캘리브레이션, 텔레오퍼레이션, 데이터 기록 모든 단계에서 같은 id를 써야 같은 변환표가 적용됩니다. 이 자료에서는 라즈베리파이 호스트명과 같은 lekiwi07 을 씁니다.


2. [Pi] LeKiwi 팔로워 암 캘리브레이션

라즈베리파이에 SSH로 접속하고 가상환경이 활성화된 상태에서 진행합니다.

팔을 손으로 받쳐 주세요.

캘리브레이션이 시작되면 팔 모터의 토크(힘)가 꺼져, 들려 있던 팔이 자기 무게로 떨어질 수 있습니다. 명령을 실행하기 전에 한 손으로 팔을 받치고 주변 물건을 치워 두세요.

2.1. 명령 실행

lerobot-calibrate \
    --robot.type=lekiwi \
    --robot.id=lekiwi07 \
    --robot.port=/dev/ttyACM0 \
    --robot.cameras='{}'
옵션의미
--robot.type=lekiwi로봇 종류. 어떤 관절이 있는지 LeRobot이 이걸로 압니다
--robot.id=lekiwi07저장될 캘리브레이션 파일 이름
--robot.port=/dev/ttyACM0모터 제어 보드가 연결된 USB 시리얼 포트
--robot.cameras='{}'카메라를 비움. 캘리브레이션에는 모터만 필요하므로 카메라를 열지 않아 빠르고 오류가 적습니다

LeKiwi connected. 가 보이면 모터 보드와 통신이 된 것입니다.

팁

모터 보드 포트는 USB를 다시 꽂으면 /dev/ttyACM1 처럼 바뀔 수 있습니다. USB 포트 고정을 마쳤다면 --robot.port=/dev/lekiwi 를 쓰면 됩니다.

2.2. 기존 파일 사용 여부 선택

같은 id로 저장된 파일이 이미 있으면 어떻게 할지 묻습니다.

처음이거나, 부품을 재조립했거나, 텔레오퍼레이션에서 팔이 어긋나게 따라온다면 c 로 새로 진행합니다.

2.3. 중간 위치에 놓기

Move robot to the middle of its range of motion and press ENTER 메시지가 나오면 아래 사진처럼 팔을 가동 범위의 한가운데 자세로 만듭니다. 위팔은 위로 세우고, 아래팔과 그리퍼는 앞으로 수평하게 뻗은 자세입니다. 이 자세가 각도 0의 기준이 됩니다.

자세를 잡은 뒤 ENTER를 누릅니다.

2.4. 관절 가동 범위 기록

이어서 Move all arm joints ... sequentially through their entire ranges of motion 메시지와 함께 표가 나타납니다. 이때부터 프로그램이 각 관절의 위치를 계속 읽으면서 최소값과 최대값을 갱신합니다.

각 관절을 하나씩, 천천히, 양 끝까지 움직입니다. 어깨 회전, 어깨 들기, 팔꿈치, 손목 굽힘, 그리퍼 순서로 하면 빠뜨리지 않습니다. 손목 회전(wrist_roll)과 바퀴는 무한 회전 관절이라 범위 기록 대상에서 제외됩니다.

이 표는 같은 자리에 덮어쓰며 갱신되기 때문에 앞서 찍힌 글자가 남아, MAX 열이 MAX6, 34760 처럼 깨져 보이는 부분이 있습니다. 실제 값은 0~4095 범위입니다.

표의 각 열은 다음을 뜻합니다.

열의미
MIN지금까지 관측된 최소 raw 값
POS현재 raw 값
MAX지금까지 관측된 최대 raw 값

모든 관절을 움직였으면 ENTER를 누릅니다. Calibration saved to ... 가 출력되고 파일이 저장됩니다.

결과가 정상인지 확인하는 법

각 관절의 MIN과 MAX가 충분히 벌어져 있어야 합니다. MIN, POS, MAX가 거의 같은 숫자라면 그 관절을 움직이지 않은 것입니다. 이 상태로 저장하면 텔레오퍼레이션에서 그 관절이 거의 움직이지 않으니 c 로 다시 진행합니다.


3. [PC] SO101 리더 암 캘리브레이션

리더 암은 PC에 USB로 연결합니다. LeRobot 설치 (Ubuntu) 또는 LeRobot 설치 (Windows)에서 만든 PC의 conda 환경(lerobot060)을 활성화한 상태에서 진행합니다.

3.1. 리더 암 포트 찾기

리더 암을 USB 케이블로 PC에 연결한 상태에서 아래 명령을 실행합니다.

lerobot-find-port

안내 메시지가 나오면 리더 암의 USB 케이블을 뽑고 ENTER를 누릅니다. 사라진 포트가 리더 암의 포트입니다(우분투 /dev/ttyACM0 형태, 윈도우 COM22 형태). 확인한 뒤 케이블을 다시 꽂습니다.

3.2. 명령 실행

Ubuntu
lerobot-calibrate \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM0 \
    --teleop.id=leader
Windows
lerobot-calibrate ^
    --teleop.type=so101_leader ^
    --teleop.port=COM22 ^
    --teleop.id=leader

--teleop.port 에는 3.1에서 확인한 포트를 넣습니다. 이번에는 robot 이 아니라 teleop 옵션입니다. LeRobot에서 리더 암은 로봇이 아니라 조종 장치(teleoperator) 로 분류되기 때문입니다.

3.3. 기존 파일 사용 여부 선택

팔로워 암과 같습니다. ENTER는 기존 파일 사용, c 는 새로 진행입니다.

3.4. 중간 위치에 놓기

리더 암도 팔로워와 같은 중간 자세(위팔은 세우고, 아래팔과 그리퍼는 앞으로 수평)를 만들고 ENTER를 누릅니다.

3.5. 관절 가동 범위 기록

표가 나타나면 각 관절을 하나씩 양 끝까지 움직인 뒤 ENTER를 누릅니다.

위 화면은 범위 기록을 막 시작한 직후의 모습입니다. 아직 아무 관절도 움직이지 않아 MIN, POS, MAX가 모두 2047 근처에 모여 있습니다. 관절을 움직이면 이 숫자들이 실시간으로 벌어집니다.

팁

리더 암과 팔로워 암은 관절 구성이 같으므로 같은 순서, 같은 자세로 캘리브레이션하는 것이 좋습니다. 중간 자세가 서로 다르면 텔레오퍼레이션에서 팔로워가 리더보다 늘 몇 도 틀어진 채 따라옵니다.


4. 문제 해결

증상확인할 것
Permission denied: '/dev/ttyACM0'사용자를 dialout 그룹에 추가한 뒤 재로그인. sudo usermod -aG dialout $USER
/dev/ttyACM0 가 없음ls /dev/ttyACM* 로 실제 포트 이름 확인. USB 케이블 재연결
모터를 찾지 못함모터 전원 확인. LeKiwi는 배터리 스위치, 리더 암은 전원 어댑터
텔레오퍼레이션에서 팔이 어긋나게 따라옴양쪽 모두 c 로 다시 캘리브레이션. 중간 자세를 같게
특정 관절만 안 움직임그 관절의 MIN, MAX가 거의 같은지 확인. 다시 캘리브레이션

5. 정리

다음 페이지 텔레오퍼레이션에서는 이 두 팔을 연결해 리더 암으로 LeKiwi를 실시간 조종하는 텔레오퍼레이션을 진행합니다.