OpenArm Mini Teleop
OpenArm Mini teleop uses the Feetech leader arms directly and publishes OpenArm followerJointState commands through the generic teleop runtime. It does not
depend on LeRobot at runtime.
Install optional dependencies
ftservo-python-sdk and imports as
scservo_sdk.
One-shot motor ID setup
To write a physical Feetech motor ID, connect exactly one motor to the USB controller and run the one-shot setup helper. Do not leave multiple motors on the bus when changing IDs, especially if they may share the same current ID.Calibration storage
Runtime startup is non-interactive. Create calibration artifacts before running the teleop blueprint. Defaults are side-specific directories:- left:
STATE_DIR / "teleop" / "openarm_mini" / "left" / "calibration.json" - right:
STATE_DIR / "teleop" / "openarm_mini" / "right" / "calibration.json"
STATE_DIR is DimOS’ XDG state directory, typically
~/.local/state/dimos on Linux.
Manual calibration
Run the calibration utility with the OpenArm Mini leader connected. The utility only opens the leader Feetech serial ports; it never startsControlCoordinator and
never connects follower OpenArm hardware.
Before calibration, place the selected leader side in its natural zero pose: the
pose designed to correspond to the OpenArm follower’s all-zero arm-joint
configuration. Calibration reads arm motors joint_1 through joint_7 once and
writes those raw positions as homing_offset values. Motor 8 / gripper is not
read or stored in v1 because the OpenArm follower gripper is not yet exposed as a
formal coordinator-controllable API.
flip value before writing the
artifact. Calibration artifacts are strict arm-only JSON with exactly
joint_1…joint_7, each containing only:
id: physical Feetech motor id for that semantic leader jointhoming_offset: raw tick value captured in the leader zero poseflip: whether to negate the calibrated radians for that joint
--left-flips none or --right-flips none to record no flipped joints.
At runtime, raw Feetech ticks convert to radians around the captured zero using
the full Feetech encoder span, then per-joint flip is applied. The teleop
module maps semantic leader joints directly to OpenArm follower arm-joint names
and clamps outgoing positions to OpenArm follower joint limits before publishing. The
operator must still align the follower near the leader-implied command before
enabling teleop authority; automatic startup alignment gating is out of scope for
v1.
To inspect calibrated leader readings without starting robot control:
ControlCoordinator or connect follower
OpenArm hardware.
The TUI visualizes one side at a time. --side selects the side-specific default
calibration path. Use --calibration-path to select a non-default calibration
artifact. The default baudrate is 1000000; pass --baudrate only if your
leader was configured differently.
Visualization-only Viser bring-up
Use the left-side Viser blueprint to validate real OpenArm Mini leader motion before connecting any OpenArm follower hardware:1000000. Override
openarmminiteleopmodule.baudrate only if your leader was
configured differently.
The blueprint requires:
- a real OpenArm Mini left leader connected to the configured left Feetech serial port
- a valid left calibration artifact
- Viser dependencies from
uv sync --extra manipulationoruv sync --extra all
joint_command through ControlCoordinator into mock follower
hardware, then renders coordinator_joint_state in ManipulationModule’s Viser
backend. It never connects real OpenArm follower hardware.
Right-arm coordinator + Viser bring-up
Useopenarm-mini-right-teleop-viser to route a real OpenArm Mini right leader
through ControlCoordinator and render the right follower state in
ManipulationModule’s Viser backend. The leader is always physical; the follower
is always mock in this blueprint.
Run with the required right leader connection settings:
- a real OpenArm Mini right leader connected to the configured right Feetech serial port
- a valid right calibration artifact at the default right calibration path, or a
configured
right_calibration_path - Viser dependencies from
uv sync --extra manipulationoruv sync --extra all
openarm_right_joint1 through openarm_right_joint7). Viser renders
follower-observed coordinator_joint_state, not the raw sender-side command, so
mock mode validates the same coordinator routing used before real hardware is
connected. Real follower hardware is intentionally out of scope for these Viser
demo blueprints.
Dual-arm coordinator + Viser bring-up
Useopenarm-mini-dual-teleop-viser for bimanual OpenArm Mini leader teleop with
the same coordinator-observed Viser path. It uses one bimanual
OpenArmMiniTeleopModule, one ControlCoordinator, and one ManipulationModule
with both left and right OpenArm models.
Run with the required leader connection settings:
openarm_left_joint1throughopenarm_left_joint7openarm_right_joint1throughopenarm_right_joint7
