Overview
This guide explains how to quickly build a robot mobile base using STS3215 serial servos. This is a low-cost, high-efficiency open-source solution, particularly well-suited for developing and testing VLA (Vision-Language-Action) end-to-end control algorithms.
Hardware Architecture
The entire system wiring is surprisingly simple:
Jetson Orin Nano
├── USB 3.0 Port 0 ───→ Front Camera (USB Camera)
├── USB 3.0 Port 1 ───→ URT-1 Debug Board (Servo control)
└── GPIO/I2C ─────────→ Other sensors (optional)
URT-1 Debug Board
└── 3Pin Servo Cable ─────→ STS3215 Bus
├── ID=1: Left wheel servo
└── ID=2: Right wheel servo
Bill of Materials
| Item | Quantity | Price (USD) | Notes |
|---|---|---|---|
| STS3215 Servo | 2 | $10 | Includes wheel holder and mounting hardware |
| URT-1 Debug Board | 1 | $3 | Feetech official |
| Servo Extension Cable | 2 | $1 | 30cm, 3pin |
| 7.4V LiPo Battery | 1 | $7 | 2S, 3000mAh |
Software Driver
LeRobot already has native support for STS3215, you can use it directly:
Basic Connection
from lerobot.motors.feetech import FeetechMotorsBus, Motor
# Configure motors
motors = {
"left_wheel": Motor(model="sts3215", id=1),
"right_wheel": Motor(model="sts3215", id=2),
}
# Create bus
bus = FeetechMotorsBus(
port="/dev/ttyUSB0", # URT-1 debug board
motors=motors,
)
# Connect
bus.connect()
Velocity Control
# Configure for velocity mode
for motor in bus.motors:
bus.write("Operating_Mode", motor, 1) # 1 = velocity mode
bus.write("Torque_Enable", motor, 1) # Enable torque
# Set velocity (-2047 ~ 2047)
bus.write("Goal_Velocity", "left_wheel", 500)
bus.write("Goal_Velocity", "right_wheel", 500)
Integration with VLA
Integrate the STS3215 base with a VLA (Vision-Language-Action) policy:
class STS3215VLARobot:
def __init__(self):
self.camera = cv2.VideoCapture(0)
self.motor_bus = FeetechMotorsBus(...)
self.vla_policy = load_policy("xrollout/vla-base-v2")
def run(self):
while True:
# 1. Capture image
ret, image = self.camera.read()
# 2. VLA inference
action = self.vla_policy(image, instruction)
# action: [linear_vel, angular_vel]
# 3. Convert to differential drive commands
left_speed, right_speed = self._diff_drive(action)
# 4. Send to STS3215
self.motor_bus.write("Goal_Velocity", "left_wheel", left_speed)
self.motor_bus.write("Goal_Velocity", "right_wheel", right_speed)
Summary
The STS3215 open-source solution provides a low-cost, high-efficiency mobile base solution for robotics research. Thanks to native support in LeRobot, developers can quickly build a VLA end-to-end control system without tedious driver development.
- ✅ Native LeRobot support, plug-and-play
- ✅ Total cost ~$21, excellent value
- ✅ Complete prototype in 1-2 days
- ✅ Perfect for VLA end-to-end control