feat(arm): P04顶缘改R3圆角+竖直前壁消除刀刃状凸起,并带上承压面R35圆腔等未提交改动
用户截图圈的"非常尖的凸起"实测是顶面前沿一条刀刃:2026-10-04 把前脸改成与顶面 相切的 Hermite 弧面,但只有 9.0mm 的 Y 预算却要吸收 120.5mm 落差,90° 转弯全挤在 起点——离开顶面 0.28mm 就转到 45°,起始曲率半径 0.571mm,Y=164.32 处顶面与前脸之间 料厚只剩 0.027mm。2026-10-05 的起点加密又抹掉了第一段 57° 折线那层意外钝化。 且历次只碰前缘一条棱,顶面左缘(X=11.5)与后缘(Y=91.5)仍是 89° 直棱。 现改为常规形状:顶面 -> 前侧 R3 圆角 -> 竖直前壁 Y=164.5 直落到 Z=566 -> Hermite (两端切线沿 -Z,G1) 顺收到 (155.5,526);顶面后缘对称再倒 R3,弧心切点按背面那条 0.24° 斜线取值以免露出台阶。crest 不再是独立最外凸点,尖从根上消失。 代价与核验:P04 体积 276.2 -> 296.2 cm3(+20.0,填掉原内凹腔);Y 最大仍 164.5, 与 P03 止脱环 R36.5/顶646.5 的齐平不变;13/13 单实体、静态干涉 8/8 零、97 颗螺钉。 J1 扫掠半径由 51.6 增至 57.2mm,动态行程数据(collide.json/travel.json)待重扫。 同时带上上一轮未提交的改动:承压面让位腔改 R35 圆腔、主腔统一 BAY_R=30.50、 M2/M3 前端压盖与围挡敞口侧切除、build_viewer 三副本逐个写盘(避免浏览器独占锁 导致"改了源码网页没变")。
This commit is contained in:
+160
-54
@@ -222,7 +222,15 @@ def motor_front_clamp(px, pz, plate_t=CLAMP_T, tag="", axis="Y", py=0.0, z_face=
|
||||
s0, s1 = -CLAMP_ROOT, plate_t
|
||||
fp = C(35.0, s0, s1)
|
||||
fp = fp.cut(C(18.5, s0 - 0.5, s1 + 0.5)) # Ø37 中央让位孔
|
||||
fp = fp.cut(C(30.15, s0 - 0.5, 0.0)) # Ø60.3 让位槽
|
||||
# 【2026-10-03h 接缝整改】根部让位槽原来切 R30.15,比腔壁 BAY_R=30.50 小 0.35,
|
||||
# 于是压盖根部那圈 r30.15..35 的定位唇内壁比腔壁**内凸 0.35**,从腔里看就是
|
||||
# 腔口一圈 0.5mm 宽、0.35mm 深的环槽(P04/P05/P06/P07 各有一圈,实测台阶面
|
||||
# 31.2mm2 + R30.15 环带 44.4mm2,四件完全相同)。这刀是腔还是 R30.15/R30.25
|
||||
# 那个年代留下的:当时必须让到电机实测外圆,压盖根部才啃不到电机。
|
||||
# 现在主腔已统一到 BAY_R,电机实测 R30.15,让位槽取 BAY_R 即可:
|
||||
# 定位唇内壁与腔壁同一根正圆,两张圆柱面首尾相接,中间不再有任何台阶,
|
||||
# 对电机的单边间隙仍是 0.35(唇内径 Ø61.0 > 电机 Ø60.3)。
|
||||
fp = fp.cut(C(AB.BAY_R, s0 - 0.5, 0.0)) # Ø61.0 根部让位槽(= 腔径)
|
||||
for deg in CLAMP_CLOCK_LOCAL:
|
||||
rad = math.radians(-deg) # 全局相位 = -局部相位
|
||||
fu, fv = CLAMP_BCD * math.cos(rad), CLAMP_BCD * math.sin(rad)
|
||||
@@ -254,14 +262,29 @@ def hub_m2_holes(shape, j, cb_z1, th_z1=58.0, th_z0=54.0, cb_z0=58.0,
|
||||
return shape
|
||||
|
||||
|
||||
def make_direct_hub(shape, j, r_disc=35.0, z_out=74.0):
|
||||
"""优化直连法兰:增加导向倒角"""
|
||||
disc = cyl(r_disc, 56.5, z_out)
|
||||
boss = cyl(17.8, 54.942, 56.5)
|
||||
def make_direct_hub(shape, j, r_disc=35.0, z_out=74.0, backoff=0.0):
|
||||
"""优化直连法兰:增加导向倒角
|
||||
|
||||
backoff = 毂面沿电机轴**远离电机**的让位量(2026-10-03 新增,目前只有 P09 用)。
|
||||
|
||||
场景:J6/M6 补上前端压盖后(见 p_wrist_bracket 的 roll_clamp=True),压盖占
|
||||
局部 z 55.5..61.0(= 全局 Z 120.5..115),而毂面原来在局部 56.5,两者直接打架。
|
||||
按 P06 给 J3 让位的同一套办法,把毂面整体后移 CLAMP_BACKOFF=5.5:
|
||||
毂面 56.5 -> 62.0,压盖前端面在 61.0,中间正好留 CLAMP_CLR=1.0。
|
||||
|
||||
只动"外端"坐标,不动"电机端"坐标,否则咬合量就变了:
|
||||
直锁凸台起点 54.942 不动、长度 54.942..56.5 -> ..62.0 加长 5.5,
|
||||
进入电机输出毂的深度与改前完全一致(与 p_humerus_bone 的 J3 处理同源);
|
||||
导向锥 54.5..54.942 不动;
|
||||
3xS01 输出螺钉让位通道与 4xM2 直锁沉孔的**内**端(54.0 / 58.0)不动,
|
||||
只把外端(z_out+30 / z_out+40)跟着放长。
|
||||
"""
|
||||
disc = cyl(r_disc, 56.5 + backoff, z_out + backoff)
|
||||
boss = cyl(17.8, 54.942, 56.5 + backoff)
|
||||
chamfer_cone = cyl(18.5, 54.5, 54.942)
|
||||
shape = shape.fuse(j.L(disc)).fuse(j.L(boss)).cut(j.L(chamfer_cone))
|
||||
shape = shape.cut(j.L(cyl(3.5, 54.0, z_out + 30.0)))
|
||||
return hub_m2_holes(shape, j, cb_z1=z_out + 40.0)
|
||||
shape = shape.cut(j.L(cyl(3.5, 54.0, z_out + 30.0 + backoff)))
|
||||
return hub_m2_holes(shape, j, cb_z1=z_out + 40.0 + backoff)
|
||||
|
||||
|
||||
# ========== 躯干部分 ==========
|
||||
@@ -1135,34 +1158,62 @@ def p_fork(j1, j2):
|
||||
xz_shape = cq.Shape(xz_wire.extrude(100.0, both=True).val().wrapped)
|
||||
|
||||
# 5. YZ 平面包络
|
||||
# 【2026-10-04 视觉整改】电机上方那块 4048mm2 的大平面改成 Hermite 弧面。
|
||||
# 原来第 2->3 点之间是一条直线 (164.5,646.5)->(155.5,526),沿 X 方向拉成
|
||||
# 4048mm2 的平板(实测法向 (0,1,-0.07),带 4 度斜度),正对电机上方 ——
|
||||
# 两侧被 xz_wire 的 R18 圆弧挤出去,形成"中间一块平、两边鼓"的观感。
|
||||
# 改法:把这段直线换成三次 Hermite 曲线,两端切线分别沿 Y(接上面 Z=646.5
|
||||
# 的顶段)与沿 Z(接下面 Y=155.5 的竖直段),保证 G1 连续无缝;
|
||||
# 中部向 +Y 外凸约 3mm,弧度观感与两侧 R18 一致。
|
||||
# 为什么不用单段圆弧:A 处切线要沿 Y、B 处要沿 Z,单个圆心无法同时满足
|
||||
# (解出来 R=9 与 R=120.5 矛盾),必须用 Hermite/Bezier —— 与 P05/P06
|
||||
# 的 Loft 过渡同一套做法。
|
||||
# 注意:顶点绕序必须与原列表一致(先 y_b 后 y_a),否则多边形自交、
|
||||
# 布尔后零件会碎掉(实测会掉到 48cm3 / 3 块实体)。
|
||||
y_a = (Y_COVER - 0.5, Z_SH + 36.0) # (155.5, 526.0) 曲线终点
|
||||
y_b = (Y_AXIS + 36.5, Z_RL + 36.5) # (164.5, 646.5) 曲线起点
|
||||
_d = math.hypot(y_b[0] - y_a[0], y_b[1] - y_a[1])
|
||||
_m0y, _m1z = -0.5 * _d * 0.35, 0.5 * _d * 0.5 # 切线:起点沿 -Y,终点沿 +Z
|
||||
yz_pts = [(Y_AXIS - 36.5, Z_RL + 36.5)]
|
||||
for k in range(13):
|
||||
t = k / 12.0
|
||||
# 【2026-10-07 按用户手绘红线改成"R3 圆角 + 竖直前壁",消掉顶面前沿那颗尖】
|
||||
# 来历:2026-10-04 那版把前脸做成与顶面**相切**的 Hermite 弧面,但这条曲线
|
||||
# 只有 9.0mm 的 Y 预算(164.5->155.5),却要吸收 120.5mm 的落差,于是 90° 的
|
||||
# 转弯全挤在起点:实测离开顶面 0.28mm 落差就转到 45°,起始曲率半径 0.571mm。
|
||||
# 后果是顶面前沿 Y=164.5 成了**全件最外凸点**,往下前脸立刻后退,
|
||||
# 在 Y=164.32 处顶面与前脸之间的料厚只剩 0.027mm —— 就是用户截图圈的那颗尖。
|
||||
# 2026-10-05 的"起点加密采样"把第一段 57° 折线(那其实是一层意外的钝化)抹平,
|
||||
# 反而让它变成真正的刀刃。两次都只碰了前缘**一条**棱,
|
||||
# 顶面左缘(X=11.5, 73mm)与后缘(Y=91.5, 17.5mm)仍是 89° 直棱,所以没解决。
|
||||
# 现在的形状:顶面 -> 前侧 R3 圆角 -> 竖直前壁 Y=164.5 一路直落到 Z=566
|
||||
# -> Hermite(两端切线均沿 -Z,G1) 顺收到 (155.5, 526);
|
||||
# 顶面**后缘**同样倒 R3(与前缘对称,用户 2026-10-07 追加要求),
|
||||
# 弧心落在背面那条斜线上(背面从 (91.5,646.5) 斜到 (92.0,526),斜 0.24°,
|
||||
# 切点 Y 必须按该斜线取,否则弧端会露出 0.01mm 台阶)。
|
||||
# crest 不再是独立的最外凸点(整条前壁同为 Y=164.5),尖由此从根上消失;
|
||||
# 全件 Y 最大值仍是 164.5,与 P03 止脱环 R36.5/顶646.5 的齐平关系不变。
|
||||
# 后缘圆角只减料:体积 296.24 -> 296.20 cm3,Y 最小值 91.50 -> 91.51。
|
||||
# 代价(实测):P04 体积 276.2 -> 296.2 cm3 (+20.0),因为填掉了原来那个内凹腔;
|
||||
# 且 J1 扫掠半径由 crest 的 hypot(36.5,36.5)=51.6 增到前壁 (Y164.5,Z566) 的
|
||||
# hypot(36.5,44.0)=57.2 (+5.6mm) —— 全行程碰撞/行程必须重扫才算完成。
|
||||
# 注意:顶点绕序必须与原列表一致(先顶面、再前壁、再竖直段),否则多边形自交、
|
||||
# 布尔后零件会碎掉(实测会掉到 48cm3 / 3 块实体)。
|
||||
y_a = (Y_COVER - 0.5, Z_SH + 36.0) # (155.5, 526.0) 顺收终点
|
||||
y_b = (Y_AXIS + 36.5, Z_RL + 36.5) # (164.5, 646.5) 顶面前沿 = 前壁所在 Y
|
||||
R_TIP = 3.0 # 顶面 -> 竖直前壁 的圆角半径
|
||||
R_BACK = 3.0 # 顶面 -> 背面 的圆角半径(与前缘对称)
|
||||
Z_WALL_END = 566.0 # 竖直前壁落到此处,再往里顺收
|
||||
_c = (y_b[0] - R_TIP, y_b[1] - R_TIP) # 前侧圆角心 (161.5, 643.5)
|
||||
# 背面那条线是斜的:(91.5, 646.5) -> (92.0, 526.0),斜 0.24°。
|
||||
# 后侧圆角必须切在这条线上,否则弧端点会露出 0.01mm 的台阶。
|
||||
_zb0, _zb1 = Z_RL + 36.5, Z_SH # 背面上下端 Z
|
||||
_yb0, _yb1 = Y_AXIS - 36.5, Y_REAR - 8.0 # 背面上下端 Y
|
||||
_z_ab = _zb0 - R_BACK # 弧与背面的切点高度 643.5
|
||||
_y_ab = _yb0 + (_zb0 - _z_ab) / (_zb0 - _zb1) * (_yb1 - _yb0)
|
||||
_cb = (_y_ab + R_BACK, _z_ab) # 后侧圆角心
|
||||
yz_pts = [(_cb[0], _zb0), # 顶面后缘改从圆角起点开始
|
||||
(_c[0], y_b[1])] # 顶面走到前侧圆角起点 Y=161.5
|
||||
for _k in range(1, 31): # R3 圆角:90° -> 0°,切线由水平转竖直
|
||||
_a = math.radians(90.0 - 90.0 * _k / 30.0)
|
||||
yz_pts.append((_c[0] + R_TIP * math.cos(_a), _c[1] + R_TIP * math.sin(_a)))
|
||||
yz_pts.append((y_b[0], Z_WALL_END)) # 竖直前壁 Y=164.5 直落(直线段)
|
||||
_m = 0.5 * math.hypot(y_b[0] - y_a[0], Z_WALL_END - y_a[1]) * 0.5
|
||||
for _k in range(1, 121): # 底部顺收 Hermite:两端切线都沿 -Z
|
||||
t = _k / 120.0
|
||||
h00 = 2 * t ** 3 - 3 * t ** 2 + 1
|
||||
h10 = t ** 3 - 2 * t ** 2 + t
|
||||
h01 = -2 * t ** 3 + 3 * t ** 2
|
||||
h11 = t ** 3 - t ** 2
|
||||
yz_pts.append((h00 * y_b[0] + h10 * _m0y + h01 * y_a[0],
|
||||
h00 * y_b[1] + h11 * _m1z + h01 * y_a[1]))
|
||||
yz_pts.append((h00 * y_b[0] + h01 * y_a[0],
|
||||
h00 * Z_WALL_END + h01 * y_a[1] - _m * (h10 + h11)))
|
||||
yz_pts += [(Y_COVER - 0.5, Z_SH),
|
||||
(Y_REAR - 8.0, Z_SH),
|
||||
(Y_REAR - 8.0, Z_SH + 36.0)]
|
||||
for _k in range(0, 30): # 后侧 R3 圆角:180° -> 90°
|
||||
_a = math.radians(180.0 - 90.0 * _k / 30.0)
|
||||
yz_pts.append((_cb[0] + R_BACK * math.cos(_a), _cb[1] + R_BACK * math.sin(_a)))
|
||||
yz_solid = Xplate(yz_pts, -20.0, 60.0)
|
||||
|
||||
c_int = BRepAlgoAPI_Common(yz_solid.wrapped, xz_shape.wrapped)
|
||||
@@ -1172,21 +1223,20 @@ def p_fork(j1, j2):
|
||||
s = s.fuse(column)
|
||||
|
||||
# 6. 中部电机定子散热切除
|
||||
s = s.cut(Ycyl(30.5, Y_REAR + 0.5, Y_COVER - 6.5, X_ARM, Z_SH))
|
||||
# 【2026-10-05f】这刀原本是独立存在的(挖 R30.5 让定子裸露)。现在主腔已经
|
||||
# 统一到 BAY_R=30.50 并从承压面一路挖到前端,这刀完全落在主腔范围内 ——
|
||||
# 留着不改也不会多挖,但它是「同一段腔被两个不同半径各挖一次」的残留,
|
||||
# 正是接缝的来源,删掉以免后人以为散热口另有深意。
|
||||
# 通风靠 cut_open(第 6b 步的敞口盒切)实现,不依赖这刀。
|
||||
# s = s.cut(Ycyl(30.5, Y_REAR + 0.5, Y_COVER - 6.5, X_ARM, Z_SH))
|
||||
|
||||
# 7. M2 接口成型
|
||||
# 承压面起点用 AB.REAR_SEAT(=0.6 台肩 + 2.0 公差),与 Joint.pocket 同源:
|
||||
# P04 走的是自己那套 BORE_R 圆柱刀具(没调 Joint.pocket),这里必须同步改,
|
||||
# 否则 J2 关节的电机公差位仍是旧的 0.6,与 J3~J6 不一致。
|
||||
# 【2026-10-05】承压面段加一刀 SEAT_R(=R35) 圆腔,SEAT_TOP=+1.0。
|
||||
# 取满 R35 才能让承压面与外壁齐平成**一个平面**(用户要求:把凸台、围挡
|
||||
# 一起弄平,做成和电机两头齐平的平面)。取小于 R35 必然留下一圈凸起
|
||||
# 2.6mm 的围挡环墙 —— 详见 Joint.pocket 的 docstring。
|
||||
s = j2.front_collar_pocket(s, r_bore=30.25, z0=50.0, z1=56.5)
|
||||
# 【2026-10-05f】与 Joint.pocket 同步:主腔统一为单一 BAY_R 圆柱,
|
||||
# 从承压面一路挖到前端盖外,内壁不再有 R35/R30.15/R30.25/R30.50 四段台阶。
|
||||
# (承压面段不再单独挖 SEAT_R:BAY_R 从 -REAR_SEAT 起就覆盖了它,
|
||||
# 承压面本身仍是 R35 外壁围出的完整平圆盘。)
|
||||
s = j2.rear_mount_holes(s, t_plate=8.0, hole_d=2.8, cb_d=5.5, cb_depth=4.0)
|
||||
c_m2 = [cyl(BORE_R, -AB.REAR_SEAT, COVER_Z - 3.5), cyl(CB_R, COVER_Z - 3.5, COVER_Z + 0.6),
|
||||
cyl(AB.SEAT_R, -AB.REAR_SEAT, AB.SEAT_TOP)]
|
||||
s = s.cut(*[j2.L(item) for item in c_m2])
|
||||
s = s.cut(j2.L(cyl(AB.BAY_R, -AB.REAR_SEAT, COVER_Z + 0.6)))
|
||||
|
||||
|
||||
# 7b. M2 前端压盖熔接(见 2b):必须在 6/7 步所有 R30.15~30.5 圆柱刀具走完之后,
|
||||
@@ -1211,8 +1261,28 @@ def p_fork(j1, j2):
|
||||
# 槽底 Z525 以下保留整块实心过渡到电机座;顶部敞开故非封闭腔、免支撑。
|
||||
# 必须在 8 步 J1 凸台/螺钉孔之前切:槽的 X23..35 范围离 J1 凸台(X<=11.5)与
|
||||
# 3xS01 沉孔(X12..14)都有富余,但先切可以保证后面那些刀具不会把槽壁打薄。
|
||||
# 7c2.【2026-10-05 槽右壁跟随外轮廓,去掉右上角两段尖楔】
|
||||
# x1=35 是按立柱中段定的(Z525~630,X11.5~45 全宽都在,中性面 X29,
|
||||
# 两片腹板 X13~23 / X35~45 各 10mm)。可 Z630 以上零件被 R18 圆角收窄:
|
||||
# 顶面只剩 X11.5~29,再往右是圆角带 X29~45。
|
||||
# 原先一刀切到底,槽就横着切进圆角带;又因为槽在 Y=102/154 收尾,
|
||||
# 圆角带被切成两段悬空的楔料(一头尖一头宽),从右上角看就是"一小段尖的"
|
||||
# —— 它悬在槽口上方 1.7mm(Z644.76~646.5)没有支撑,尖头正好落在收尾处。
|
||||
# 改法:**上段跟着外轮廓收窄**,Z>630 只切到 X29(顶面右边缘),
|
||||
# 圆角带 X29~45 一整条保持连续,中/左/右三段料都不再悬空,
|
||||
# 尖楔和新台阶一起消失(先前只在 Z644.8 削平顶面,等于把尖顶削成一条
|
||||
# 新台阶,尖头本身还在,更难看 —— 已回退)。
|
||||
# 下段 X23..35 原样保留,腹板位置和厚度都不动,强度结论不受影响。
|
||||
# 分界 Z=630 取自 xz_wire:R18 圆弧正是从 (X45,Z630) 起往左上收。
|
||||
Z_TAPER = 630.0 # = 圆角起点 Z,槽右壁在此处收窄
|
||||
X_TOP_EDGE = 29.0 # = 顶面右边缘(圆角带上沿),槽不许越过
|
||||
s = s.cut(hollow_channel(P04_CH["x0"], P04_CH["x1"], P04_CH["y0"], P04_CH["y1"],
|
||||
P04_CH["z_floor"], 660.0, tag="P04立柱"))
|
||||
P04_CH["z_floor"], Z_TAPER, tag="P04立柱下段"))
|
||||
s = s.cut(hollow_channel(P04_CH["x0"], X_TOP_EDGE, P04_CH["y0"], P04_CH["y1"],
|
||||
Z_TAPER, 660.0, tag="P04立柱上段(随外轮廓收窄)", fil=0.0))
|
||||
# 上段 fil=0:槽宽只剩 6mm(X23~29),R4 内角圆角在 6mm 宽的槽上两侧
|
||||
# 叠加会退化成零面积而失败(实测报 BRep_API: command not done)。
|
||||
# 这里本来就是直壁窄槽,不倒角也符合"跟随外轮廓"的意图。
|
||||
|
||||
# 8. 头部转接凸台加长(贯通 P03 前盖中心孔,跨越装配缝直连 J1 输出盘)
|
||||
boss = cyl(17.8, 54.942, 61.5 + X_FORK_GAP)
|
||||
@@ -1243,7 +1313,9 @@ def make_pitch_to_roll_bracket(j_pitch, j_roll, z_pitch, z_r, name="bracket", hu
|
||||
roll 电机(J3/J6)轴向是 -Z,前端盖外端面在 z_r-56,-Z 侧是从动件:
|
||||
压盖朝 -Z 长(Z_COVER-5..Z_COVER),从动件毂面必须整体后移 CLAMP_BACKOFF=5.5
|
||||
让位(与 Y 轴关节 hub_gap=6.0 同一个道理,只是基准间隙 0.5 而非 1.0)。
|
||||
P08 传 False:J6 的 M6 前端压盖尚未做(从动件 P09 让位要改工具法兰直锁凸台)。
|
||||
P08 自 2026-10-03 起也传 True:M6 前端压盖补齐,对侧 P09 让位 CLAMP_BACKOFF
|
||||
(见 make_direct_hub 的 backoff),五处电机腔至此全部是「后端板 + 前端压盖」
|
||||
双向面压,配方同源。
|
||||
"""
|
||||
z_bot = z_r - 56.0 # roll 电机底端 (front collar)
|
||||
z_plate = z_r + 8.0 # roll 电机顶端安装板 (rear plate top);见第 8 步 t_plate 说明
|
||||
@@ -1324,11 +1396,17 @@ def make_pitch_to_roll_bracket(j_pitch, j_roll, z_pitch, z_r, name="bracket", hu
|
||||
# 台阶只剩 t_plate-cb_depth-REAR_SEAT = 8-4-2.6 = 1.4mm 膜厚;给到 8 而不是原来的
|
||||
# 7,是为了不让这层膜退化成 0.4mm。7->8 让 P05/P08 的杯体外壳顶 z_plate 抬 1mm。
|
||||
s = j_roll.rear_mount_holes(s, t_plate=8.0, hole_d=2.8, cb_d=5.5, cb_depth=4.0)
|
||||
s = j_roll.front_collar_pocket(s, r_bore=30.25, z0=50.0, z1=56.5)
|
||||
# 【2026-10-03i 接缝整改】front_collar_pocket 已删。
|
||||
# 它切的是 cyl(BAY_R, z0=50.0, z1=56.5),而紧接着的 Joint.pocket 切的是
|
||||
# cyl(BAY_R, -REAR_SEAT, COVER_Z+front_pad) —— **同一根圆柱、同一个半径**,
|
||||
# 前者完全是后者的子集。两次半径相同的圆柱布尔相减,等于让 OCC 在腔壁上
|
||||
# 留下一条 s=50.0 的零宽棱:实测 P05 的 R30.500 腔壁被切成 5090.5 + 493.9
|
||||
# 两张面(-2.6..50.0 与 50.0..55.5),P06 同样在 50.0 处裂开。着色时那条
|
||||
# 棱就是腔里横穿的一道线。P04/P08 本来就没调它,腔壁是完整一张面。
|
||||
s = j_roll.pocket(s)
|
||||
|
||||
# 9. 电机定子配合空腔
|
||||
s = s.cut(cyl(30.5, z_r - 49.5, z_r - 0.5, HL.X_ARM, HL.Y_AXIS))
|
||||
# 【2026-10-05f】原 cyl(30.5, ...) 定子配合空腔已删,同上:已被主腔 BAY_R 覆盖。
|
||||
|
||||
# 10. 俯仰轴直连法兰结构(凸台延伸至法兰盘背面之后 2.5mm,跨过间隙与法兰盘牢固熔接,
|
||||
# 保持单实体)。凸台长度跟着 y_hub_in 走:法兰盘后移时凸台同步加长,
|
||||
@@ -1352,7 +1430,10 @@ def make_pitch_to_roll_bracket(j_pitch, j_roll, z_pitch, z_r, name="bracket", hu
|
||||
# 熔接必须放在最后:第 6/7/8/9 步所有 R30.15~30.5 圆柱刀具都走完之后才接,
|
||||
# 否则压盖根部那 0.5mm 薄环会被 front_collar_pocket / 定子孔啃掉一圈。
|
||||
if roll_clamp:
|
||||
s = s.fuse(motor_front_clamp(HL.X_ARM, 0.0, tag="%s/M3" % name[:3],
|
||||
# tag 里的电机号从 j_roll.jid 取(P05->M3 / P08->M6),别再写死 M3 ——
|
||||
# 写死的话 P08 的构建日志会谎报自己夹的是 M3,排查时容易被带偏。
|
||||
s = s.fuse(motor_front_clamp(HL.X_ARM, 0.0,
|
||||
tag="%s/M%d" % (name[:3], int(j_roll.jid[1])),
|
||||
axis="Z", py=HL.Y_AXIS, z_face=z_r - COVER_Z))
|
||||
|
||||
# 13.【2026-10-05d】只切"围挡"那一圈:敞口(-Y)侧的前端定位环 + 压盖根部薄环。
|
||||
@@ -1374,9 +1455,9 @@ def make_pitch_to_roll_bracket(j_pitch, j_roll, z_pitch, z_r, name="bracket", hu
|
||||
# 附带效果:盒切把 Loft 在 X=±35 与 Ø70 柱面相切的那两片切向楔形一起带走
|
||||
# (楔形位于 Y_AXIS 附近 < Y_AXIS+3),不会留下孤立碎块 -> 单实体拓扑保持。
|
||||
# 13.【2026-10-05e】删掉前端"围挡"在敞口侧的那半圈环墙(见 FENCE_OPEN_CUT)。
|
||||
# P05(M3) 有前端压盖、环上骑着压盖;P08(M6) 还没有 M6 前端压盖(roll_clamp=False),
|
||||
# 环是光板 —— 两者都只切敞口(局部 +y)那半圈定位环,背脊侧整圈保留,
|
||||
# 继续定位电机前端盖。P05 的压盖因此仍有 4.75mm x 0.5mm 的熔接带作支撑面。
|
||||
# P05(M3)/P08(M6) 现在都有前端压盖、环上骑着压盖 —— 两者都只切敞口(局部 +y)
|
||||
# 那半圈定位环,背脊侧整圈保留,继续定位电机前端盖,并给压盖当 4.5mm x 0.5mm
|
||||
# 的熔接带支撑面。
|
||||
if roll_clamp or FENCE_OPEN_CUT:
|
||||
s = cut_motor_fence(s, j_roll, "%s/M3" % name[:3], name[:3])
|
||||
|
||||
@@ -1464,10 +1545,14 @@ def p_humerus_bone(j3, j4):
|
||||
s = s.fuse(loft.val())
|
||||
|
||||
# 4. 电机中间定子散热裸露切除 (100% 裸露)
|
||||
s = s.cut(Ycyl(30.5, Y_REAR + 0.5, Y_COVER - 6.5, X_ARM, Z_EL))
|
||||
# 【2026-10-05f】原 Ycyl(30.5, ...) 定子散热切除已删:主腔统一 BAY_R=30.50
|
||||
# 且从承压面挖到前端,这刀完全落在主腔内,属同段腔被两个半径各挖一次的残留。
|
||||
# 通风由敞口盒切实现,不依赖它。
|
||||
|
||||
# 5. M4 接口成型
|
||||
s = j4.front_collar_pocket(s, r_bore=30.25, z0=50.0, z1=56.5)
|
||||
# 【2026-10-03i 接缝整改】front_collar_pocket 已删,理由同 p_shoulder_roll_base:
|
||||
# 它与 Joint.pocket 切的是同一根 BAY_R 圆柱,是后者的子集,两次同半径布尔
|
||||
# 相减会在腔壁上留下 s=50.0 的零宽棱(本件实测 R30.500 裂成 5168.4 + 493.9 两张面)。
|
||||
s = j4.rear_mount_holes(s, t_plate=8.0, hole_d=2.8, cb_d=5.5, cb_depth=4.0)
|
||||
s = j4.pocket(s)
|
||||
|
||||
@@ -1610,10 +1695,21 @@ def p_forearm_bone(j4, j5, half=None):
|
||||
P07_CH["z_floor"], 300.0, tag="P07顶板"))
|
||||
|
||||
# 7. M5 电机安装接口与定子空腔
|
||||
s = j5.front_collar_pocket(s, r_bore=30.25 + CLEARANCE_GAP, z0=50.0, z1=56.5)
|
||||
# 【2026-10-05f 接缝整改】本件原先是全机唯一给腔径加 CLEARANCE_GAP(2.0) 的地方:
|
||||
# front_collar_pocket(r_bore=32.25) + 一刀 Ycyl(32.5, Y_REAR-0.5, y_front-6)。
|
||||
# 结果内壁是 35 -> 32.5 -> 30.2 -> 32.3 -> 30.2,比兄弟件多两道台阶
|
||||
# (实测 scratch/bay_step_profile.py:z=5.5 处 32.5、z=49.5 处掉到 30.2、
|
||||
# z=50.25 又回到 32.3)。
|
||||
# 这 2.0mm 是「关节间隙」,但关节间隙是**轴向**让位(见 hub_gap / CLAMP_CLR),
|
||||
# 径向把腔径撑大 2mm 只会让电机在腔里晃,且与 P05/P06/P08 不一致。
|
||||
# 现统一走 BAY_R(30.50),与兄弟件同径,接缝归零。
|
||||
# 【2026-10-03i】front_collar_pocket 随之删除:它切 cyl(BAY_R, 50.0..56.5),
|
||||
# 是 Joint.pocket 那根 cyl(BAY_R, -2.6..61.6) 的子集,同半径重复相减
|
||||
# 只会在腔壁上多出一条 s=50.0 的零宽棱。
|
||||
s = j5.rear_mount_holes(s, t_plate=8.0, hole_d=2.8, cb_d=5.5, cb_depth=4.0)
|
||||
s = j5.pocket(s)
|
||||
s = s.cut(Ycyl(30.5 + CLEARANCE_GAP, HL.Y_REAR - 0.5, y_front - 6.0, X_ARM, Z_WR))
|
||||
# 【2026-10-05f】原 Ycyl(30.5+CLEARANCE_GAP=32.5, ...) 整刀删除:
|
||||
# 它既撑大了腔径(接缝主因),又已被主腔 BAY_R 完全覆盖(纯冗余)。
|
||||
|
||||
# 半包散热设计:-Z底部电机定子通风口
|
||||
vent_cut = bx(X_ARM - 40.0, X_ARM + 40.0, y_rear + 8.0, y_front - 6.0, Z_WR - 40.0, Z_WR - 25.0)
|
||||
@@ -1663,10 +1759,16 @@ def p_wrist_bracket(j5, j6):
|
||||
|
||||
hub_gap=6.0:J5 处 P07 新增了 M5 前端压盖(Y 155.5..161.0),从动法兰盘背面必须
|
||||
从 Y=157 后移到 Y=162 让位;J5 直锁凸台同步加长,3xS01 输出螺钉咬合量不变。
|
||||
|
||||
roll_clamp=True【2026-10-03】:M6 补上前端压盖,与 P04/P05/P06/P07 的
|
||||
M2/M3/M4/M5 同一套配方(R35、4xM3x8 BCD55 @17.8°+90k、Ø6.0 沉孔、Ø61.0 根部
|
||||
让位槽),轴向 -Z,压盖占全局 Z 120.5..115。此前本件是五处电机腔里**唯一**
|
||||
只被后端板 4xM3x10 单面锁死的,电机大扭矩下会在 Ø60.3 座孔里点头;对侧
|
||||
P09 让位 CLAMP_BACKOFF=5.5(见 make_direct_hub 的 backoff),工具端点不动。
|
||||
"""
|
||||
return make_pitch_to_roll_bracket(j5, j6, Z_WR, Z_R6,
|
||||
name="P08_腕偏转座_螺旋体25%_墙4底5_竖打",
|
||||
hub_gap=6.0)
|
||||
hub_gap=6.0, roll_clamp=True)
|
||||
|
||||
|
||||
def p_tool_flange(j6):
|
||||
@@ -1703,7 +1805,11 @@ def p_tool_flange(j6):
|
||||
s = s.cut(pilot).cut(thru)
|
||||
|
||||
# 直连法兰
|
||||
s = make_direct_hub(s, j6, r_disc=35.0, z_out=74.0)
|
||||
# 【2026-10-03】M6 补上前端压盖后,J6 毂面必须让位 CLAMP_BACKOFF=5.5
|
||||
# (详见 make_direct_hub 的 backoff)。P09 的法兰本体 z_bot/Z_HUB6 一个字没动,
|
||||
# 让位的只是伸进 J6 腔里的那圈毂面 —— 圆盘下移后仍与法兰本体在局部 65..79.5
|
||||
# 大面积交叠,熔接不受影响;工具端点 Z_TIP=93 也随之不变。
|
||||
s = make_direct_hub(s, j6, r_disc=35.0, z_out=74.0, backoff=CLAMP_BACKOFF)
|
||||
|
||||
# 4x M4 孔(必须在 make_direct_hub 之后切)
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user