单文件约束取消后,Python 侧没必要再靠 16 处 sys.path.insert 维持扁平模块互认。
现在按职责分包:
arm/paths.py 路径唯一来源(含新增 CACHE、TPL)
arm/constants.py 实测接口数值(原 armcore 的 M/C/CLR/FIT/MOTOR_TOL 段)
arm/cad/{helpers,arm_build,part_tools,parts/} 几何与装配
arm/kinematics.py(原 human_layout.py,唯一运动学事实源)
arm/analysis/{sweep_v2,strength_check,torque_balance,finalize_travel,ws_sweep,gen_env_mesh}
arm/dataio/{screw_mesh,draw_sheet} arm/viewer/{build_viewer,shot}
arm/build_model.py(原 arm_model.py)
顺带修掉的既有缺陷(都是实测撞出来的,不是预防性改动):
- arm_model 第二次 sys.path 跳到 gitignore 的 scratch/ 去 import 构建必需的包络脚本:
ws_sweep/gen_env_mesh 提升进 arm/analysis/,缓存挪到 data/cache/(gitignore,可重生成)。
- finalize_travel / draw_sheet 顶层就是"算完写文件",一次 importlib 冒烟测试就把
docs/travel.json 重写了一遍;现在被 import 直接抛错。
- strength_check 用 OUT.replace("/out","/web") 靠字符串形状推路径,改成直接用 WEB。
- build_viewer 里 WORKSPACE 使用点漏改导致 NameError —— 已由构建关卡抓到并修掉。
os._exit 的处置与计划里的假设相反:实测光是 `python -c "import arm.cad.helpers"`
就会在解释器退出时段错误(exit 139,OCC 静态析构),全流程跑完也一样。所以入口
脚本尾部保留 flush + os._exit,并把原因写进注释;被 import 时不生效。
关卡(tests/):
- verify.py 一条命令跑三层:产物 md5、IK 数值 exact 段、截图。
- 截图基线重做并分级:同一构建连跑两轮实测 102 张逐字节可复现(要求 md5 相同),
3 张线束 x-ray 不可复现(mean<=0.0017、无像素差>8)改为与参考像素比容差;
这 3 张不再入库,免得每次跑关卡都脏 git。
- 新增 ?view=sheet / ?sheet=N / ?theme / ?guide=N 四个 URL 参数:工程图与装配向导
占了约一半 CSS 和 700 行 JS,原先没有任何截图覆盖,拆它们等于没有关卡。
- 关卡灵敏度已验:改坏 IK 基线一个数 -> FAIL;换旧版求解器 -> 5 处 exact 差异。
实测:python -m arm.build_model 退出码 0,全部产物 md5 与基线一致,
105 视图截图全过,IK exact 段逐字节一致。
256 lines
21 KiB
Python
256 lines
21 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""P04 肩叉:J1 从动杯体、M2 前端压盖、立柱 U 形减重槽、Hermite 弧面前脸。"""
|
||
from arm.cad import arm_build as AB
|
||
import cadquery as cq
|
||
import math
|
||
from arm.cad.helpers import cyl
|
||
from arm.cad.arm_build import COVER_Z, Ycyl, bx
|
||
from arm.kinematics import X_ARM, X_FORK_GAP, Y_AXIS, Y_COVER, Y_REAR, Z_RL, Z_SH
|
||
from OCP.BRepAlgoAPI import BRepAlgoAPI_Common
|
||
from arm.cad.part_tools import (Xplate, clamp_hole_drills, cut_motor_fence, hollow_channel,
|
||
hub_m2_holes, make_surface_tie_bridge, motor_front_clamp)
|
||
|
||
|
||
# 三处减重腔的开度。这三个件都是绕 Y 轴弯,弯矩在 X 方向拉压,距中性面越远的料
|
||
# 贡献越大,所以"少挖、挖窄"是恢复强度最省料的做法。
|
||
# 数值由 scratch/tune_hollow.py 按"槽区最差安全系数 >= 无槽基线的 95%"扫出来:
|
||
# P04 档1 X23..35 Y102..154 Z>=525 -> 95% 基线,保留 69% 的减重量
|
||
# P07 档1 X−3..43 Y103..153 Z>=255 -> 96% 基线,保留 76%
|
||
# P06 档1 抬高窗底到 Z362(不是收窄) -> 100% 基线,保留 56%
|
||
# 窗底原来压在 Z358,而该处截面安全系数最低;抬高 4mm 比横向收窄 8mm 划算得多。
|
||
P04_CH = dict(x0=23.0, x1=35.0, y0=102.0, y1=154.0, z_floor=525.0) # 肩叉立柱
|
||
|
||
|
||
def p_fork(j1, j2):
|
||
"""P04_肩叉_螺旋体30%_墙5底5_竖打 (Shoulder Fork / L-Bracket) - 加长避让顺滑流线版:
|
||
1. 头部与身子起点自 X=5.5 前移加长至 X=10.5+X_FORK_GAP=11.5,叉板背面与 P03 托架端面
|
||
(X=8.5+X_BAY_EXT=11.5) 0.0 硬贴平(2026-10-02 用户两次要求"搞成平的";
|
||
P03 侧插槽独立加长 3mm 便于 M1 电机斜插卡入);
|
||
2. J1 从动法兰圆盘已删除(盘面在 column 前缘形成鼓楞):J1 由 boss(Ø35.6)贯通 P03 前盖中心孔直连电机输出盘;column 顶边保持 Z=646.5 与 P03 环齐高,R=18mm 大圆弧顺滑过渡;
|
||
3. 头部转接凸台加长贯通 P03 前盖中心孔 (R=19.5mm),直连 J1 旋转法兰盘;
|
||
4. M2 保留后端安装板(R=35mm, 带 rear_mount_holes 螺钉孔),前端定位环鼓出圆盘已删除(前端定位由 column 端面 pocket 承担),中间镂空散热;
|
||
4b. 【2026-10-02 新增】M2 前端压盖:原方案电机只被后端安装板(S02 4xM3x10)单面锁死,
|
||
大扭矩下电机绕 Y 轴在 Ø60.3 座孔里点头/翘起,固定不牢。现在前端盖外端面
|
||
(Y=156.0) 再加一枚同径 R35 压盖,用 4x M3x8 在电机前端盖 BCD55 上把电机
|
||
从前端夹一次 —— 电机被前后两块同心 Ø60.3 端面双向夹紧,倾斜自由度归零;
|
||
螺钉沉在压盖沉孔内不外凸,不占用 J2 轴向间隙(P05 法兰盘已相应后移);
|
||
5. 严格满足 single-solid 流形拓扑与 360° 全范围零干涉 (COLLISION pairs = 0)。
|
||
"""
|
||
# 1. M2 后端安装法兰盘 (Y: 92..100, R=35mm)
|
||
rear_plate = Ycyl(35.0, Y_REAR - 8.0, Y_REAR, X_ARM, Z_SH)
|
||
|
||
# 2. M2 前端定位环 (Y: 149.5..155.5, R=35mm)
|
||
front_collar = Ycyl(35.0, Y_COVER - 6.5, Y_COVER - 0.5, X_ARM, Z_SH)
|
||
s = rear_plate.fuse(front_collar)
|
||
|
||
# 2b. 【2026-10-02 新增】M2 前端压盖(几何与理由见 motor_front_clamp)。
|
||
# 必须在第 6/7 步所有 R30.15~30.5 圆柱刀具走完之后才熔接,否则压盖根部会被
|
||
# front_collar_pocket / c_m2 啃掉一圈 0.1mm 薄边(见 7b)。
|
||
fp = motor_front_clamp(X_ARM, Z_SH, tag="P04/M2")
|
||
|
||
# 3. J1 从动法兰圆盘已删除:原 R=36.5 圆盘盘面在 column 前缘形成圆盘鼓楞,
|
||
# J1 与 P04 的连接由 boss(Ø35.6 贯通 P03 前盖中心孔 R=19.5)直连电机输出盘
|
||
# 承担,螺钉走 boss 端面 4xB 孔,圆盘无传力功能已去除。
|
||
|
||
# 4. XZ 平面有机连续流线轮廓(随 X_FORK_GAP 整体前移,避让顺滑过渡):
|
||
x_b, z_b = -12.65 + X_FORK_GAP, 506.0
|
||
x_a, z_a = 10.5 + X_FORK_GAP, 545.0
|
||
Lz = z_a - z_b
|
||
d0 = 0.514 * Lz
|
||
d1 = 0.0
|
||
|
||
hermite_pts = []
|
||
N_h = 16
|
||
for i in range(N_h + 1):
|
||
t = i / N_h
|
||
h00 = 2.0 * (t**3) - 3.0 * (t**2) + 1.0
|
||
h10 = t**3 - 2.0 * (t**2) + t
|
||
h01 = -2.0 * (t**3) + 3.0 * (t**2)
|
||
h11 = t**3 - t**2
|
||
xh = x_b * h00 + d0 * h10 + x_a * h01 + d1 * h11
|
||
zh = z_b + t * Lz
|
||
hermite_pts.append((xh, zh))
|
||
|
||
# 顺滑过渡:从 (54.5, 525) 顺收到 (45.0, 555),两端切线均沿 +Z
|
||
trans_pts = []
|
||
for i in range(1, 16):
|
||
t = i / 16.0
|
||
h00 = 2.0 * (t**3) - 3.0 * (t**2) + 1.0
|
||
h10 = t**3 - 2.0 * (t**2) + t
|
||
h01 = -2.0 * (t**3) + 3.0 * (t**2)
|
||
h11 = t**3 - t**2
|
||
xt = 54.5 * h00 + 45.0 * h01
|
||
zt = 525.0 * h00 + 555.0 * h01 + 30.0 * (h10 + h11)
|
||
trans_pts.append((xt, zt))
|
||
|
||
xz_wire = (cq.Workplane("XZ", origin=(0, Y_AXIS, 0))
|
||
.moveTo(10.5 + X_FORK_GAP, 545.0)
|
||
.lineTo(10.5 + X_FORK_GAP, Z_RL + 36.5)
|
||
.lineTo(28.0 + X_FORK_GAP, Z_RL + 36.5)
|
||
.radiusArc((44.0 + X_FORK_GAP, 630.0), 18.0)
|
||
.lineTo(44.0 + X_FORK_GAP, 555.0))
|
||
|
||
for pt in reversed(trans_pts):
|
||
xz_wire = xz_wire.lineTo(pt[0], pt[1])
|
||
|
||
xz_wire = (xz_wire
|
||
.lineTo(54.5, 525.0)
|
||
.lineTo(54.5, 490.0)
|
||
.lineTo(18.5 + X_FORK_GAP, 490.0)
|
||
.lineTo(-17.0 + X_FORK_GAP, 490.0)
|
||
.threePointArc((-16.0 + X_FORK_GAP, 498.5), (-12.65 + X_FORK_GAP, 506.0)))
|
||
for pt in hermite_pts[1:]:
|
||
xz_wire = xz_wire.lineTo(pt[0], pt[1])
|
||
xz_wire = xz_wire.close()
|
||
xz_shape = cq.Shape(xz_wire.extrude(100.0, both=True).val().wrapped)
|
||
|
||
# 5. YZ 平面包络
|
||
# 【2026-10-07 整改:M2耳板与立柱整体化,消除全部分界线与台阶】
|
||
# 原方案后法兰(Y92..100)与前端定位环/压盖(Y149.5..161)作为独立圆柱,与立柱的
|
||
# X向弧面轮廓不重合,导致交接处(Y=100, Y=149.5, Y=155.5)出现垂直切面分界台阶;
|
||
# 前端压盖(Y155.5..161)上方更露出5.5mm悬空台阶。
|
||
# 现将立柱Y向基准延伸至整副叉架外缘(Y 92.0..161.0),在Z 490..525与前后耳板完全共面一体;
|
||
# (161.0, 525)经光滑Hermite顺收到竖直前壁(164.5, 566),彻底消除全部竖向与横向分界线,
|
||
# 前后耳板与立柱熔为单一坚固整体,抗弯扭刚度大幅提升。
|
||
y_front_clamp = 161.0 # 前端压盖外缘 Y_COVER+5.0,彻底消除压盖上方台阶
|
||
y_a = (y_front_clamp, Z_SH + 35.0) # (161.0, 525.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)
|
||
_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, 31): # 底部顺收 Hermite:两端切线都沿 -Z
|
||
t = _k / 30.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] + h01 * y_a[0],
|
||
h00 * Z_WALL_END + h01 * y_a[1] - _m * (h10 + h11)))
|
||
yz_pts += [(y_front_clamp, 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, 70.0)
|
||
|
||
c_int = BRepAlgoAPI_Common(yz_solid.wrapped, xz_shape.wrapped)
|
||
c_int.Build()
|
||
column = cq.Shape(c_int.Shape())
|
||
|
||
s = s.fuse(column)
|
||
|
||
# 6. 中部电机定子散热切除
|
||
# 【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 接口成型
|
||
# 【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)
|
||
s = s.cut(j2.L(cyl(AB.BAY_R, -AB.REAR_SEAT, COVER_Z + 0.6)))
|
||
# 【2026-10-07 修复:仅切除敞口侧承压面环墙,杜绝立柱切穿空隙】
|
||
# 仿照 P05 大臂旋转座设计,只在敞口半侧(局部 y>=0)将承压面段(z: -REAR_SEAT..0)切平,
|
||
# 彻底消除阻碍电机装配的凸起围挡;立柱背脊侧(局部 y<0)绝对不动,杜绝切穿立柱留下空隙!
|
||
s = s.cut(j2.L(bx(-40.0, 40.0, 0.0, 40.0, -AB.REAR_SEAT, 0.0)))
|
||
|
||
|
||
# 7b. M2 前端压盖熔接(见 2b):必须在 6/7 步所有 R30.15~30.5 圆柱刀具走完之后,
|
||
# 否则压盖根部会被 front_collar_pocket / c_m2 啃掉一圈 0.1mm 薄边。
|
||
s = s.fuse(fp)
|
||
|
||
# 7b1.【2026-10-10 修复】压盖熔接后对最终并集重钻 4xM3x8,找回被立柱填平的沉孔。
|
||
# 第 5 步「M2 耳板与立柱整体化」把立柱扩到 Y 92..161 / Z 490..525,正好盖住
|
||
# 压盖上半侧(+Z)两个沉孔方位(@17.8° 与 @107.8°,R27.5)。fp 上的孔是**预钻**
|
||
# 的,fuse 取并集不会挖掉本体那部分料,于是并集上这两孔被填回实心
|
||
# (实测沉孔段 r3.0×3.0 与 P04 STEP 交集 84.82 mm³ = 参考体积 84.8 mm³ 的 100%,
|
||
# 通孔段也被堵掉 47%);下半侧两孔在 Z<490 立柱范围外,所以只剩 2 个孔能用。
|
||
# 与下方重钻 Ø37 中心孔那一刀同源:本体有料占住的孔,只能在熔接之后重钻。
|
||
s = s.cut(clamp_hole_drills(X_ARM, Z_SH))
|
||
|
||
# 7b2.【2026-10-05e / 2026-10-07 修复】删掉前端"围挡"在敞口侧的那半圈环墙(见 FENCE_OPEN_CUT)。
|
||
# 参考 P05 大臂旋转座设计,两端均无围挡阻碍,电机可顺畅装配入座。
|
||
s = cut_motor_fence(s, j2, "P04/M2", "P04")
|
||
# 贯通前端压盖 Ø37 (R=18.5) 让位孔,给 P05 J2 直锁从动凸台 (R=17.8) 留出充裕动间隙
|
||
s = s.cut(Ycyl(18.5, Y_COVER - 1.0, 162.0, X_ARM, Z_SH))
|
||
|
||
# 7c. 【2026-10-02 新增】立柱减重槽(见 hollow_channel)。
|
||
# 立柱 Z525..635 整段是壁厚最深处达 17.5mm 的实心料,而 J2 在 z=560/600 的
|
||
# 安全系数有 19。挖成朝上敞开的 U 形槽后立柱变成槽钢:抗弯的两片 X 向腹板
|
||
# 正好落在弯矩拉压区(z=560 截面 X13..45,中性面在 X29,腹板占 X13~23/X35~45),
|
||
# 被掏掉的正是中性层附近几乎不参与抗弯的料。
|
||
# 槽底 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"], 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)
|
||
s = s.fuse(j1.L(boss))
|
||
s = s.cut(j1.L(cyl(3.5, 54.0, 74.0 + 30.0)))
|
||
# 沉孔台阶固定在 63.0(不随前移):M2x10 旋入电机输出毂的咬合量与改前一致;
|
||
s = hub_m2_holes(s, j1, cb_z1=74.0 + 40.0 + X_FORK_GAP,
|
||
th_z1=63.0 + X_FORK_GAP, cb_z0=63.0)
|
||
|
||
# 9. 实体表面外凸式扎带拱桥 (3组 10x8mm 拱形穿带座,一体成型,完全在外部穿扎带):
|
||
# 组①:立柱顶端接缝入口 (X=20.0, Z=615.0,动静接缝后锚固点,水平穿带)
|
||
# 组②:立柱中部垂直顺行段 (X=20.0, Z=560.0,水平穿带)
|
||
# 组③:立柱下部入电机前段 (X=20.0, Z=515.0,水平穿带,避开后盖螺钉)
|
||
for tz in (615.0, 560.0, 515.0):
|
||
b = make_surface_tie_bridge(20.0, Y_REAR - 8.0, tz, w_x=10.0, l_z=8.0, h_y=3.2,
|
||
slot_w=3.2, slot_h=1.8, tunnel_dir='X')
|
||
s = s.fuse(b)
|
||
|
||
return s
|
||
|
||
|
||
JOINT = 'J1'
|
||
|
||
|
||
def specs(JS):
|
||
"""本件的 (件号, 中文名, 构建 thunk, 配色, 说明) 清单;顺序即 BOM 顺序。"""
|
||
j1 = JS["J1"]
|
||
j2 = JS["J2"]
|
||
return [
|
||
("P04_肩叉_螺旋体30%_墙5底5_竖打", "肩叉", lambda: p_fork(j1, j2), 0x2563eb,
|
||
"齐平插槽+ M2 前端压盖+ 立柱减重槽版:叉板背面与P03托架端面(11.5)0.0硬贴平(用户要求外观齐平),P03侧插槽独立加长3mm,M1电机可倾斜卡入,J1输出凸台贯通直连电机,J1从动法兰圆盘鼓楞已删(接缝区与P03止脱环齐径齐高R36.5/顶646.5),单实体全角度零干涉;【2026-10-07 J1 直锁孔与垂直姿态校准】J1 转子 3xM2 沉孔消除 (360-a) 镜像翻转,采用真实转子孔位 m2_clock=(8.05, 128.07, 248.06) 随 J1 坐标系同步旋转 5.35°,在零位保证手臂竖直下垂的同时螺钉精准拧入 M1 输出转子,彻底解决装配倾斜问题;【2026-10-02】M2 前端压盖(R35, Y155.5..161.0):电机前端盖外端面加 4xM3x8 沉孔(BCD55)夹紧,与后端安装板 4xM3x10 形成前后双向面压,消除大扭矩下电机在座孔里的倾斜;【2026-10-02】立柱减重槽(X23~35 / Y102~154 / 自Z525向上敞开):立柱Z525~635整段壁厚峰值17.5mm,J2在z=560/600的安全系数有19,改成U形槽钢后361->289cm3(-20%),抗弯的两片X向腹板正好落在弯矩拉压区(z=560截面X13~45、中性面X29,腹板占X13~23/X35~45),掏掉的正是中性层附近几乎不参与抗弯的料;槽底Z525以下保留整块实心过渡到电机座,槽底水平朝上、侧壁竖直、顶部敞开故零支撑且非封闭腔;开度按「减重区最差安全系数 >= 无槽基线 95%」选定(X23~35 比最初的 X21~37 收窄 2mm,强度从 88% 回到 95%);【2026-10-04 视觉整改】电机上方那块 4048mm2 的大平面改成 Hermite 弧面(全行程重扫 907s 确认 J1~J6 行程逐项不变):原来 yz_pts 里(164.5,646.5)->(155.5,526) 是一条直线,沿 X 拉成 4048mm2 平板(法向 (0,1,-0.07)、带 4° 斜度),正对电机上方,两侧被 xz_wire 的 R18 圆弧挤出去,形成「中间一块平、两边鼓」的观感。改成三次 Hermite(两端切线分别沿 Y/Z,与上下水平段 G1 连续),中部向 +Y 外凸约 3mm,弧度与两侧 R18 一致;单段圆弧无法同时满足两端切线(解出 R=9 与 R=120.5 矛盾)故用 Hermite。P04 体积 282.1->274.3cm³(弧面替代平面削掉的料);【2026-10-05 承压面让位腔改为 R35 圆腔、凸台与围挡一并消除】电机尾端垫片位(REAR_SEAT=2.6)用圆腔掏出承压面。**刀半径必须等于外壁 R35**(arm_build.SEAT_R):取小于 R35(曾试 32.2 = 64.4 方腔内切圆)时,刀半径与外壁之间那圈 2.8mm 环墙完整保留,而承压面只挖到刀半径,于是该环墙相对承压面【凸起】并把电机尾端面围住 —— 这就是用户截图里的一圈围挡(P08 实测 1536.9mm3)。它不是残留,而是 SEAT_R<R35 的必然产物。现 SEAT_R=35.0、SEAT_TOP=+1.0(越过尾端面 1mm,吃掉半包开口处那截0.052cm3 残片):承压面段整圈挖到外壁,承压面成为完整 R35 平圆盘,凸台与围挡一起消失,电机尾端面与承压面之间再无凸起。承力改由臂身本体承担(band 段 r36..58 有料方位 P04 10/36、其余各 15/36,其余方位靠 z>+1.0 杯体连接,无整圈通槽)。沉孔 z 区间(-8..-4)与圆腔(-2.6..+1.0)不重叠,S02 完好。连带:承压环由「方腔内切 32.2 − 沉孔外缘 30.25 = 1.95mm 窄环」变为「完整 R35 圆环 4.75mm」,受压面积 383->974mm²(2.5 倍)。【2026-10-04 承压面让位腔改为 32.2 圆腔】电机尾端垫片位(REAR_SEAT=2.6)之前用 64.4 **方**腔掏出来,方腔壁以外 z=-2.6..0 那圈料相对新承压面凸起 2.6mm,打印时是悬空薄壁(用户反馈:难打印、需支撑、公差差)。现承压面段改用**SEAT_R=32.2 圆腔**(= 64.4 方腔的内切圆半径,z=-2.6..0 与方腔平接)把整圈挖到承压面高度,凸台零残留;z=0 以上 PCBA 腔仍保持 64.4 方(PCB 是方的必须方腔)。**关键:刀半径必须取 32.2 而不是 R35** —— 中间试过 R35,结果把 r=32.2..35 的连接壁整圈切断:实测 P04 在 z=-2.6..+1.0 只剩 240~320° 方位有料,其余 360° 全掏空,后端法兰与杯壁之间出现 3.6mm 宽通槽 + 225° 一片 0.5mm 孤立薄片(用户截图:肩叉顶部「没连上」)。取 32.2 后 r=32.2..35 这圈 2.8mm 厚壁完整保留,360° 连续,既无凸台又与上方臂身连成一体(实测 5/5 件连接壁整圈连续、单实体);【2026-10-10 修复 M2 前端压盖丢失的 2 个沉孔】第 5 步「M2 耳板与立柱整体化」把立柱扩到 Y92..161 / Z490..525,正好盖住压盖上半侧(+Z)两个沉孔方位(BCD55 @17.8°、@107.8°),而压盖的孔是在熔接**之前**预钻的,fuse 取并集不会挖掉本体那部分料,于是并集上这两孔被填回实心 —— 4xM3x8 前端夹紧实际只剩 2 个孔可用(实测沉孔段 r3.0×3.0 与 P04 交集 84.82 mm³ = 满料参考值 84.82 mm³ 的 100%,通孔段也被堵 47%;下半侧 @197.8/@287.8 在 Z<490 立柱范围外故完好)。修法 = 熔接后对最终并集重钻一次(part_tools.clamp_hole_drills,与压盖同一孔位事实源;与既有的「熔接后重钻 Ø37 中心孔」同源)。复核三判据全过:布尔交集 4/4 = 0.00 mm³、剖面孔腔占比 4/4 = 100%(切面 Y159.5 空腔角度簇 = 17.8/107.8/197.8/287.8)、Ø5.5×3 螺钉头 + Ø3.0×8 螺杆与 P04 重叠 4/4 = 0.000 mm³;P04 体积 326.1→325.9 cm³,单实体 ✓,静态干涉 0 对 ✓,全机 20 个压盖孔 20/20 OK"),
|
||
]
|