AI ROBOT ARM PROJECT
사람이 리더암을 손으로 움직여 시범을 보이면, 팔로워암이 그 동작을 보고 배워서 스스로 물건을 집는 로봇팔을 만듭니다. 3D 프린팅 부품 조립부터 모터 ID 설정, 캘리브레이션, 데이터 녹화, ACT 모델 학습, 그리고 최종 인퍼런스(자율 동작)까지 전 과정을 다룹니다.
기존 코딩으로는 해결할 수 없는 “책상 위 물건 정리” 같은 비정형 작업을, 모방학습(Imitation Learning)으로 해결하는 것이 이 프로젝트의 핵심입니다.
한눈에 보기
| 난이도 | 최상급 (3D 프린팅 + 터미널 + GPU 학습) |
|---|---|
| 제작 시간 | 3D 프린팅 20시간~ / 조립 4~6시간 / SW 세팅 2~3시간 / 학습 수 시간 |
| 대상 | 고등학생 이상, AI·로보틱스 심화 동아리, 교사 연수 |
| 구성 | 리더암 1대 + 팔로워암 1대 (각 6축) |
| 학습 모델 | ACT (Action Chunking Transformer) |
| 필수 공구 | M2/M3 육각 드라이버, 니퍼(서포트 제거용), 십자 드라이버 |
💻 컴퓨터 사양 (이게 제일 중요합니다)
AI 모델 학습에 GPU가 필수입니다. VRAM이 부족하면 학습 자체가 돌아가지 않습니다.
| 구분 | 최소 사양 | 권장 사양 |
|---|---|---|
| CPU | Intel i5-14600K / 라이젠5 9600X | Intel i7-14700K / 라이젠9 9900X |
| GPU | RTX 4070Ti (VRAM 16GB) | RTX 5080 (VRAM 16GB) |
| RAM | 16GB | 32GB |
| SSD | 512GB | 1TB |
💡 노트북 내장 그래픽으로는 불가능합니다. 조립·텔레오퍼레이션까지는 어떤 컴퓨터로도 되지만, 데이터 녹화와 모델 학습 단계에서는 반드시 외장 GPU가 필요합니다. 학교라면 정보실 고사양 PC 한 대를 학습 전용으로 잡아 두는 방식을 추천합니다.
자료 모음 (필요한 링크 전부)
따라 하다가 길을 잃으면 언제든 이 표로 돌아오세요.
| 순서 | 자료 | 설명 |
|---|---|---|
| 1 | SO-ARM100/101 공식 저장소 | 부품 목록(BOM)과 구매 링크 |
| 2 | STL 파일 다운로드 | 3D 프린팅용 도면 |
| 3 | 로보시지 조립 영상 채널 | 한국어 조립 영상 |
| 4 | 허깅페이스 SO-101 공식 조립 가이드 | 관절별 조립 영상 + 나사 규격 |
| 5 | 미니콘다 다운로드 | 파이썬 가상환경 |
| 6 | Git 다운로드 | 소스코드 내려받기용 |
| 7 | LeRobot 설치 문서 | 공식 설치 가이드 |
| 8 | Imitation Learning for Robots | 텔레오퍼레이션·녹화·학습 명령어 원본 |
| 9 | SO-101 캘리브레이션 코드랩 | 캘리브레이션 참고 자료 |
| 10 | 환경 설정~AI 학습 영상 | 소프트웨어 전 과정 영상 |
1. 준비물 — 모터부터 제대로 고르기
SO-ARM101은 리더암(사람이 잡고 조종)과 팔로워암(실제로 물건을 집음) 두 대가 한 세트입니다. 겉모습은 비슷하지만 들어가는 모터의 기어비가 다릅니다. 주문 전에 반드시 확인하세요.
1-1. 팔로워 암 (Follower Arm) — STS3215 6개
실제로 물건을 집고 옮기는 팔이라 모든 관절에 가장 힘센 1/345 기어비로 통일합니다.
| 관절 | 모터 번호 | 모델 | 기어비 |
|---|---|---|---|
| Base / Shoulder Pan (몸통 회전) | 1번 | STS3215 | 1/345 |
| Shoulder Lift (어깨 들기) | 2번 | STS3215 | 1/345 |
| Elbow Flex (팔꿈치) | 3번 | STS3215 | 1/345 |
| Wrist Flex (손목 굽힘) | 4번 | STS3215 | 1/345 |
| Wrist Roll (손목 회전) | 5번 | STS3215 | 1/345 |
| Gripper (집게) | 6번 | STS3215 | 1/345 |
1-2. 리더 암 (Leader Arm) — STS3215 6개 (기어비 3종 혼합)
사람이 손으로 움직이는 팔이므로 자기 무게는 버티면서도 힘 안 들이고 움직여야 합니다. 그래서 관절 위치별로 기어비가 다릅니다. 자리를 바꿔 끼우면 팔이 축 처지거나 뻑뻑해집니다.
| 관절 | 모터 번호 | 기어비 | 이유 |
|---|---|---|---|
| Base / Shoulder Pan | 1번 | 1/191 | 중간 토크 |
| Shoulder Lift | 2번 | 1/345 | 팔 전체 무게를 지탱 → 최대 토크 |
| Elbow Flex | 3번 | 1/191 | 중간 토크 |
| Wrist Flex | 4번 | 1/147 | 가볍고 빠른 반응 |
| Wrist Roll | 5번 | 1/147 | 가볍고 빠른 반응 |
| Gripper (핸들) | 6번 | 1/147 | 손가락으로 쥐는 부분 |
⚠️ 기어비 표기 확인법. 모터 뒷면 라벨에
C001(1/345),C044(1/191),C046(1/147) 식으로 코드가 찍혀 있습니다. 개봉하자마자 마스킹 테이프에 기어비를 적어 모터마다 붙여 두세요. 섞이면 육안으로 구분이 거의 불가능합니다.
1-3. 그 외 필요한 것들
| 품목 | 수량 | 비고 |
|---|---|---|
| Bus Servo Adapter (모터 컨트롤 보드) | 2개 | 리더암용 1 + 팔로워암용 1 |
| 3핀 서보 케이블 | 12개 이상 | 모터끼리 데이지체인 연결 |
| USB-C 케이블 | 2개 | 보드↔PC 연결. 데이터 전송용이어야 함 |
| 5V/12V 전원 어댑터 | 2개 | 모터 사양에 맞는 것 |
| M2×6mm 나사 | 다수 | 모터를 프레임에 고정 (가장 작은 나사) |
| M3×6mm 나사 | 다수 | 프레임끼리 결합, 모터 혼 고정 |
| USB 웹캠 | 2개 | 탑뷰 + 그리퍼(손목) 뷰 |
| 3D 프린팅 부품 | 1세트 | PLA 권장, STL은 위 자료표 참고 |
2. 3D 프린팅과 부품 손질
공식 STL 저장소에서 파일을 받아 출력합니다. 팔이 두 대이므로 대부분의 부품은 2벌씩 필요하고, 아래 부품만 팔마다 다릅니다.
- 리더암 전용 : Handle(손잡이), Wrist_Roll
- 팔로워암 전용 : Moving_Jaw(집게 턱), Wrist_Roll_Follower
🖨 프린팅 팁 — PLA, 레이어 0.2mm, 인필 20~30% 정도면 충분합니다. 팔 전체를 뽑는 데 20시간 이상 걸리니 미리 시작하세요.
부품 손질 (Clean Parts) — 조립 전 필수
출력된 부품에는 서포트 재료가 붙어 있습니다. 작은 드라이버를 서포트 밑에 넣어 들어올리듯 제거하세요. 특히 모터가 들어갈 사각 구멍과 나사 구멍에 찌꺼기가 남아 있으면 조립이 안 됩니다. 나사 구멍은 M3 나사를 한 번 넣었다 빼서 길을 내 두면 편합니다.
💡 조립 전 미리 해두면 좋은 것: 모터를 프레임에 넣기 전에 3핀 케이블을 미리 한 개씩 꽂아 두세요. 조립이 끝난 뒤에는 손이 안 들어가는 자리가 생깁니다.
3. 하드웨어 조립 — STEP별 진행
아래는 팔로워암 기준입니다. 리더암도 STEP 1~5까지는 완전히 동일하고, 마지막 STEP 6에서 집게 대신 손잡이가 달립니다.
⚠️ 모든 STEP에 공통되는 규칙 — 모터 혼(Motor Horn) 두 개를 먼저 끼운다.
STS3215 모터에는 앞뒤로 원형 혼(플라스틱 원판)을 각각 하나씩 끼웁니다. 위쪽(출력축) 혼은 M3×6mm 나사로 고정하고, 아래쪽 혼은 나사 없이 그냥 끼우기만 합니다. 이걸 빼먹고 조립을 진행하면 나중에 전부 분해해야 합니다.
STEP 1. 베이스 + 1번 모터 (Shoulder Pan / 몸통 회전)
- 1번 모터에 모터 혼 2개를 끼웁니다. 위쪽만 M3×6mm 나사로 고정.
- 모터를 베이스(받침대) 안에 넣습니다.
- M2×6mm 나사 4개로 모터를 고정합니다 — 위에서 2개, 아래에서 2개.
- 첫 번째 모터 홀더를 위에서 밀어 끼우고, M2×6mm 나사 2개(양쪽에 하나씩)로 고정.
- 숄더(어깨) 부품을 올려 붙입니다.
- M3×6mm 나사 8개로 어깨를 고정 — 윗면 4개 + 아랫면 4개.
- 마지막으로 어깨 모터 홀더를 끼웁니다.
💡 나사 구별법: M2가 더 가늘고 짧습니다. M2는 “모터를 프레임에 붙일 때”, M3는 “프레임끼리 붙이거나 혼을 고정할 때” 쓴다고 외워 두면 헷갈리지 않습니다.
STEP 2. 2번 모터 + 상완 (Shoulder Lift / 어깨 들기)
- 2번 모터에 모터 혼 2개를 끼웁니다. 위쪽만 M3×6mm로 고정.
- 2번 모터를 위에서 아래로 밀어 넣습니다.
- M2×6mm 나사 4개로 모터 고정.
- 상완(Upper Arm) 부품을 붙이고 양쪽 각각 M3×6mm 나사 4개씩으로 조입니다.
⚠️ 리더암은 여기에 1/345 모터가 들어갑니다. 리더암 6개 중 유일하게 기어비가 다른 자리이니 반드시 확인하세요. 잘못 넣으면 손을 뗐을 때 팔이 아래로 툭 떨어집니다.
STEP 3. 3번 모터 + 전완 (Elbow Flex / 팔꿈치)
- 3번 모터에 모터 혼 2개를 끼웁니다. 위쪽만 M3×6mm로 고정.
- 3번 모터를 넣고 M2×6mm 나사 4개로 고정.
- 전완(Forearm)을 3번 모터에 연결 — 양쪽 각각 M3×6mm 나사 4개씩.
STEP 4. 4번 모터 (Wrist Flex / 손목 굽힘)
- 4번 모터에 모터 혼 2개를 끼웁니다. 위쪽만 M3×6mm로 고정.
- 4번 모터 홀더를 전완 끝에 밀어 끼웁니다.
- 4번 모터를 홀더 안으로 밀어 넣습니다.
- M2×6mm 나사 4개로 고정.
STEP 5. 5번 모터 (Wrist Roll / 손목 회전)
- 5번 모터를 손목 홀더(Wrist Holder)에 넣고, 앞쪽 M2×6mm 나사 2개로 고정합니다. (여기는 나사 4개가 아니라 2개입니다)
- 손목 모터에는 혼을 하나만 끼우고 M3×6mm 나사로 고정합니다. (양면 아님)
- 손목 부품을 4번 모터에 연결 — 양쪽 각각 M3×6mm 나사 4개씩.
⚠️ STEP 5는 앞 단계들과 규칙이 다릅니다. 나사 2개, 혼 1개. 습관대로 4개를 조이려다 프레임을 깨뜨리는 경우가 많습니다.
STEP 6-A. 그리퍼 조립 — 팔로워암
- 그리퍼 본체를 5번 모터 쪽 혼에 올려 M3×6mm 나사 4개로 고정합니다.
- 6번 그리퍼 모터를 그리퍼 본체에 넣고 양쪽 각각 M2×6mm 나사 2개씩으로 고정.
- 6번 모터에 혼 2개를 끼웁니다. 위쪽만 M3×6mm 나사로 고정, 아래쪽은 나사 없음.
- 집게 발톱(Moving Jaw)을 끼우고 양쪽 각각 M3×6mm 나사 4개씩으로 고정합니다.
STEP 6-B. 핸들 조립 — 리더암
리더암은 집게 대신 사람이 손가락으로 쥐는 방아쇠형 손잡이(Handle)가 달립니다. 6번 모터를 넣고 손잡이 부품을 연결하는 방식은 같으며, 이 모터가 그리퍼의 열림/닫힘 값을 읽어 팔로워암에 전달합니다.
STEP 7. 배선 정리와 컨트롤 보드 장착
- 모터를 1번 → 2번 → 3번 → 4번 → 5번 → 6번 순서로 3핀 케이블을 이어 데이지체인으로 연결합니다.
- 1번 모터에서 나온 케이블을 컨트롤 보드에 연결합니다.
- 컨트롤 보드를 베이스 뒤쪽 브래킷에 장착합니다.
- 프레임에 있는 케이블 가이드 홈에 선을 하나씩 눌러 넣습니다.
⚠️ 배선 정리는 선택이 아니라 필수입니다. 팔이 움직이다 케이블이 관절에 끼거나 스스로 뽑히면, 학습 데이터를 녹화하던 중이었다면 그 회차가 통째로 날아갑니다. 케이블 가이드를 전부 사용하세요.
4. 미니콘다 설치 (윈도우 기준)
미니콘다 홈페이지에서 Miniconda3 Windows 64-bit 설치 파일을 받습니다.
- 설치 파일 실행 → Next → 라이선스 동의 I Agree
- 설치 대상은 Just Me 선택 → Next
- 설치 경로 지정 — 기본값은
C:\Users\사용자명\miniconda3입니다. 그런데 사용자명에 한글이나 띄어쓰기가 있으면 나중에 오류가 납니다. 그럴 경우C:\miniconda3처럼 단순한 경로로 바꿔 주세요. - Advanced Options에서 “Add Miniconda3 to my PATH environment variable” 체크. (not recommended이라고 뜨지만, 체크하면 별도 환경변수 설정이 필요 없어 훨씬 편합니다.)
- Install → 완료 후 튜토리얼 체크박스는 해제하고 Finish
설치가 끝나면 윈도우 검색창에 anaconda를 입력해 Anaconda Prompt (miniconda3)를 실행합니다. 앞으로 모든 명령어는 이 창에 입력합니다.
5. Git 설치
git-scm.com에서 윈도우용 설치 파일을 받아 기본 설정 그대로 설치하면 됩니다. 설치 확인은 프롬프트에서:
git --version
6. LeRobot 설치
6-1. 가상환경 만들고 활성화
conda create -y -n lerobot python=3.12
conda activate lerobot
⚠️ 앞으로 나오는 모든 명령어는 이 가상환경이 켜진 상태에서 실행합니다. 프롬프트 맨 앞에
(lerobot)이 붙어 있는지 매번 확인하세요. “분명히 설치했는데 없다고 나온다”의 90%는 이 문제입니다.
6-2. FFmpeg 설치
카메라 영상을 인코딩·디코딩하는 라이브러리입니다.
conda install -c conda-forge ffmpeg=7.1.1
6-3. LeRobot 소스 내려받기
cd\
git clone https://github.com/huggingface/lerobot.git
cd lerobot
6-4. Feetech 모터 패키지 설치
SO-101의 6개 관절 모터가 Feetech 계열이라, 반드시 이 옵션을 붙여야 오류가 나지 않습니다.
pip install -e ".[feetech]"
설치 도중 에러가 난다면 진행바를 끄고 재시도해 보세요.
pip install --progress-bar off -e ".[feetech]"
7. USB 포트 번호 찾기
어느 팔이 어느 포트에 연결됐는지 컴퓨터에 알려 줘야 합니다.
lerobot-find-port
실행하면 현재 연결된 포트 목록을 보여주고, USB를 하나 뽑은 뒤 엔터를 치라는 안내가 나옵니다. 뽑았을 때 사라진 포트가 바로 그 팔의 포트입니다.
| 운영체제 | 포트 표기 예시 |
|---|---|
| 윈도우 | COM9, COM10 |
| 맥 / 리눅스 | /dev/ttyACM0, /dev/tty.usbmodem585A0076841 |
💡 이 글의 예시는 리더암 = COM9, 팔로워암 = COM10 기준입니다. 아래 모든 명령어에서 이 값을 본인 것으로 바꿔 넣으세요. USB를 다른 구멍에 다시 꽂으면 번호가 바뀔 수 있으니, 한번 정한 자리를 계속 쓰는 걸 추천합니다.
📌 줄바꿈 기호 주의 — 아래 명령어들의 줄 끝 기호는 윈도우는
^, 맥·리눅스는\입니다. 공식 문서를 복사하면\로 되어 있으니 윈도우 사용자는 바꿔 주세요. 헷갈리면 줄바꿈 없이 한 줄로 이어서 입력해도 똑같이 동작합니다.
8. 모터 ID 설정 (setup-motors)
공장 출하 시 모든 모터의 ID는 1입니다. 같은 케이블에 물린 모터들이 서로를 구분하려면 1~6번 고유 ID를 부여해야 합니다. 이 값은 모터 내부 EEPROM에 저장되므로 한 번만 하면 됩니다.
8-1. 팔로워암 모터 ID 설정
lerobot-setup-motors ^
--robot.type=so101_follower ^
--robot.port=COM10
실행하면 이런 메시지가 나옵니다.
Connect the controller board to the 'gripper' motor only and press enter.
그리퍼(6번) 모터만 컨트롤 보드에 연결하고 엔터를 칩니다. 성공하면 'gripper' motor id set to 6이 뜨고, 다음 모터를 요구합니다.
이 과정을 아래 순서로 반복합니다.
| 순서 | 연결할 모터 | 부여되는 ID |
|---|---|---|
| 1 | gripper (집게) | 6 |
| 2 | wrist_roll (손목 회전) | 5 |
| 3 | wrist_flex (손목 굽힘) | 4 |
| 4 | elbow_flex (팔꿈치) | 3 |
| 5 | shoulder_lift (어깨) | 2 |
| 6 | shoulder_pan (몸통) | 1 |
⚠️ 이 단계에서 가장 많이 실수합니다. 매번 단 하나의 모터만 보드에 연결되어 있어야 합니다. 다른 모터에 데이지체인으로 물려 있어도 안 됩니다. 두 개 이상 연결된 상태로 엔터를 누르면 ID가 겹쳐서, 나중에 “모터가 응답하지 않음” 오류의 원인을 찾기 매우 어려워집니다.
💡 에러가 난다면 ① 전원 어댑터 ② USB 케이블 ③ 보드↔모터 3핀 케이블 순서로 확인하세요. Waveshare 보드를 쓴다면 점퍼 2개가 B 채널(USB)에 꽂혀 있어야 합니다.
모든 모터의 ID 설정이 끝나면, 이제 3핀 케이블로 모터끼리 순서대로 연결하고 1번 모터를 보드에 연결하면 됩니다.
8-2. 리더암 모터 ID 설정
포트를 리더암 것으로 바꾸고, --robot이 아니라 --teleop을 쓴다는 점에 주의하세요.
lerobot-setup-motors ^
--teleop.type=so101_leader ^
--teleop.port=COM9
9. 캘리브레이션
리더암과 팔로워암이 물리적으로 같은 자세일 때 같은 숫자를 읽도록 맞추는 과정입니다. 이게 어긋나면 학습한 AI 모델이 다른 로봇에서 동작하지 않습니다.
9-1. 팔로워암 캘리브레이션
lerobot-calibrate ^
--robot.type=so101_follower ^
--robot.port=COM10 ^
--robot.id=my_awesome_follower_arm
진행 순서는 이렇습니다.
- 미들 포지션 맞추기 — 모든 관절이 가동 범위의 정중앙에 오도록 팔을 「ㄱ」자 모양으로 세우고 엔터.
- 전체 범위 스트레칭 — 모든 관절을 끝에서 끝까지 천천히 움직입니다. 그리퍼는 완전히 열었다 닫고, 몸통 회전도 좌우 끝까지 돌립니다.
- 다 했으면 엔터.
완료되면 아래 경로에 설정 파일이 생성됩니다. 이 파일이 있어야 다음 단계가 동작합니다.
.cache → huggingface → lerobot → calibration → robots → so101_follower → my_awesome_follower_arm.json
💡 스트레칭은 대충 하면 안 됩니다. 실제로 끝까지 안 움직인 관절은 그 범위를 “존재하지 않는 영역”으로 인식해서, 나중에 로봇이 그쪽으로 가야 할 때 가지 못합니다.
9-2. 리더암 캘리브레이션
lerobot-calibrate ^
--teleop.type=so101_leader ^
--teleop.port=COM9 ^
--teleop.id=my_awesome_leader_arm
10. 텔레오퍼레이션 — 드디어 움직입니다
리더암을 손으로 움직이면 팔로워암이 그대로 따라 하는 단계입니다. 여기까지 성공하면 하드웨어·설정이 전부 정상이라는 뜻입니다.
lerobot-teleoperate ^
--robot.type=so101_follower ^
--robot.port=COM10 ^
--robot.id=my_awesome_follower_arm ^
--teleop.type=so101_leader ^
--teleop.port=COM9 ^
--teleop.id=my_awesome_leader_arm
중지는 Ctrl + C입니다.
⚠️ 첫 실행 시 팔로워암 주변을 비워 두세요. 캘리브레이션이 어긋났다면 팔이 예상치 못한 방향으로 크게 움직일 수 있습니다. 손은 항상 전원 플러그 근처에.
11. 카메라 연결
AI를 학습시키려면 로봇이 무엇을 보고 그렇게 움직였는지가 함께 기록되어야 합니다. 카메라는 보통 2대를 씁니다.
- 탑뷰(top) — 작업 공간 전체를 위에서 내려다보는 시점
- 그리퍼/프론트(front) — 집게 근처에서 물체를 가까이 보는 시점
연결된 카메라의 인덱스 번호를 확인합니다. (노트북 내장 웹캠도 하나 잡히므로 총 3개가 나올 수 있습니다.)
lerobot-find-cameras opencv
이제 텔레오퍼레이션에 카메라 옵션을 붙여 실행하면, 화면에 실시간 영상이 함께 뜹니다.
lerobot-teleoperate ^
--robot.type=so101_follower ^
--robot.port=COM10 ^
--robot.id=my_awesome_follower_arm ^
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, top: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}" ^
--teleop.type=so101_leader ^
--teleop.port=COM9 ^
--teleop.id=my_awesome_leader_arm ^
--display_data=true
⚠️ 해상도는 반드시 640×480으로. 1920×1080으로 녹화하면 데이터 용량이 폭증하고 GPU 학습 시간이 몇 배로 늘어납니다. 이 프로젝트에서 화질보다 중요한 건 학습 속도입니다.
12. 데이터셋 녹화 — AI에게 시범 보이기
이제 “이렇게 하는 거야”라고 사람이 직접 보여주는 단계입니다. 리더암으로 팔로워암을 조종해 목표 작업을 반복 수행하면, 그 전 과정이 데이터로 저장됩니다.
lerobot-record ^
--robot.type=so101_follower ^
--robot.port=COM10 ^
--robot.id=my_awesome_follower_arm ^
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, top: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}" ^
--teleop.type=so101_leader ^
--teleop.port=COM9 ^
--teleop.id=my_awesome_leader_arm ^
--display_data=true ^
--dataset.repo_id=data/record-test ^
--dataset.num_episodes=100 ^
--dataset.single_task="Grab the black cube"
주요 옵션
| 옵션 | 의미 |
|---|---|
--dataset.repo_id | 데이터 저장 위치·이름 |
--dataset.num_episodes | 몇 회 녹화할지. 100으로 두고 중간에 끊었다 이어서 해도 됩니다 |
--dataset.single_task | 작업 설명 (영어로). 예: “Grab the black cube” |
녹화 진행 방법
- 명령어 실행 → 뷰어 창이 뜹니다.
- 바로 리더암을 잡고 동작을 시작하세요. 늑장 부리면 앞부분이 “가만히 있는 데이터”로 낭비됩니다.
- 한 회차 동작이 끝나면 키보드 오른쪽 방향키 → 를 눌러 그 에피소드를 마무리합니다.
- 물체를 원위치로 되돌리고 다음 회차를 반복합니다.
- 다시 하고 싶으면 Ctrl+C로 중지 후 재시작. (기존 파일이 있다는 경고가 떠도 그냥 진행하거나 삭제 후 진행하면 됩니다.)
💡 몇 번 녹화해야 하나요? 최소 30회, 안정적으로는 50~100회를 권장합니다. 그리고 물체 위치를 매번 조금씩 바꿔 가며 녹화하세요. 항상 같은 자리에서만 시범을 보이면, AI는 “그 자리로 팔을 뻗는 것”만 배우고 물건을 보는 법은 배우지 못합니다.
📌 실패한 시도도 지우지 마세요. 다만 완전히 엉뚱한 동작(케이블 정리하느라 팔이 멈춘 회차 등)은 삭제하는 게 낫습니다. 시범의 일관성이 학습 품질을 좌우합니다.
13. AI 모델 학습 (ACT)
녹화한 데이터로 ACT(Action Chunking Transformer) 모델을 학습시킵니다. 동작을 한 스텝씩이 아니라 여러 스텝을 묶음(chunk)으로 예측하는 모델이라, 로봇 팔처럼 연속적인 동작에 잘 맞습니다.
lerobot-train ^
--dataset.repo_id=data/record-test ^
--policy.type=act ^
--output_dir=outputs/train/act_clean_desk ^
--job_name=act_clean_desk ^
--policy.device=cuda ^
--wandb.enable=false
학습이 진행되면서 출력되는 Loss 값이 계속 줄어드는지 확인하세요. 값이 줄지 않고 널뛴다면 데이터가 부족하거나 시범 동작이 일관되지 않았을 가능성이 큽니다.
💡 학습 시간은 데이터 양과 GPU에 따라 수 시간이 걸립니다. 수업에서 진행한다면 녹화까지만 수업 시간에 하고 학습은 밤새 돌려 두는 방식이 현실적입니다. 체크포인트가 저장되므로 중간에 끊겨도 이어서 할 수 있습니다.
14. 인퍼런스 — 로봇이 스스로 움직입니다
인퍼런스(Inference)란 학습을 마친 모델을 실제 과제에 투입하는 것입니다. 이제 리더암을 잡지 않아도 팔로워암이 스스로 물건을 집습니다.
lerobot-record ^
--robot.type=so101_follower ^
--robot.port=COM10 ^
--robot.id=my_awesome_follower_arm ^
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, top: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}" ^
--display_data=true ^
--dataset.repo_id=data/eval_clean_desk ^
--dataset.single_task="Grab the black cube" ^
--dataset.episode_time_s=50 ^
--dataset.reset_time_s=20 ^
--dataset.num_episodes=10 ^
--policy.path=outputs/train/act_clean_desk/checkpoints/last/pretrained_model
인퍼런스 필수 체크포인트
| 옵션 | 설정값 | 주의사항 |
|---|---|---|
--dataset.repo_id | eval_로 시작하는 이름 | 필수. 평가용 데이터임을 구분하는 규칙 |
--policy.path | 학습된 체크포인트 경로 | 이걸 지정해야 AI가 조종합니다 |
--dataset.episode_time_s | 50 (초) | 1회 시도에 주어지는 시간 |
--dataset.reset_time_s | 20 (초) | 다음 시도 전 물체를 되돌릴 시간 |
--dataset.num_episodes | 10 | 몇 번 시켜 볼지 |
모델이 학습한 Weight 값을 불러오면서, 시범 보인 동작을 스스로 재현합니다. 성공률이 낮다면 데이터를 더 녹화해 재학습하는 것이 가장 확실한 개선 방법입니다.
15. 문제가 생겼나요? (자주 묻는 질문)
조립 단계
- 모터가 프레임에 안 들어가요 → 3D 프린팅 서포트 잔여물 때문입니다. 사각 구멍 안쪽 모서리를 커터로 정리하세요.
- 나사가 헛돌아요 → 3D 프린팅 부품은 무르기 때문에 과하게 조이면 나사산이 뭉개집니다. “저항이 느껴지는 지점 + 살짝”에서 멈추세요.
- 리더암이 손을 떼면 툭 떨어져요 → 2번 관절(Shoulder Lift)에 1/345가 아닌 모터가 들어갔을 가능성이 큽니다.
소프트웨어 단계
- lerobot 명령어를 못 찾는대요 →
conda activate lerobot이 되어 있는지,lerobot폴더 안에서 실행 중인지 확인. - 포트를 못 찾아요 → USB 케이블이 데이터 전송용인지 확인하세요. 충전 전용 케이블은 인식되지 않습니다.
- 모터가 응답하지 않아요 → ① 전원 어댑터 연결 ② 3핀 케이블 방향 ③ 모터 ID 중복 순으로 점검. ID 중복이면 setup-motors를 처음부터 다시.
- 재부팅하니 COM 번호가 바뀌었어요 → 정상입니다.
lerobot-find-port로 다시 확인하세요. - 텔레오퍼레이션에서 팔이 반대로 움직여요 → 캘리브레이션을 다시 하세요. 미들 포지션이 어긋난 경우입니다.
학습 단계
- CUDA out of memory → 카메라 해상도를 640×480으로 낮추고, 배치 사이즈를 줄여 보세요.
- 학습은 됐는데 로봇이 엉뚱하게 움직여요 → 데이터 부족이 가장 흔한 원인입니다. 물체 위치를 바꿔 가며 30회 이상 추가 녹화하세요.
- Loss가 안 줄어요 → 시범 동작이 회차마다 너무 달랐을 수 있습니다. 일관된 경로로 다시 녹화해 보세요.
16. 더 해보기
- 다른 작업 학습시키기 — 블록 쌓기, 펜 정리, 컵 옮기기 등
single_task만 바꿔 새 데이터셋을 만들면 됩니다. - 다른 모델 써보기 —
--policy.type을smolvla나pi0로 바꾸면 비전-언어-액션 모델도 시도할 수 있습니다. - 데이터셋 공유하기 — 허깅페이스 Hub에 업로드하면 다른 사람의 로봇에서도 학습이 가능합니다. 캘리브레이션이 중요한 이유가 바로 이것입니다.
수업에서 만든 로봇팔이나 학습 결과가 있다면 언제든 공유해 주세요. 여러분의 SO-ARM101이 골봇의 다음 갤러리가 됩니다. 🤖