LeRobot documentation
SO-100
SO-100
SO-100 로봇을 조립하는 방법을 아래 단계에서 설명합니다.
부품을 조달합니다
이 README를 따르세요. 부품 목록과 부품 소싱 링크, 그리고 부품을 3D 프린팅하는 방법이 포함되어 있습니다. 처음 3D 프린팅을 하거나 3D 프린터를 소유하지 않은 경우에도 조언을 제공합니다.
LeRobot 설치 🤗
LeRobot를 설치하려면 설치 가이드를 따르세요.
이 지침 외에도 Feetech SDK를 설치해야 합니다(PyPI에서 LeRobot을 설치한 경우 pip install 'lerobot[feetech]'을 대신 실행하세요):
pip install -e ".[feetech]"모터 구성
참고: SO-101과 달리, 팔이 조립된 후에는 모터 커넥터에 쉽게 접근할 수 없으므로 구성 단계를 미리 수행해야 합니다.
1. 각 팔에 연결된 USB 포트를 찾습니다
각 버스 서보 어댑터의 포트를 찾으려면 다음 스크립트를 실행하세요:
lerobot-find-port
예시 출력:
Finding all available ports for the MotorBus.
['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
Remove the USB cable from your MotorsBus and press Enter when done.
[...Disconnect corresponding leader or follower arm and press Enter...]
The port of this MotorsBus is /dev/tty.usbmodem575E0032081
Reconnect the USB cable.발견된 포트는 리더 또는 팔로워 팔에 해당하는 /dev/tty.usbmodem575E0032081입니다.
Linux에서는 다음을 실행하여 USB 포트에 대한 액세스 권한을 부여해야 할 수 있습니다:
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1예시 출력:
Finding all available ports for the MotorBus.
['/dev/ttyACM0', '/dev/ttyACM1']
Remove the usb cable from your MotorsBus and press Enter when done.
[...Disconnect corresponding leader or follower arm and press Enter...]
The port of this MotorsBus is /dev/ttyACM1
Reconnect the USB cable.발견된 포트는 리더 또는 팔로우어 팔에 해당하는 /dev/ttyACM1입니다.
2. 모터 ID와 baudrate를 설정합니다
각 모터는 버스에서 고유한 id로 식별됩니다. 새 모터는 일반적으로 기본 id가 1로 설정되어 있습니다. 모터와 컨트롤러 간의 통신이 정상적으로 작동하려면 먼저 각 모터에 고유하고 서로 다른 id를 설정해야 합니다. 또한, 버스를 통해 전송되는 데이터의 속도는 baudrate에 의해 결정됩니다. 컨트롤러와 모든 모터가 서로 통신하려면 동일한 baudrate로 구성되어야 합니다.
이를 위해 먼저 컨트롤러를 통해 각 모터에 개별적으로 연결하여 이 값들을 설정해야 합니다. 이 매개변수들은 모터 내부 메모리의 비휘발성 영역(EEPROM)에 기록되므로, 이 작업은 한 번만 수행하면 됩니다.
다른 로봇에서 모터를 재사용하는 경우, id와 baudrate가 일치하지 않을 가능성이 높으므로 이 단계도 수행해야 합니다.
팔로워
컴퓨터와 전원 공급 장치에서 follower arm의 컨트롤러 보드로 USB 케이블을 연결합니다. 그런 다음, 이전 단계에서 가져온 포트와 함께 다음 명령을 실행하거나 API 예제를 실행합니다. 또한 id 매개변수를 사용하여 follower arm에 이름을 지정해야 합니다.
모터 ID 설정 방법에 대한 시각적 참고 자료로, SO101 팔의 설정 과정을 따라가는 이 영상을 참고하세요.
lerobot-setup-motors \
--robot.type=so100_follower \
--robot.port=/dev/tty.usbmodem585A0076841 # <- paste here the port found at previous stepfrom lerobot.robots.so_follower import SO100Follower, SO100FollowerConfig
config = SO100FollowerConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_follower_arm",
)
follower = SO100Follower(config)
follower.setup_motors()다음 지침을 확인해야 합니다
Connect the controller board to the 'gripper' motor only and press enter.지시대로 그리퍼의 모터를 연결합니다. 보드에 연결된 유일한 모터인지, 그리고 해당 모터가 다른 모터와 직렬 연결(daisy-chain)되어 있지 않은지 확인합니다. [Enter]를 누르면 스크립트가 해당 모터의 id와 baudrate를 자동으로 설정합니다.
Troubleshooting
해당 단계에서 오류가 발생하면 케이블을 확인하고 올바르게 연결되어 있는지 확인하세요:
- 전원 공급
- 컴퓨터와 컨트롤러 보드 사이의 USB 케이블
- 컨트롤러 보드에서 모터로 이어지는 3핀 케이블
Waveshare 컨트롤 보드를 사용하는 경우, 두 개의 점퍼가 B 채널(USB)에 설정되어 있는지 확인하세요.
다음 메시지가 표시되어야 합니다:
'gripper' motor id set to 6다음 지침이 따릅니다:
Connect the controller board to the 'wrist_roll' motor only and press enter.컨트롤러 보드에서 3핀 케이블을 분리할 수 있지만, 다른 끝의 gripper 모터에는 연결된 상태로 두어도 됩니다. 이미 올바른 위치에 있기 때문입니다. 이제 다른 3핀 케이블을 wrist roll 모터에 연결하고 컨트롤러 보드에 꽂습니다. 이전 모터와 마찬가지로, 보드에 연결된 모터가 이 모터 하나뿐인지, 그리고 모터 자체가 다른 모터에 연결되어 있지 않은지 확인하세요.
지시대로 각 모터에 대해 해당 작업을 반복합니다.
Enter를 누르기 전에 각 단계에서 케이블 연결 상태를 확인하세요. 예를 들어, 보드를 조작하는 과정에서 전원 공급 케이블이 분리될 수 있습니다.
작업이 완료되면 스크립트가 종료되며, 이때 모터가 사용 준비가 됩니다. 이제 각 모터의 3핀 케이블을 다음 모터에 연결하고, 첫 번째 모터(id=1인 ‘shoulder pan’)의 케이블을 컨트롤 보드에 연결합니다. 컨트롤 보드는 이제 팔의 베이스에 부착할 수 있습니다.
리더
리더 암에 대해 동일한 단계를 수행합니다.
lerobot-setup-motors \
--teleop.type=so100_leader \
--teleop.port=/dev/tty.usbmodem575E0031751 # <- paste here the port found at previous stepfrom lerobot.teleoperators.so_leader import SO100Leader, SO100LeaderConfig
config = SO100LeaderConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_leader_arm",
)
leader = SO100Leader(config)
leader.setup_motors()단계별 조립 지침
6개의 리더 모터의 기어를 제거합니다
Video removing gears
기어 제거에 대한 비디오를 따라 하세요. 리더 암의 모터 기어를 제거해야 합니다. 그 결과, 모터의 위치 인코딩만 사용하고 마찰을 줄여 리더 암을 더 쉽게 조작할 수 있습니다.
클린 파트
3D 인쇄된 부품에서 모든 지지재를 제거하세요. 가장 쉬운 방법은 작은 드라이버를 사용하여 지지재 아래로 삽입하는 것입니다.
추가 가이드
Video assembling arms
참고: 이 영상은 팔 조립에 대한 시각적 안내를 제공하지만, 배선을 언제, 어떻게 해야 하는지는 명시하지 않습니다. 배선을 미리 넣어두는 것이 나중에 넣는 것보다 훨씬 쉽습니다. 첫 번째 팔을 조립하는 데는 1시간이 조금 더 걸릴 수 있지만, 익숙해지면 두 번째 팔은 1시간 이내에 조립할 수 있습니다.
첫 번째 모터
2단계: 와이어 삽입
- 첫 번째 모터에 두 개의 전선을 삽입합니다.
3단계: Base에 설치
- 첫 번째 모터를 베이스에 넣으세요.
4단계: 모터 고정
- 모터를 4개의 나사로 고정하세요. 아래에서 2개, 위에서 2개입니다.
5단계: 모터 홀더 부착
- 첫 번째 모터 홀더를 슬라이드하여 끼우고, 양쪽 각각 하나씩 총 두 개의 나사로 고정합니다.
6단계: 모터 뿔 부착
- 모터 호른 2개를 모두 설치하고, 상단 호른은 나사로 고정합니다. 모터 호른을 부착할 때 모터 위치가 이동하지 않도록 주의하세요. 특히 기어를 제거한 리더 암의 경우 더욱 신경 써야 합니다.
Video adding motor horn
7단계: 어깨 부분 부착
- 로봇의 뒷면으로 하나의 와이어를, 다른 하나는 왼쪽 또는 자신 쪽으로 연결하세요(사진 참조).
- 어깨 부분을 부착합니다.
8단계: 어깨 고정
- 어깨 부분의 상단과 하단에 각각 4개의 나사를 사용하여 조입니다. (어깨를 회전시켜 하단 구멍에 접근합니다.)
제2 모터 조립
9단계: Motor 2 설치
- 위에서 두 번째 모터를 삽입하고 모터 1에서 모터 2로 배선을 연결합니다.
10단계: 어깨 홀더 부착
- shoulder motor 홀더를 추가합니다.
- 모터 1에서 모터 2로 이어지는 와이어가 홀더 뒤로 지나가도록 하고, 다른 와이어는 위로 라우팅되도록 하세요(사진 참조).
- 이 부분은 조립이 다소 빡빡할 수 있습니다. 이미지와 같은 작업대나 유사한 장치를 사용하여 부품을 모터 주위로 밀어 넣을 수 있습니다.

11단계: 모터 2 고정
- 두 번째 모터를 나사 4개로 고정합니다.
12단계: 모터 호른 부착
- 모터 2에 두 개의 모터 호른을 모두 부착하고, 다시 호른 나사를 사용하세요.
13단계: 베이스 부착
- 2개의 나사를 사용하여 기본 부착물을 설치합니다.
14단계: 윗팔 부착
- 상완을 양쪽 각각 4개의 나사로 고정하세요.
세 번째 모터 어셈블리
15단계: Motor 3 설치
- 모터 2에서 케이블 홀더를 거쳐 모터 3으로 모터 케이블을 연결한 후, 4개의 나사로 모터 3을 고정합니다.
16단계: 모터 호른 부착
- 모터 3에 두 개의 모터 호른을 모두 부착하고, 하나를 다시 호른 나사로 고정합니다.
17단계: 전완 부착
- 4개의 나사를 각각 양쪽에 사용하여 전완을 모터 3에 연결합니다.
네 번째 모터 어셈블리
18단계: Motor 4 설치
- 모터 4를 삽입하고, 모터 3에서 케이블을 연결한 다음, 나사로 케이블 홀더에 케이블을 고정합니다.

19단계: 모터 홀더 4 부착
- 네 번째 모터 홀더를 설치합니다(조임이 강합니다). 한 개의 와이어가 위로, 모터 3의 와이어가 아래로 라우팅되도록 확인합니다(사진 참조).
20단계: 모터 4 고정 및 호른 부착
- 모터 4를 4개의 나사로 고정하고 모터 호른을 부착하며, 호른 하나당 호른 나사를 하나 사용합니다.
Wrist Assembly
21단계: Motor 5 설치
- 모터 5를 손목 홀더에 삽입한 후 앞쪽 나사 2개로 고정합니다.
22단계: 손목 연결
- 모터 4에서 모터 5로 배선을 연결합니다. 그리고 그립퍼용 다른 배선도 미리 삽입합니다.
- 4번 모터에 손목을 양쪽 각각 4개의 나사로 고정하세요.
23단계: 손목 뿔 부착
- 손목 모터에 모터 혼 하나만 설치하고 혼 나사로 고정하세요.
팔로워 구성
24단계: 그립커 부착
- 모터 5에 그립터를 부착합니다.
25단계: Gripper Motor 설치
- 그리퍼 모터를 삽입하고, 모터 5에서 모터 6으로 모터 배선을 연결한 후, 각 측면에 나사 3개로 고정합니다.
26단계: 그립퍼 호른 & 클로 부착
- 모터 호른을 부착하고 다시 호른 나사를 사용합니다.
- 그리퍼 클로를 설치하고 양쪽에 나사 4개로 고정합니다.
27단계: 마운트 컨트롤러
- 로봇 뒷면에 모터 컨트롤러를 부착합니다.

조립 완료 – Leader 팔 조립으로 진행합니다.
리더 구성
리더 구성의 경우 1~23단계를 수행합니다. 모터에서 모터 기어를 제거했는지 확인하세요.
24단계: 리더 홀더 부착
- 리더 홀더를 손목에 장착하고 나사로 고정합니다.
25단계: 핸들 연결
- 핸들을 4개의 나사를 사용하여 모터 5에 부착합니다.
26단계: Gripper Motor 설치
- 그리퍼 모터를 삽입하고 각 측면에 나사 3개로 고정하며, 호른 나사를 사용하여 모터 호른을 부착한 후 모터 배선을 연결합니다.
27단계: 트리거 연결
- 팔로워 트리거를 나사 4개로 부착합니다.
28단계: 마운트 컨트롤러
- 로봇 뒷면에 모터 컨트롤러를 부착합니다.

교정
다음으로, 리더와 팔로워 팔이 동일한 물리적 위치에 있을 때 동일한 위치 값을 가지도록 로봇을 보정해야 합니다. 보정 과정은 매우 중요하며, 이를 통해 한 로봇에서 학습된 신경망이 다른 로봇에서도 작동할 수 있게 됩니다.
팔로워
팔로워 암을 보정하려면 다음 명령어나 API 예제를 실행하세요:
# Use the port of your follower arm, and give the arm a unique name with --robot.id
lerobot-calibrate \
--robot.type=so100_follower \
--robot.port=/dev/tty.usbmodem58760431551 \
--robot.id=my_awesome_follower_armfrom lerobot.robots.so_follower import SO100FollowerConfig, SO100Follower
config = SO100FollowerConfig(
port="/dev/tty.usbmodem585A0076891",
id="my_awesome_follower_arm",
)
follower = SO100Follower(config)
follower.connect(calibrate=False)
follower.calibrate()
follower.disconnect()대부분의 로봇에 대해 보정 방법을 통합했습니다. 따라서 이 SO100 암의 보정 단계는 Koch 및 SO101의 단계와 동일합니다. 먼저, 각 관절이 자신의 범위의 중간에 위치하도록 로봇을 이동한 다음 Enter를 누릅니다. 두 번째로, 모든 관절을 전체 운동 범위를 따라 이동합니다. 참고로 SO101에 대한 동일한 과정의 비디오는 여기에서 찾을 수 있습니다.
리더
리더 암을 보정하려면 동일한 단계를 수행하고, 다음 명령어나 API 예제를 실행하세요:
# Use the port of your leader arm, and give the arm a unique name with --teleop.id
lerobot-calibrate \
--teleop.type=so100_leader \
--teleop.port=/dev/tty.usbmodem58760431551 \
--teleop.id=my_awesome_leader_armfrom lerobot.teleoperators.so_leader import SO100LeaderConfig, SO100Leader
config = SO100LeaderConfig(
port="/dev/tty.usbmodem58760431551",
id="my_awesome_leader_arm",
)
leader = SO100Leader(config)
leader.connect(calibrate=False)
leader.calibrate()
leader.disconnect()축하합니다 🎉. 이제 로봇이 스스로 작업을 학습할 준비가 완료되었습니다. 다음 튜토리얼을 따라 학습을 시작하세요: 실제 로봇으로 시작하기
Update on GitHub질문이 있거나 도움이 필요하시면 Discord로 문의해 주세요.