Skip to content
Thenar
THENAR-6 / SO-101

SO-101 · MG996R

The open SO-101, built with hobby MG996R servos: an arm a contributor can own. A task that asks for it ([arm so101] in its name on chain) is driven on this arm, recorded in its joints, and can be mirrored onto a real one on the same desk. Nothing here is a hand-written model: the chain, the limits and the mesh all come from the CAD in thenar-arms.

Axes5 + jaw
Reach400 mm
Jaw0–63 mm
Servos6 × MG996R
Drive it

Gripper pointing down, turned along the reach, solved by damped least squares over the five reaching joints with each one held to its limit. When that stalls against a limit it tries again from home and keeps the closer answer.

Joints
JointLimitsHome
Base rotation-85° … 85°0°
Shoulder-80° … 80°-25°
Elbow-80° … 80°35°
Wrist pitch-80° … 80°0°
Wrist roll-85° … 85°0°
Gripper / trigger0° … 70°20°
On your desk
  1. Flash thenar-arms’ firmware to the follower’s ESP32 and plug it in.
  2. Start the relay on this computer: node scripts/arm-relay.mjs --follower /dev/cu.usbserial-… --arm
  3. Press Mirror to my SO-101 above, or on any SO-101 task’s station.

The relay listens on loopback only and accepts no other website. It arms only with --arm and only from home, refuses any pose that would put the gripper or the wrist into the table, and sends STOP the moment the page stops streaming. The firmware stops on its own if a target is more than 250 ms old.

In the dataset

An SO-101 run is exported with embodiment: "SO-101 · MG996R follower R3" and its six joint columns named (base rotation, shoulder, elbow, wrist pitch, wrist roll, jaw), so a corpus never mixes two machines and a buyer knows which arm the angles belong to.

Find a task