Skip to content

Assemble the rig

You should already have:

  • All parts printed per Print the parts, including the pendulum link with the 2p coin sealed inside — if you skipped the layer-21 pause, reprint it. Its mass and inertia are load-bearing assumptions for the whole training pipeline.
  • Everything on the bill of materials.
  • Hookup wire cut slightly long. Excess is easy to manage; a wire two millimetres short turns the next joint into a fight.

The motor plate.stl part carries the NEMA17 and mounts inside the enclosure.

TODO: screw size and length for the NEMA17 face mount (M3 × ?), whether the plate mounts to the base before or after the motor, and which way the motor’s wire exit should face relative to the cable channel.

TODO: fastener spec and orientation. Note which face of base.stl is the top — the arm mounts at 75 mm above the base origin, and the printed base is 70 mm tall, so the arm plane sits just above the enclosure lip.

The AS5600 reads a diametric magnet that must sit on the pendulum’s rotation axis, close to the sensor face and centred on it. Getting this wrong is the most common cause of a rig that reads noise.

TODO: magnet retention method, target air gap, and how the AS5600 breakout is held. The electronics page covers the wiring; this step is the mechanical placement.

The arm’s rotation axis is the motor axis, and the arm extends 65 mm to the pendulum pivot (ARM_LENGTH_M in pendulum_env.py — this value is a simulation constant, so if your arm differs, the simulation is wrong).

TODO: shaft coupling method (set screw onto the flat? press fit?), and how to establish the arm’s zero position relative to the enclosure so the ±125° software limits sit symmetrically.

The pendulum swings freely on a bearing at the arm tip, about an axis running along the arm — so it swings in the vertical plane perpendicular to the arm, which is what lets the arm’s rotation drive it.

TODO: bearing part and seat fit, shaft retention, and how much free play is acceptable. Note the goal: the pendulum should swing for a long time when released, because the free-swing recording used to measure friction depends on getting many clean oscillations.

TODO: cable routing so the arm’s ±135° travel never tugs the encoder wires. The software limit exists to stop wires choking, so the mechanical routing has to be consistent with it.

Regardless of the gaps above, the rig should pass these before you power anything:

  • The arm rotates freely by hand through its full intended travel, with no binding and no wire tension at the extremes.
  • The pendulum, released from horizontal, swings for many oscillations before stopping. A pendulum that stops in two or three swings has too much bearing friction, and no amount of training will compensate for it.
  • The pendulum hangs straight down at rest, repeatably. That resting pose becomes the encoder zero every time the firmware boots.