Skip to content
Thenar

THENAR-6

A six-axis arm with a parallel-jaw gripper. There is no CAD file — the geometry is generated by a 21-part Python kernel using numpy alone, with no CSG booleans, and every part is validated as a closed surface before it is exported. Change a constant, rerun the script, and the arm, this page, and the solver all move together.

Tasks can also ask for a second arm: the SO-101 · MG996R →

Axes6
Reach512 mm
Height694 mm
Jaw stroke42 mm
Link dimensions
LinkConstantValueSpans
PlinthPLINTH_H12.0mmgranite pad the base bolts to
PedestalBASE_H70.0mmtapered column to the yaw axis
ShoulderSHOULDER_H96.0mmJ1 to the pitch axis
Upper armL1210.0mmJ2 to J3
ForearmL2182.0mmJ3 to J4
WristWRIST_H58.0mmJ4 to J5
YokeYOKE_H52.0mmJ5 to J6
Tool flangeFLANGE_H10.0mmmounting face
Kinematic chain

The GLB ships as a named node hierarchy rather than one welded mesh, which is what lets the station drive each joint straight from the inverse kinematics solver instead of playing a baked animation.

Export
Parts21
Triangles8,080
GLB size208 KB
Closed surfaces21 / 21
Per-part validation
  • plinth384closed
  • pedestal768closed
  • collar_j1640closed
  • barrel_j1512closed
  • shoulder144closed
  • collar_j2640closed
  • upper_arm144closed
  • collar_j3640closed
  • barrel_j3512closed
  • forearm144closed
  • collar_j4640closed
  • wrist_housing384closed
  • collar_j5640closed
  • wrist_yoke144closed
  • flange384closed
  • collar_j6640closed
  • gripper_body144closed
  • finger_left144closed
  • pad_left144closed
  • finger_right144closed
  • pad_right144closed
Finish

Regenerate everything on this page with python3 cad/arm.py. It writes the GLB the viewport loads, one STL per printable part, and the JSON this page reads.

Put it to work
Signing without a seed phrase

Monad carries the P-256 precompile at 0x0100, so a signature from the curve a passkey uses can be checked on chain directly. The registry binds one to an address, and a run can be authorised with it. Register a passkey →

Ask the instrument

Not a chatbot. Every answer below is read from the constant the scorer actually uses and says where it came from, and a question it cannot answer exactly is refused rather than approximated — which is the whole reason the list is short.

What this is not

An arm moving in a browser invites a few assumptions. These are the ones that are wrong, stated here rather than left to be discovered. They are roadmap, and nothing in the interface presents them as working.

The first of those is measured rather than left as a caveat. Every recorded run is handed to MuJoCo as the same release state and integrated to rest under rigid-body dynamics; the distance between where the recording put the payload and where physics would have is published on that run’s own page. It scores nothing and changes no payout — it exists so the gap is a figure rather than an assumption. See it on a run.