Four operator instructions went into this revision, and one of them broke a documented constraint — which the constraint then caught, in the form of a 120 mm build whose tip collapsed to zero thickness. Length is now a free parameter that holds the mount fit intact.
Repo: 02-hardware/compliant-gripper-long-jaw/, branch
fix/gpu-inference-and-tunnel-auth-20260821, commit e5043f3.
The 100 and 120 mm files are proof the parameterisation works — they are not a
recommendation to print.
① 摩擦花纹换成菱形点阵,铺到尖端、盖住凸起平台。原横齿停在 d=21.5,
而凸起从 d=15 开始 —— 抓杯的主接触斑整块是光面,最需要摩擦的地方反而没有。
② 另出四档软化件(见 09 节),应对 TPU 98A 太硬。
凸起段仍是 15 mm(官方件实测值)。当日曾改到 18 补偿 98A 压不塌,
复议后回退:18 不是实测值;且平台是沿刀身加长的,抓小物体时接触点在尖端
那一小块,多出的 3 mm 碰不到 —— 对症的是花纹铺到凸起,不是加长平台。
Every line below was measured off Blade_v4_final.stl as uploaded here.
| Check | Target | Measured |
|---|---|---|
check_mesh | watertight, 1 shell | PASS, 1 shell |
| Inner-rail hook — must be a square 90° cut | step at d = 15 | 3.395 mm step @ d=15.25 |
| Outer rail — parabola, no step anywhere | monotone | 0.912 → 0.372, no jump |
| Hole spacing | 10.000 mm | 9.987 (facets) |
| Hole centre → bottom face | 2.500 mm | 2.493 (facets) |
| Hole diameter | Ø2.800 mm | Ø2.798 |
| Solid width at z = −26 (load path) | > 20 mm | 27.399 mm |
| Tip thickness at d = 1 mm | > 0 | 2.214 mm |
| Rib cavities | reach the foot | 17, lowest z = −23.37 |
| Cavity tip-side wall | follows the rib | 45.2°/47.0° — rib angles |
The 9.987 / 2.493 / Ø2.798 readings are the polygonal facets of a Ø2.8 cylinder measured as though it were a true circle — nominal values in the source are exactly 10.000, 2.500 and Ø2.800. The 100 and 120 mm builds pass the same list.
| Attempt | Shape | Why it was wrong |
|---|---|---|
| Step | tooth jumps to 0 | Left a ledge — measured as a 3.4 mm jump between d=12 and 13. 「不是这样突然往里凹进去一下」 |
| smoothstep u²(3−2u) | S-curve | Zero slope at both ends forces an inflection in the middle and leaves a flat plateau after the draw-in. Smooth, but it reads as an S. 「尖端是平滑 S 形收进去, 这个不对吧」 |
| Parabola u² | continuous draw-in | Root end: f=0 and f′=0, tangent to the rail, no kink. Tip: f=1 at maximum slope — drawing in the whole way, no plateau. Constant second derivative, so no inflection. 「平滑内收整体是类似抛物线的感觉」 |
Both rails use the same parabola; only the span differs — the inner rail over 12 mm, the outer over 20 mm. That keeps the separate spine treatment asked for earlier: the grip face turning at a station is the design, the load-bearing spine turning at the same station is a stress raiser. Spreading the spine's bend over 20 mm piles material up through the turn instead of thinning it there.
「靠近底部实心的范围太多了, 可能用肋条至少覆盖掉1cm」
| Before | After | |
|---|---|---|
| Lowest rib cavity | z = −14 | z = −23.37 (boundary now horizontal) |
| Rib cavity count | 11 | 17 |
| Solid width at z = −26 | 27.445 mm | 27.399 mm |
ROOT_SOLID_LEN / ROOT_FILL | 10 / 12 | 0 / 2 |
Ribs are now a true fan: every rib's inward extension passes through one focus, solved from two constraints — the first visible rib is parallel to the foot (0.000° measured) and the tip rib sits at 47°. The spacing between rib angles shrinks from 4.4° to 1.6° toward the tip: dense at the root, opening toward the tip. Before this, the layout was a uniform ramp (2.410° per rib, no focus) and the lowest visible rib sat at 8.46°.
The archive records ROOT_SOLID_LEN = 4 once squeezing the solid width at
z = −26 down to 7.47 mm, leaving a narrow neck at the highest-stress point.
It is now driven to 0, but ROOT_FILL's wedge still guards the junction —
measured 27.325 mm. Re-measure this after any change to length or to those two
parameters. Below 20 mm, back it out.
RAIL_SLOPE means "outward drift per unit arc length". As a constant, a longer
blade keeps drifting: S_LEN 83 → 114 moved the tip rail from −2.96 to +1.09 and took the whole
mating face with it, voiding the fit against the mount. It is now solved from a fixed tip
position instead:
_R = (X_TIP_RAIL - X_IN) / S_LEN
RAIL_SLOPE = _R / sqrt(1 - _R²) # gives 0.1316 at S_LEN=83, measured 0.1317
| S_LEN | Total | Tip rail x | Tip thickness | Width |
|---|---|---|---|---|
| 83 | 88.97 | −6.560 | 1.73 | 23.00 |
| 93.8 | 99.89 | −6.554 | 1.65 | 23.00 |
| 114 | 120.25 | −6.541 | 1.54 | 23.00 |
Tip rail x holds to 0.02 mm across a 31 mm change in length. That column is the test. Total length tracks the target; width and tip thickness stay put; rib count rises.
The rule used to read TIP_SOLID_LEN > LIP_BLEND_OUT. It came from a real
failure — a mid-revision build collapsed to tip thickness 0.000, which
check_mesh passed and only the dimensional check caught. But that build's
outer rail was a smoothstep, which is not tangent at its root end and cannot close
out cleanly. The length was the coincidence; the curve shape was the cause.
Tested rather than argued: a part with TIP_SOLID_LEN = 14 against
LIP_BLEND_OUT = 20 — the old rule violated outright — passes
check_mesh, measures the same tip thickness as the conservative
version, and shows zero extra loops at the tip. The real condition is
“the outer transition curve is tangent at its root end”, which the parabola
satisfies. Ribs now reach 9 mm further toward the tip.
「尖端实心部分的边界可以按照最靠近的那个肋条来, 就是边界顺着肋条的形状」
The tip-side edge of the rib cavity used to sit at S_LEN − TIP_SOLID_LEN, a plane
perpendicular to the blade. Ribs land on RIB_S0 + n·RIB_PITCH, and the two
generally do not coincide — leaving a short rib-less stub whose tip-side wall was that
flat plane. It reads on a render as though the part had been sliced off square.
S_RIB_END = S_LEN - TIP_SOLID_LEN;
S_CAV_TIP = RIB_S0 + floor((S_RIB_END - RIB_S0) / RIB_PITCH) * RIB_PITCH;
Snapped to the last rib station — and, since 2026-08-22, actually cut by two
half-spaces rather than merely aligned: the tip end by the last rib's own plane, the root
end by a horizontal plane parallel to the foot (the operator caught both: the root
edge was slanted at 7.5°, and the tip still leaked a 1 mm slanted sliver). Four traps,
each found by measuring: a cut plane alone only shortens the slanted face — the stock must
first extend past the cut; the extension must run along the sweep direction or the
kink itself reads as a 7.5° edge; the horizontal cut must sit at the outer corner of the
body's bottom section (cutting at the first rib's top left a void — z=−24 width collapsed
to 1.94 mm before this was caught); and Z_ROOT_TOP, the fill target and
the fan's anchor rib must all be solved together. After the fix: zero 7.5° edges anywhere,
root boundary 0.000°, z=−24 width 27.18 mm, all three lengths.
Full breakdown of what scales, what is pinned to the mount or to the cup, and a thirteen-item check to run after changing length: Parametric Design Rules.
Unchanged from the previous pack, and these are the original designer's 3MF settings rather than recommendations: TPU, 0.20 mm layers, 6 wall loops, 25% grid infill, 240 °C / 35 °C bed, supports off, laid flat with the 10 mm face on the bed so the layer lines run across the bending direction. Two pieces. The sleeve differs: TPU 85A, 225 °C, 4 loops, textured face upward.
The sleeve costs 18.68 mm of jaw opening across the pair and nobody has confirmed a
90 mm cup still fits. HOLE_DX and FLATTEN also remain at 0 —
the first waits on a single-number reading of the original blade, the second on the A and
T measurements.
背景与实测见 为什么这一版硬得弯不动
| 档 | WALL_T / RIB_T / PITCH | 实测内梁 | 实测外梁 | 实测肋厚 | 肋数 | 最薄处 | 软化 |
|---|---|---|---|---|---|---|---|
| base | 2.0 / 1.6 / 4.0 | 2.45 | 2.05 | 2.85 | 17 | 5.1 条线 | 1.0× |
| A | 1.6 / 1.2 / 4.0 | 1.89 | 1.63 | 2.24 | 17 | 4.1 条 | ≈2.1× |
| B | 1.4 / 1.2 / 4.5 | 1.67 | 1.43 | 2.20 | 15 | 3.6 条 | ≈2.6× |
| C | 1.2 / 1.0 / 5.0 | 1.37 | 1.22 | 1.91 | 13 | 3.1 条 | ≈4.4× |
| D | 1.0 / 0.9 / 5.5 | 1.19 | 1.02 | 1.68 | 10 | 2.5 条 | ≈6.7× |
五档 check_mesh 全 PASS 水密单壳。安全项四档全部不变:
尖端 d=1 厚 2.214 mm、z=−26 实心宽 27.40 mm(安全线 20)、钩面跳 3.616 mm。
梁变薄没有动到受力最大的根部 —— 那里是实心补实段,不受 WALL_T 影响。
D 档最薄处只有 2.5 条线宽(0.4 喷嘴)。半条线放不下,有些切片器会
直接漏打薄壁,梁会断。打之前在切片预览里逐层确认,并打开
Detect thin wall(Orca)/ Print Thin Walls(Cura)。
另外:改墙圈数没有用。4 圈和 6 圈对 2.0 mm 的梁字面相同(都填满),
连降到 2 圈也只软 0.4% —— 掏掉的全在中性轴上。真正的旋钮是 WALL_T。
怎么选:先做挠度测量(两片装配脚压桌沿下、尖端挂同一重物、侧面量下沉),
倍数 = 旧件下沉 ÷ 新件下沉,再对号入座。想省一轮就直接打 C 档,
它覆盖最可能的区间。别直接跳 D —— 软化会牺牲夹持力上限,取刚好够的那一档。