Everything you need to build and play with the open-source 3D printed manipulator SO-ARM from LeRobot
This post will cover a little project that I did while preparing for Lerobot Global Hackathon 2025 with SO-ARM100. Since working with physical robots means that you need to know a bit of everything about engineering, for SO-100 it specifically involves tasks such as:
- choosing hardwares (body material, actuators, sensors) and assembling
- developing in simulation environments
- building applications: inverse kinematics, manipulation with vision, task learning by immitation learning, etc.
- debuging and maintaining performance
In this post we will go through all the aspects needed to develop applications around the SO-ARM100.
Content Outline
- What is this robot?
- Hardware selection
- Modeling
- From 3D design to physics simulated model
- Creating a scene (where the robot interacts with environment)
- ROS2 integration
- URDF
- MoveIt setup assistant
- ROS2 control
- Simulation
- MoveIt + Rviz2
- Gazebo
- Mujoco
- IsaacSim
- Control and Learning
- Feetech motor control
- Hardware interace with ROS2
- Feetech sdk with python
- Motion planning
- Immitation Learning with Diffusion Policy by LeRobot
- Reinforcement Learning
- With IsaacLab (required NVIDIA GPU)
- With Mujoco + SB3
- Feetech motor control
- Experiments and Demos
1. What is this robot?
SO-ARM100 (new version SO-ARM101) is a standard open-source 6 DOF serial manipulator which was developed and introduced by The Robot Studio with the purpose of democratize a standard robotic manipulation platforms to the public. It has a standard structure with 6 DOF articulating by 6 revolute joints. It often comes in a pair of 1 follower arm and 1 leader arm, for teleoperation purpose but not mandatory. Later, this platform has been adopted by Lerobot to develop a complete open-source learning framework which is welcomed by the robotics community. Since its introduction, there has been many on-going efforts to expand its use for robotic applications. The Lerobot Global Hackathon brought this platform to another level of publicity and adoptation. (To be updated)
2. Hardware selections
The official build guide is provided here including a reference bill of materials.
2.1. 3D design/printing:
For reference in Europe, the cost of printing for 1 follower arm is around 50 EUR, and for 1 follower and 1 leader is around 105 EUR.
2.2. Motors:
- Follower arm: 6 FEETECH STS3215 (7.4V/20Nm or 12V/30Nm versions)
- Leader arm: 6 FEETECH STS3215 (3 × 1/147 gear (C046), 2 × 1/191 gear (C044), 1 × 1/345 gear (C001))
- Driver and SDK:
-
Feetech software: https://www.feetechrc.com/software.html (to update FEETECH motor driver, only Window software is supported)
- Debug QT: https://github.com/Kotakku/FT_SCServo_Debug_Qt
- Feetech ros2 driver: https://index.ros.org/p/feetech_ros2_driver/
-
- Serial Bus Servo Driver Board: Waveshare Serial Bus Servo Driver Board
2.3. Sensors:
- Cameras: 32x32 UVC, RealSense (D405, D435), Webcam can be connected and used for data collection by OpenCVCamera or RealSenseCamera class provided here
- Tactile Sensing: AnySkin
2.4. Hardware assembling:
Step-by-step assembling provided by Lerobot here
2.5. Calibration
What is referred as calibrate in the guide by Lerobot is infact only homing calibration which defines the zero position of the motion range (eg. the middle position of the motion range). It has two folds:
- Know the physical range of motion of each motors in order to only send commands within this range.
- Normalize raw motors positions to sensible continuous values (e.g. percentages, degrees) instead of arbitrary discrete value dependant on the specific motor used that will not replicate elsewhere.
In addition to the homing calibration, kinematic calibration is provided by using Figaroh Plus toolbox. This calibration will correct any joint placement errors due to misalignment during assembling or imperfect materials compared to 3D design. (to be updated)
2.6. Trouble Shooting
Common errors:
- Unable to connect motors due to incorrect baudrate: Baudrate is the communication speed (bits per second) at which the controller sends commands to the motors, and it must match between the controller and motor settings for successful communication. This value must be matched for all serial connection: controling machine (eg: laptop USB) <-> motor bus controller <-> motors. The higher the value, the faster the data is transmitted. Default value is often set at 1,000,000, but some motor controller only support < 1,000,000.
- Unable to connect motors due to different motor software versions: all motors that are serially connected to motor controller should be on the same version (eg. 2.9 or 2.10). To update motor driver version, only Window software is supported.
- Power supply selection: Do not over-supply voltage to motors designed voltage values, which could burn motors.
- Power jack compatibility: When supplying power via 5.5/2.1 or 5.5/2.5 jack, pay attentiion to the parity (eg. positive tip). Failing to connect correctly would burn the controller board and motors.
3. Modeling
- From 3D design to physics simulated model
- URDF (.urdf)
- Lerobot: https://github.com/TheRobotStudio/SO-ARM100/tree/main/Simulation/URDF_SO100
- URDF (.urdf)
- Creating a scene (where the robot interacts with environment)
- Mujoco scene (.xml)
- Lerobot: https://github.com/TheRobotStudio/SO-ARM100/tree/main/Simulation/SO101
- LitchiCheng: https://github.com/LitchiCheng/mujoco-learning/tree/main/model/trs_so_arm100
- USD (.usd)
- Lychee: https://github.com/MuammerBay/IsaacLab-SO_100/tree/main/source/SO_100/SO_100/tasks/manager_based/so_100/asset
- https://github.com/konu-droid/robots_usd/tree/main/lerobot/so100
- Mujoco scene (.xml)
4. ROS2 integration
- URDF with Rviz2
- https://github.com/JafarAbdi/ros2_so_arm100/tree/main/so_arm100_description
- https://github.com/brukg/SO-100-arm/tree/main
- MoveIt setup assistant
- https://github.com/JafarAbdi/ros2_so_arm100/tree/main/so_arm100_moveit_config
- ROS2 control
- https://github.com/JafarAbdi/ros2_so_arm100/tree/main/so_arm100_description/control
- Hardware interace with ROS2
- https://github.com/brukg/so_arm_100_hardware/tree/main
5. Simulation
- MoveIt + Rviz2
- https://github.com/brukg/SO-100-arm
- https://github.com/JafarAbdi/ros2_so_arm100
- Gazebo
- https://github.com/brukg/SO-100-arm
- Mujoco
- mujoco-learning https://github.com/LitchiCheng/mujoco-learning
- IsaacSim
- Seeedstudio: https://wiki.seeedstudio.com/lerobot_so100m_isaacsim/
6. Control and Learning
- Motion planning
- Ompl
- pyroboplan
-
Immitation Learning with Diffusion Policy by LeRobot
- Reinforcement Learning
- Cube lifting: https://github.com/MuammerBay/IsaacLab-SO_100
- With IsaacLab (required NVIDIA GPU)
- https://github.com/MuammerBay/IsaacLab-SO_100/tree/main
- With Mujoco + SB3