Limits and gotchas
What to know before you order parts: the trade-offs in the design, what wears out, and how to keep it safe.
Read this before you order parts. None of these stop the build, and each one is easier to handle when you know it is coming.
It cannot steer. All axes are parallel, so it goes forward and back along a line. A yaw joint in the middle would let the open worm turn but would be dead weight inside the closed wheel, so the design leaves it out. Adding one is a good extension project.
It can fall on its side and cannot get up. The wheel is 140 mm tall on an 80 mm base. On its side every joint axis is vertical and it is stuck; pick it up. The sim tilts the floor ±2° and ends the episode if it tips, but the model is left-right symmetric, so expect a few more sideways falls on a real desk than in sim.
The servos fight each other and get hot. This is the main wear mechanism. The standing wheel draws about 1 A doing nothing and the rolling wheel averages 2.7 A, which is every servo at roughly 45 % of stall. Keep wheel runs to a minute or two, let it cool, and treat servos as consumables. A 10-pack leaves two spares; for a class, stock four per robot.
MG90S clones may be weaker than 1.5 kg·cm. The sim randomises stall torque down to 1.05 kg·cm. The move that asks most of them is the bite, which lifts both ends off the desk. If your servos are weak, the bite stalls half way. Test before you build: one servo, one link, a 100 g weight at 10 cm.
Print the coupon first. The parts pass a full numerical fit check (servo fit, joint sweep, latch, wheel, electronics clearance), and a first print is where the remaining surprises show up. The known ones: servo and horn fit on clone servos, whose spline height and horn shape vary by ±0.5 mm (that is what coupon.stl is for); the 2 mm self-tapping pivot screw wearing its hole oval; and whether the head pins find the tail notch as the head swings in, which is checked seated but not on approach.
The middle of the strap is full. The battery, ESP32 and power board each fill the 32 mm of free back between their neighbours at full curl. Joints 4 to 6 touch electronics at +92°, so every joint has a printed end stop at +90°, and commands are capped at +86° in sim and in host/link.py. A battery thicker than 12.5 mm or a taller board will not fit without lowering that cap. The power board only fits with a Mini560 of 29 × 18 mm or smaller and an INA219 board no wider than 23 mm.
Leaf springs fatigue. Peak bending stress at stall is about 12 MPa. PETG should last; PLA will craze and snap at the root within hours of running. Print in PETG and print two spare links.
Tune the latch on your robot. The pull-off force between a 6 × 3 magnet behind 0.8 mm of plastic and an M3 screw shank is estimated at 2 to 4 N for the pair, and the design needs 1.2 to 2.0 N. Build step 8 measures it and you shim it down. The contact-based latch sensor may bounce while rolling; the firmware debounces 15 ms, and the Electronics page describes a hall-sensor fallback.
The real wheel will be slower than the sim at first. Friction, O-ring grip and servo heating are the hardest things to model. Expect the wheel to rock in place until you tune the gain and the magnets.
The servo buck trips on over-temperature from about 6.5 A and stays off until you replug the battery. The 3 A polyfuse protects against a short, not against hot servos.
LiPo safety. These packs have no protection circuit. The firmware cuts the servos at 6.6 V and deep-sleeps, but the board still draws about 55 mA, so unplug the battery after every run. If your pack comes with a PH2.0 or JST plug you have to fit an XT30, which means soldering on a live battery: one lead at a time, never both bare at once, or buy a pack that already has XT30. Charge in a LiPo bag, attended.
Battery life is short: about 12 minutes of rolling per pack, which is why the kit has two.
Spares to keep per robot: 2 servos (4 for a class kit), 2 printed links, 10 O-rings, 2 magnets, the second battery, zip ties.
Why none of this is scary. Every joint is the same part, so any failure is a five-minute swap of a $2.75 servo or a 15-gram print. The firmware goes limp on a lost link, low battery or timeout. The policy runner stops on stale telemetry or sustained over-current. Nothing on the robot is worth more than the battery.