Obtain the parts for the SO-101
Install LeRobot
pip install -e ".[feetech]"
|
Step-by-Step Assembly Instructions
Leader-Arm Axis | Motor | Gear Ratio |
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 |
Clean Parts of the SO-101
Install Joint 1
-
Insert the first motor into the base.
-
Secure the motor with four M2x6mm screws (the smallest screws): two from the top and two from the bottom.
-
Slide the first motor holder over the motor and fix it with two M2x6mm screws (one on each side).
-
Fit both motor horns, and fasten the upper horn with an M3x6mm screw.
-
Mount the shoulder part.
-
Secure the shoulder part with four M3x6mm screws on the top and four M3x6mm screws on the bottom.
-
Install the shoulder motor holder.
Install Joint 2
-
Slide the second motor down into place from the top.
-
Secure the second motor with four M2x6mm screws.
-
Fit both motor horns to motor 2 and fasten the top horn with an M3x6mm screw.
-
Attach the upper arm, securing it with four M3x6mm screws on each side.
Install Joint 3
-
Insert motor 3 and secure it with four M2x6mm screws.
-
Install both motor horns on motor 3, fastening one of them with an M3x6mm horn screw.
-
Attach the forearm to motor 3, using four M3x6mm screws on each side.
Install Joint 4
-
Slide motor holder 4 into position.
-
Insert motor 4.
-
Secure motor 4 with four M2x6mm screws, then attach its motor horns and fasten one with an M3x6mm horn screw.
Install Joint 5
-
Insert motor 5 into the wrist holder and fasten it with two M2x6mm front screws.
-
Fit a single motor horn onto the wrist motor and secure it with an M3x6mm horn screw.
-
Attach the wrist to motor 4, fastening it with four M3x6mm screws on each side.
Install Gripper / Handle
Follower
-
Mount the gripper onto motor 5 by fastening it to the wrist motor horn with four M3x6mm screws.
-
Insert the gripper motor and secure it with two M2x6mm screws on each side.
-
Fit the motor horns and fasten one with an M3x6mm horn screw.
-
Install the gripper claw and secure it with four M3x6mm screws on each side.
Leader
-
Mount the leader holder on the wrist and fasten it with four M3x6mm screws.
-
Attach the handle to motor 5 using one M2x6mm screw.
-
Insert the gripper motor and secure it with two M2x6mm screws on each side; fit a motor horn and fasten it with an M3x6mm horn screw.
-
Attach the follower trigger using four M3x6mm screws.
Configure the motors of the SO-101
Locate the USB ports corresponding to each arm
lerobot-find-port
|
Mac
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.
|
Linux
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.
|
Assign the motor IDs and set their baud rates
Follower
lerobot-setup-motors \
|
from lerobot.robots.so101_follower import SO101Follower, SO101FollowerConfig config = SO101FollowerConfig( port="/dev/tty.usbmodem585A0076841", id="my_awesome_follower_arm", ) follower = SO101Follower(config) follower.setup_motors()
|
Connect the controller board to the 'gripper' motor only and press enter.
|
-
Power supply
-
USB cable between your computer and the controller board
-
3‑pin cable from the controller board to the motor
'gripper' motor id set to 6
|
Connect the controller board to the 'wrist_roll' motor only and press enter.
|
Leader
lerobot-setup-motors \ --teleop.type=so101_leader \ --teleop.port=/dev/tty.usbmodem575E0031751 # <- paste here the port found at previous step
|
from lerobot.teleoperators.so101_leader import SO101Leader, SO101LeaderConfig config = SO101LeaderConfig( port="/dev/tty.usbmodem585A0076841", id="my_awesome_leader_arm", ) leader = SO101Leader(config) leader.setup_motors()
|
Calibrate your Robot
Follower
lerobot-calibrate \ --robot.type=so101_follower \ --robot.port=/dev/tty.usbmodem58760431551 \ # <- The port of your robot --robot.id=my_awesome_follower_arm # <- Give the robot a unique name
|
from lerobot.robots.so101_follower import SO101FollowerConfig, SO101Follower config = SO101FollowerConfig( port="/dev/tty.usbmodem585A0076891", id="my_awesome_follower_arm", ) follower = SO101Follower(config) follower.connect(calibrate=False) follower.calibrate() follower.disconnect()
|
Leader
lerobot-calibrate \ --teleop.type=so101_leader \ --teleop.port=/dev/tty.usbmodem58760431551 \ # <- The port of your robot --teleop.id=my_awesome_leader_arm # <- Give the robot a unique name
|
from lerobot.teleoperators.so101_leader import SO101LeaderConfig, SO101Leader config = SO101LeaderConfig( port="/dev/tty.usbmodem58760431551", id="my_awesome_leader_arm", ) leader = SO101Leader(config) leader.connect(calibrate=False) leader.calibrate() leader.disconnect()
|