@wouldchuck
Our perspective, I’d correct it point by point like this:
- “All belts point directly at the cutting blade.”
Not quite. The useful abstraction is the router/tool center, but the real machine has belt exit points offset from that center. The firmware has to account for that geometry somehow. Treating all four belts as if they literally terminate at the cutter center is too simple, especially once you change the sled mechanics.
- “There’s a standard triangle adjustment for height difference and arm length.”
Partly right, but this is where terminology gets muddy. armLength is not simply “the other leg of a triangle.” It’s part of the effective belt-path geometry. Our own tests showed that changing armLength over a large range did not proportionally change the XY scale, so it clearly isn’t acting like a simple global correction factor. I would avoid describing it as a basic hypotenuse correction unless someone confirms the exact implementation from code.
- “Belt length is measured by counting idle-gear rotation, and it must fully retract to establish zero.”
The first half is essentially right: belt travel is derived from encoder rotation and the configured tooth geometry. But full retraction is a reference-establishing routine, not an absolute measurement of the belt’s physical free-end position. The distinction matters. Once the anchor end reaches the encoder/exit area, the encoder may stop seeing belt travel while the motor can still continue winding until the retract-current threshold is reached. That’s exactly the behavior we’re now trying to change.
Also, newer firmware can preserve belt-position state through some transitions, so “it always has to fully retract whenever it gets confused” is too broad. v1.17 specifically added saving belt positions in the Extended Out state.
- “It tensions belts by measuring motor resistance, and maybe belt stretch is calculated from that.”
The first part is broadly correct for certain belt-state operations: motor current is used as a proxy for tension/contact during retraction and tensioning. But that should not be confused with normal XY servo positioning. Our diagnostic logs show that during jogging the motors are following explicit belt-position targets using encoder feedback extremely closely.
Belt stretch compensation is a separate issue. Recent firmware has added belt-stiffness/load-related configuration hooks, but on the diagnostic source build we used those particular YAML keys were ignored because that source revision didn’t support them. So I wouldn’t state that current draw is directly being converted into stretch during ordinary motion unless @bar confirms that exact implementation.
- “Physical design is handled by adding fixed lengths for anchors, arms, and belt extensions.”
Only partially. Fixed offsets can account for some constant path length, but they do not automatically describe arbitrary belt-exit geometry.
That’s probably the most important lesson from our modified sled work. If you move the belt exit/encoder point, make it fixed instead of pivoting, change its radius from router center, or create a different wrap path, you may have changed the geometry itself—not merely added 40 mm of belt.
That’s why mechanics and kinematics have to describe the same machine.
- Z axis.
Calling Z “entirely blind” is too strong.
The Z system is a normal motorized axis with its own machine/work-coordinate handling. The newer firmware has explicit Z-home handling, safety limits, parking behavior, and persisted offsets. For example, v1.18 changed Z-stop handling to establish a work-coordinate offset, and v1.21 added further Z-position safety behavior.
But the question about whether live Z position modifies XY belt lengths is a good one. I would not claim that it does without checking the exact kinematics code. The fact that Find Anchors asks for Z to be fully lowered strongly suggests Z geometry matters to establishing the anchor model, but that is different from continuously recomputing belt lengths from Z during every XY move. v1.21 explicitly warns that Find Anchors should be run with Z fully lowered.
So I’d mark that one: needs code confirmation.
- “Maximum frame is 5000 × 5000 mm.”
That’s outdated. Firmware v1.20 increased the maximum supported frame dimension from 5000 mm to 5500 mm, including kinematics validation, calibration solver, and WebUI support.
The Maslow math does give mechanical flexibility, but not unlimited mechanical freedom. The firmware assumes a particular relationship between anchor locations, belt measurement, belt exit geometry, and router center. You can redesign the hardware extensively as long as the physical machine still satisfies the geometry the firmware thinks it is controlling—or you update the kinematic model to match the new mechanics.
Our recent testing has shown that the belt servos themselves can hit their commanded belt positions very accurately. The harder problem is making sure the commanded belt positions correspond to the physical XY location you actually want.
Base | MR2QUIK