STS3215 Open-Source Hardware Guide

Quickly build a differential drive robot base with STS3215 serial servos for VLA end-to-end control.

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.

Key Advantage: LeRobot has native support for STS3215, no extra driver development needed. Plug-and-play.

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
💡 Tip: STS3215 can be powered directly from a 7.4V LiPo battery, no additional BEC required.

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.

Key Advantages Recap:
  • ✅ Native LeRobot support, plug-and-play
  • ✅ Total cost ~$21, excellent value
  • ✅ Complete prototype in 1-2 days
  • ✅ Perfect for VLA end-to-end control