5.0 KiB
5.0 KiB
【2026-10-05e】前端围挡整改推广到全机 5 处(J2/J3/J4/J5/J6)
用户要求:"其他几个也有一样的情况,也修一下" → J3/M3 那一处的前端围挡,其余四处电机舱(J2/M2、J4/M4、J5/M5、J6/M6)完全同构,一并处理。
根因(几何实测,不是残留料)
Joint.front_collar_pocket(r_bore=30.25) 把座孔从 R30.15 扩到 R30.25,于是留下一圈
r30.25..35、6mm 高的环墙,比电机前端盖 Ø60.3 凸出 4.75mm,把前端盖整圈围住;
J2/J3/J4/J5 上还骑着 R35 前端压盖(Ø70 再凸 3.2mm)。
实测五处环段都在关节局部 z 49.5..56:Y 轴电机 Y150..156、roll 电机 Z395.5..389。
做法:把 P05 专用盒切泛化成 cut_motor_fence()
- 开关
M3_FENCE_OPEN_CUT→FENCE_OPEN_CUT(语义从 P05 专用变全机共用)。 - 新函数
cut_motor_fence(shape, j, tag, name3, z0=49.4, z1=56.1): 在关节局部坐标系里切x ±40 / y -3..+40 / z 49.4..56.1,再j.L()摆到全局。- 敞口方向恒为局部 +y,无需逐件配置:实测 5 处电机舱的本体 (环外 r=37/40 有料处 = 背脊侧)方位角全部落在局部角 180~360 (J2 240..315 / J3 225..315 / J4 210..330 / J5 210..330 / J6 195..345)。
- 一对 z 参数通吃全机(因为五处环段都在局部 z 49.5..56)。
- 切口边界取 y=-3.0 而非 0:环壁在该处仍与背脊侧实体连通,切出来是真正的缺口 而不是零厚度缝,单实体拓扑天然保持。
- 四个调用点(都在压盖熔接之后、收尾刀具之前):
P04 7b2(j2)、P06 5b2(j4)、P07 7c2(j5)、make_pitch_to_roll_bracket 第13步(j_roll,
条件放宽为
roll_clamp or FENCE_OPEN_CUT,这样尚无前端压盖的 P08/M6 也只切定位环)。
关键教训(值得记住)
- P05 的全局盒切其实是局部盒切:当时那记
(X_ARM±40, Y_AXIS-40..+3, Z388.9..395.6)换算到 J3 局部系正好是x±40 / y -3..+40 / z 49.4..56.1。一开始我按全局坐标去复用,语义就错了 —— 泛化时必须先确认原刀在局部系里是什么。 - P05 回归验证:改用通用函数后 P05 体积 151.60 cm³ 与 2026-10-05d 版逐位一致, 剖面 0..165° 敞口侧全空、180..345° 背脊侧有料,证明泛化没有改变既有行为。
- 写文件务必"先在内存改好、断言全过、最后一次性写出":本轮用
io.open(P,"w").write(s)时中途抛异常(newline="\\n"非法值), 把 119KB 的 arm_model.py 截成了 0 字节,靠.bak/arm_model.py.bak20261005e救回。 后续改成写 .tmp 再 os.replace()+ 所有assert前置,原子性才可靠。 - **heredoc 里
sed -i转义**:sed -i 's/newline="\\n"/newline="\n"/'` 这类在 Bash heredoc 里层数容易错,直接改脚本文件更稳。
验证结果(全过)
| 项目 | 结果 |
|---|---|
| 单实体 | 13/13 ✓ |
| 静态碰撞 | 8/8 零干涉 ✓ |
| 电机 ±2mm 公差 | 15/15 ✓(现覆盖 J2~J6 全部 5 个关节) |
| 3MF | 12/12 ✓ |
| 全行程重扫 | 696 s,docs/travel.json 与改前完全一致(J2 −105…+9、J4 −111…+16、J5 −93…+34、J1/J3/J6 整周) |
| 逐方位剖面 | 5/5 敞口侧 0/12 有料、背脊侧 11/12 有料 |
| 误伤检查 | 环外本体(r=37/40)改前改后逐方位完全一致;压盖沉孔段(z=58)一致 |
减重:P04 −3.4 / P05 −3.2 / P06 −3.2 / P07 −2.1 / P08 −3.0 cm³
(P07 只减 2.1 是因为它 front_collar_pocket 用了 r_bore=30.25+CLEARANCE_GAP=32.25,
环壁只有 r32.25..35 更薄)。
文档同步
README.md:零件表 P04/P06/P07/P08 行加"前端围挡只切敞口那半圈"标记;把 2026-10-05d 的 P05 专用段落升级合并成 2026-10-05e 全机版(去掉了重复叙述)。docs/bom.json:P04/P06/P07/P08 四件说明各追加一段(bom.json 是 CRLF, 写出时必须保持原行尾风格,否则整文件 diff 会被刷满)。docs/screws.json:S12 备注把M3_FENCE_OPEN_CUT旧名改掉 + 追加推广说明, 强调 16 颗螺钉的数量/型号/孔位/相位/沉孔深度一概不变。
产出
docs/shots/fence_all_sections.svg/.png—— 五处「改前 vs 改后」横剖面对比图 (脚本scratch/gen_fence_sections.py,用 BRepClass3d_SolidClassifier 沿 720 个方位 逐 0.2mm 步进探测材料外缘半径,直接画材料剖面多边形;比调相机截图可靠得多)。docs/shots/fence_j2_after.png/j4/j5/j6—— 四处查看器渲染图。
查看器渲染的坑(省得再踩)
look.py 的相机参数是世界坐标偏移:tx/ty 要填 95 / 部件高度(例
az=1.5708&po=1.95&rd=150&tx=95&ty=520&tz=-128),tz 是负值。
我先前按局部坐标猜(tx=19.5、tz=+440),四张图 md5 完全相同 —— 那是渲染没生效,
不是"参数无效但画面相同"。判断参数是否生效要看 md5 是否互不相同。