Φferromotion · textbook · chapter 13 rust → wasm · on-device

Held by cables

A platform hung from a few cables can move faster and reach farther than any jointed arm — but a cable can only pull, never push. Holding it steady means finding a set of tensions that are all positive and all within limits, and this page finds them on your device with the same Rust code the native tools use.

01 — the problemA cable only pulls

Cable-driven parallel robots — camera rigs over a stadium, giant 3D printers, rehabilitation supports — trade rigid links for lightweight cables spooled from fixed anchors. That makes them fast and huge, but it comes with a hard constraint: a cable cannot push. Every cable must stay taut, its tension between a floor (so it never goes slack) and a ceiling (so the motor and cable survive). Holding the platform is a question of whether such tensions exist at all.

02 — redundancyMore cables than freedoms

To keep every cable able to pull, these robots use more cables than the platform has degrees of freedom. That makes the tensions non-unique — many combinations produce the same supporting wrench — so the controller must choose one that keeps them all comfortably in range. The clean choice is the tension nearest the middle of each cable's limits that still balances the load exactly.

Below, a platform hangs from four cables against its own weight. Drag it around the frame; each cable's thickness shows its tension.

platform
max tension
min tension

drag it toward a corner and watch a cable's tension collapse toward slack — that edge is the boundary of the workspace

03 — the workspaceWhere a valid grip exists

Drag the platform toward a corner and one of the far cables loses tension — it would go slack, and the moment it does the platform is no longer controlled. The set of poses where a fully-taut, in-range distribution exists is the robot's wrench-feasible workspace, and its boundary is exactly where you feel a cable give out. Raise the weight and the workspace shrinks; the heavier the load, the smaller the region the cables can hold it in.

This is the trade at the heart of cable robots. The tension distribution is a tiny computation — project the mid-range tension onto the set that balances the load — but whether it lands inside the limits is what decides if the pose is usable at all. The controller does not just pick tensions; it is continuously checking that a valid grip still exists, and steering to stay inside the region where it does.

04 — the checkPositive, balanced, in range

On load, this page hung the platform in the centre and solved for the holding tensions:

a valid (all-taut, in-range) distribution exists?
largest cable tension
verdict

The four tensions come out positive, within limits, and balance the weight exactly — the equilibrium residual is machine-zero by construction. There is one subtlety the model is honest about: at the perfectly centred, unrotated pose the cables pull straight along their own moment arms, so the platform has plenty of force authority but no torque authority at all — a wrench that twists it cannot be balanced there until it rotates even slightly.

05 — the pointReach is bounded by the pull

The workspace is where the cables can still pull.

A pull-only mechanism can be fast, light, and enormous — and its reachable, controllable region is precisely the set of poses where some all-positive, in-range tension distribution balances the load. Find that distribution, and check it exists.

Cable robots close out this series on a different note than the rigid and soft chapters: here the governing question is not a single stability margin but the feasibility of a pull, a small least-squares projection wrapped in a bounds check. It is the same shape of answer, though — turn a control problem into a place where the solution is forced and then simply read off whether it lands in the allowed set. Fast, light, and reaching far, cable robots are physical AI built from tension alone.

What you just drove: the Cdpr tension distribution from ferromotion-control, compiled to WebAssembly — the same code the native tools link against. Each drag rebuilds the structure matrix at the new pose and projects the mid-range tension onto the wrench-equilibrium set; nothing precomputed.

Verified in the library: the distribution balances the wrench exactly at a generic pose (‖Wt−w‖<1e-9); a centred platform holds a load with positive, symmetric tensions; the correction lies in row(W) — the nearest-to-mid property; an over-range wrench is flagged infeasible; and the centred symmetric config is torque-singular. Each is a test in cargo test, not a claim in prose. See also ch.11 — the robot that bends · the full textbook.

Institute for Physical AI · the Rust library · crates.io