← all reports
bladeparametric rules2026-08-21

Parametric Design Rules

What may scale with blade length, what is pinned to the mount or to the cup and must never scale, the one quantity that has to be back-solved, and a thirteen-item check to run after any change. All three lengths — 89.4, 100 and 120 mm — rebuilt and re-measured 2026-08-21.

刀片参数化 · 改长度要动哪些、不能动哪些

目的:把 S_LEN 当自由变量,改成 100mm / 120mm 或任何长度,而
与安装座的配合、尖端形状、内扣贴合面、根部结构全都自动成立
2026-08-21 建立。三个长度(89.4 / 100 / 120)已实测验证,见文末。
openscad -D S_LEN=93.8 -D TEETH=true -o Blade_teeth.stl generate_blade_arcsweep.scad

一、总长与 S_LEN 的换算

S_LEN沿弧长的长度,不是 z 方向高度。

总长 = 6.985(装配脚,z −33.985 → −27)  +  S_LEN × cos(phi)
目标总长S_LEN实测总长尖端内梁 x尖端厚宽 Y
89.4 mm(当前)8388.97−6.5601.7323.00
100 mm93.899.89−6.5541.6523.00
120 mm114120.25−6.5411.5423.00

尖端内梁 x 在三个长度下差 0.02mm —— 这就是 §2 反解生效的判据。若把 RAIL_SLOPE 写成常数,120mm 版的尖端会外移 4mm。


二、★ 唯一必须反解的量:RAIL_SLOPE

这是整个参数化的关键,写错就全废。

RAIL_SLOPE 的物理含义是「每单位弧长,内梁往 +x(远离另一片爪)飘多少」。 如果把它写成常数,爪一加长,尖端就继续往外飘:

S_LEN  83 → 尖端内梁 x = −2.96
S_LEN 114 → 尖端内梁 x = +1.09      外移 4.05 mm

尖端外移 4mm,内扣贴合面整体跟着走,与安装座的配合关系(外侧螺栓 → 凸起面)当场作废 —— 而那正是决定两片爪能不能"刚好顶上"的量。

所以做法是把尖端内梁的 x 定死,反解斜率:

X_TIP_RAIL = -2.96;                      // 与长度无关,由配合关系决定
_R         = (X_TIP_RAIL - X_IN) / S_LEN;
RAIL_SLOPE = _R / sqrt(1 - _R * _R);     // S_LEN=83 时 = 0.1316,与原实测 0.1317 一致

推导:内梁在弧长 s 处的 x 增量是 k·s·cos(atan k) = k·s/√(1+k²)。 令它在 s=S_LEN 时等于 ΔX = X_TIP_RAIL − X_IN,记 r = ΔX/S_LEN,解出 k = r/√(1−r²)


三、随长度缩放的量(已经是归一化的,不用动)

这三个都写成了 s / S_LEN 的函数,所以自动按比例铺开:

定义含义
bow(s, amp)amp × sin(180 s/S_LEN)中段微凸,两端归零
rib_incl(s)RIB_INCL_ROOT + (TIP−ROOT)·s/S_LEN肋倾角从根部 0°(平行底边)渐变到尖端 50°
depth(s)DEPTH_ROOT + (TIP−ROOT)·(s/S_LEN)^TAPER_POW桁架深度从根部 27.42 收到尖端 1.0

rib_incl 的方向别改反。 根部 0° 意味着最下面那几条肋平行于底边,越往尖端越斜 —— 这是照实物红爪定的(2026-08-20 操作者当面核对),原来做反过一次。


四、★ 绝对不能跟着长度缩放的量

这些锚定在硬件接口物理尺度上,跟刀片多长无关。缩放它们会直接破坏配合。

4.1 安装接口 —— 由安装座决定

出处
Z_TRANS−27装配脚顶面
X_IN−13.79根部内梁 x
孔距 HOLE_SPAN10.000操作者卡尺实测真机。不要根据 STL 改成 12.0,见 generate_v4_finish.scad 里的警告
孔高 HOLE_Z−31.485孔心距底面 2.5mm,官方实测
孔径Ø2.80change 1
Y_HALF11.5(宽 23mm)夹套按这个宽度做的

4.2 尖端 —— 由杯子接触和对合关系决定

理由
LIP_PEAK12操作者实测凸起特征总长 10–12mm
LIP_DEPTH3.5内扣量
LIP_BLEND_OUT20外梁内扣段长度,见 §5。内梁用 LIP_PEAK
DEPTH_TIP1.0尖端要尖。4.0 会做出钝梯形
X_TIP_RAIL−2.96§2 的反解目标

加长爪子不该让尖端变大。 尖端接触的是同一个杯子、对合的是同一片爪。

4.3 结构 —— 由材料和受力决定

理由
RIB_PITCH4.0肋密度。加长应当多出几条肋,不是把现有的拉开
ROOT_SOLID_LEN0
ROOT_FILL2见 §6
TIP_SOLID_LEN14尖端侧实心段。约束绑的是外梁曲线的形状,不是长度 —— 见 §6.5

五、★ 外梁的内扣过渡,与内梁分开算

操作者 2026-08-21:「靠近尖端有一个外梁缓和内扣的区域,跟下面斜率计算应该区分开算」。

早先 ptOut 直接减同一个 tooth(s):内外梁共用一条过渡曲线,于是脊背在同一个位置 跟着内梁一起转弯。内梁是抓取面,转弯是设计意图;外梁是受力脊背,同一处的转折就是应力集中。

现在外梁走自己的、更长更缓的过渡:

LIP_BLEND_OUT = 20;              // 内梁是 LIP_PEAK = 12
function tooth_out(s) = LIP_DEPTH * para(S_LEN - s, LIP_BLEND_OUT);   // 同一条抛物线,铺得更长
function ptOut(s) = railP(s) + nrm(s)*(depth(s)+bow(...)) - nrm(s) * tooth_out(s);

两条梁用同一种曲线,只是长度不同 —— 形状一致,但脊背的弯曲摊在 20mm 上而不是 12mm。 后果是过渡区内厚度略增:材料堆在转弯处,而不是在那里被削薄,这正是想要的。

★ 两条梁做完全不同的事,不要一起改

这一点前后搞混过一次,后果是白跑了两个完整的 生成→渲染→提交 循环。

内梁(抓取面)外梁(脊背)
形状凸起平面一路平着到尖端抛物线连续内收
与梁的交接垂直切断,干脆相切,无折角
长度LIP_PEAK = 12LIP_BLEND_OUT = 20
为什么那道垂直面就是咬住杯子的钩面脊背在与抓取面同一站转折 = 应力集中

操作者原话:「那个平滑内收说的是外梁,你怎么把内凸和内梁交接处也做成平滑了, 那个应该干脆利落的垂直」。

实测(逐 1mm):内梁在 d=11.5→12.5 跳 3.314mm(钩面),其余每段只变 0.09–0.14mm; 外梁全程 0.33–1.02mm 平缓递减,无跳变。

外梁的内收曲线必须是抛物线,不是 smoothstep

function para(d, L) = let(u = (L - d) / L) u * u;    // u: 根侧 0 → 尖端 1

三种写法先后被否掉两种:

写法问题
阶跃留台阶。操作者:「不是这样突然往里凹进去一下」。实测 d=12→13 跳 3.4mm
smoothstep u²(3−2u)两端斜率都是 0 ⇒ 中间必有拐点,收完还接一段平台 —— 整体是 S 形。平滑,但不是抛物线
抛物线 根侧 f=0 且 f′=0(与内梁相切,无折角);尖端 f=1 且斜率最大(一路在收,无平台无拐点);二阶导恒定 = 均匀弯曲

操作者 2026-08-21:「平滑内收整体是类似抛物线的感觉」。


六、根部:肋要往下铺满,但衔接处不能出细颈

操作者 2026-08-21:「靠近底部实心的范围太多了,肋条至少覆盖掉 1cm」。

ROOT_SOLID_LEN  10 → 0
ROOT_FILL       12 → 2

实测效果:

改前改后
肋空腔最低出现在z = −14z = −24(多覆盖 10mm ✓)
肋间空腔总数1113(多出 2 条肋 ✓)
z=−26 实心宽27.44527.325(几乎不变)

注意最后一行 —— 这是安全线。 档案里记着 ROOT_SOLID_LEN = 4 曾经把 z=−26 的实心宽度 压到 7.47mm,在受力最大处只剩一条窄颈。现在虽然把它降到 0,但靠 ROOT_FILL 的楔形补实 守住了衔接处,实测 27.3mm。

改长度或改这两个参数后,必须重量 z=−26 的实心宽度。 低于 20mm 就要回退。 量法见 03-software/scripts/measure_blades.py 配合精确 z 截面。


六 · 5、尖端侧:实心段可以比想象的短,但取决于曲线形状

操作者 2026-08-21:「尖角那一侧的实心部分也太多了,至少被肋骨覆盖多 1cm 厚度」。

TIP_SOLID_LEN 原本是 24,并带一条约束「必须 > LIP_BLEND_OUT」。 实测证明这条约束写保守了。 建了一个 TIP_SOLID_LEN=14LIP_BLEND_OUT 保持 20 的件:

判据结果
check_meshPASS,shells=1,水密,无碎面
尖端厚度2.428mm,与 TIP_SOLID_LEN=24 完全相同
尖端区 y=0 多余小闭环(豁口)0 个
最靠尖端的肋腔d=23 → d=14,推进 9mm

为什么早先那次会塌尖: 当时外梁用的是 smoothstep,它在根侧不相切,收不干净, 肋腔提前开始就会捅穿;抛物线两端相切,能平顺落回梁上。

约束的真实条件是「外梁过渡曲线在根侧相切」,不是「实心段要比曲线长」。
若把外梁改回非相切的曲线(smoothstep、直线过渡等),必须把 TIP_SOLID_LEN
提回大于该曲线长度,并重量尖端厚度。

空腔边界顺着肋走,不横着平切

操作者:「尖端实心部分的边界可以按照最靠近的那个肋条来,就是边界顺着肋条的形状」。

原来 s1 = S_LEN - TIP_SOLID_LEN 是一个垂直于刀身的截面,而肋落在 RIB_S0 + n × RIB_PITCH 上,两者一般对不齐 —— 最后一条肋与那道平切面之间会剩一小段 无肋空腔,它的尖端侧壁就是那道平切,看上去像被横着削了一刀。现在:

s1 = RIB_S0 + floor((S_LEN - TIP_SOLID_LEN - RIB_S0) / RIB_PITCH) * RIB_PITCH;

对齐到最后一条肋的站位,残留段消失,边界跟着肋的倾角走。


七、改长度的检查清单

1. 算 S_LEN = (目标总长 − 6.985) / cos(phi)      ≈ (总长 − 6.985) / 0.9914
2. 三步生成
3. check_mesh.py            connected shells 必须 = 1
4. 量总长                    与目标差 < 0.5mm
5. 量尖端内梁 x              应恒为 −2.96(§2 若写对了,这项自动成立)
6. 量尖端厚度                应恒为 ~1.0mm
7. 量宽度 Y                  应恒为 23.2mm
8. 量 z=−26 实心宽           必须 > 20mm(§6 安全线)
 9. 量外侧螺栓 → 凸起面        应恒为 ~21.8mm(决定与另一片爪的对合)
10. 数肋间空腔数             应随长度线性增加(RIB_PITCH 恒定)
11. 量内梁在 d=LIP_PEAK 的跳变  必须【是】一次大跳(≈LIP_DEPTH)= 钩面还在
12. 量外梁逐 1mm 的跳变        必须【没有】任何一处突跳 = 抛物线还在
13. 量最靠尖端的肋腔位置       应 ≈ TIP_SOLID_LEN(空腔边界对齐到肋,见 §6.5)

第 5、6、7、9 条不随长度变,是这套参数化是否成立的判据。

第 11、12 条是 2026-08-21 补的,因为这两项各错过一次,而且两次 check_mesh 都是 PASS —— 网格合法不等于形状正确。量法:

# 沿 y=0 截面逐 1mm 取内梁最内 / 外梁最外的 x,看一阶差
内梁:d=11.5→12.5 应跳 ≈3.3mm(钩面),其余每段 0.09-0.14mm
外梁:全程 0.33-1.02mm 平缓递减,无跳变

七 · 5、三个长度的实测复核(2026-08-21,最终件)

改完「肋腔边界对齐到肋」和 TIP_SOLID_LEN 24→14 之后,三个长度各建一遍, 跑的就是 §7 的检查清单:

判据S_LEN=83(成品)S_LEN=93.8(100mm)S_LEN=114(120mm)判定
check_meshPASSPASSPASS水密、单壳、无碎面
尖端 d=1mm 处厚度2.0041.9141.802都 > 0,没有塌尖
尖端 d=2mm 处厚度3.0002.8202.591单调 ✓
z=−26 实心宽度27.32527.34927.377安全线 20mm,全过
肋间空腔数182126加长是多出肋,不是把现有的拉开 ✓
最靠尖端的肋腔 d16.015.515.8TIP_SOLID_LEN + 一个肋厚 ✓
肋腔尖端侧壁斜的斜的斜的顺着肋走,不是横着一刀 ✓

注意第四行:ROOT_SOLID_LEN 已经降到 0(比当初出过事的 4 还小), 三个长度的 z=−26 实心宽度依然是 27.3mm,没有退回 7.47mm 的窄颈。 守住它的是 ROOT_FILL 的楔形补实 —— 见 §6。


八、当前未决项

状态
TIP_SOLID_LEN 约束已重新定案,见 §6.5。 早先写成「必须 > LIP_BLEND_OUT」是把现象当成了原因 —— 当时塌尖是因为外梁用了根侧不相切的 smoothstep,不是因为实心段太短。换成抛物线后 TIP_SOLID_LEN = 14 < LIP_BLEND_OUT = 20 三个长度全部正常。真实条件:外梁过渡曲线在根侧相切。
HOLE_DX0。v4 的 21.77 已接近官方 22–23,等精确单值
FLATTEN0。贴合面角度符号,需实测 A(两脚外角)与 T(两尖端)

*所有实测值出自 MEASUREMENTS-2026-08-21.md。* *在线图解:https://suyang99-xlerobot-build-reports.static.hf.space*