Beam Bots Logo

BB SO-101

CI License: Apache 2.0 Hex version badge Hexdocs badge REUSE status Ask DeepWiki

Beam Bots installer and operator tools for TheRobotStudio's SO-101 — a 6-DOF desktop robot arm built around Feetech STS3215 serial bus servos.

Features

Installation

In an existing project:

mix igniter.install bb_so101

Or scaffold a new project with the dashboard included:

mix igniter.new my_robot --install bb_so101,bb_liveview

The Getting Started tutorial walks the rest of the way through powering up the arm, setting servo IDs, calibrating, and driving the dashboard.

Installer Options

Option Default Description
--robot {App}.Robot Module name for the generated robot module
--device /dev/ttyUSB0 Fallback serial device path

The generated config/runtime.exs reads the device path from FEETECH_DEVICE, falling back to --device. The generated application.ex boots the robot in :kinematic simulation mode when SIMULATE=1 is set in the environment.

Operator Tasks

Once your project is generated and your servos are wired, two mix tasks help you bring the arm up:

# One-time: assign servo IDs 1-6 to each servo in turn
mix bb_so101.setup_servos /dev/ttyUSB0
# Per-arm: write mechanical-zero offsets so `0 rad` is the joint centre
mix bb_so101.calibrate /dev/ttyUSB0

See the Set Up Servo IDs and Calibrate the Arm how-to guides for detail.

Upgrading

mix bb_so101.upgrade

Robots generated before the joint limits were corrected declare speeds and accelerations the servos cannot reach — and since BB.Servo.Feetech.Actuator now refuses to start when the servo will not accept the acceleration it is given, such a robot will not boot. The upgrader rewrites the limits of every joint driven by a Feetech actuator, leaving joints driven by anything else alone.

The gripper's transmission offset is not something the upgrader can decide for you. Robots generated before 0.4.0 declare a 45° offset on gripper_servo, which compensated for calibration zeroing the gripper at the midpoint of its sweep. Since 0.3.0 calibration anchors that zero to the closed stop instead, so an arm recalibrated on 0.3.0 or later has the correction applied twice and its gripper sits about 45° out. Which of the two is right depends on when the arm was last calibrated, not on which version generated it, so recalibrate the gripper and drop the offset together:

mix bb_so101.calibrate /dev/ttyUSB0 --joint gripper

then delete the transmission block from the gripper_servo actuator in your robot module.

Requirements

Documentation

Tutorials

How-to Guides

Full API documentation is available at HexDocs.

Acknowledgements