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:
+17
-17
File diff suppressed because one or more lines are too long
+120
-120
@@ -1,122 +1,122 @@
|
||||
[
|
||||
{
|
||||
"id": "S01",
|
||||
"规格": "M2 x 10",
|
||||
"螺纹": "M2",
|
||||
"长度mm": 10,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 18,
|
||||
"位置": "J1~J6 输出毂:P04/P05/P06/P07/P08/P09 各 3 颗",
|
||||
"备注": "Ø2.8 通孔 + Ø5.6 沉孔,BCD 29(3 孔均布),旋入电机输出毂螺纹孔(深 6mm)"
|
||||
},
|
||||
{
|
||||
"id": "S02",
|
||||
"规格": "M3 x 10",
|
||||
"螺纹": "M3",
|
||||
"长度mm": 10,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 20,
|
||||
"位置": "P04/P05/P06/P07/P08 各 4 颗 -> 下级电机尾端面",
|
||||
"备注": "Ø2.8 通孔 + Ø5.5 沉孔(深 4mm),旋入电机尾端面 4x M3 螺纹径向槽(电机.STEP 实测:BCD55、相位 39.9°+90k,槽宽 2.5,径向可调约 ±1.25mm)。【2026-10-03 电机厚度公差】各台电机轴向长度实测差可达 2mm,本孔的承压面已按 MOTOR_TOL=2.0 从 s=-0.6 让空到 s=-2.6(armcore.MOTOR_TOL / arm_build.REAR_SEAT),所以这 4 颗螺钉**不负责把电机压死在某个长度上**,只负责夹紧垫片:装配时在电机尾端面与承压面之间叠 0~2.6mm 的 M3 平垫(标称电机约 0.6mm),厚度 T = 58.6 - 电机实际长度 L,让前端盖正好落到前端压盖面上(压盖背面与前端盖 0.0 面压)。螺钉杆长按最坏情况 T=2.6 选:M3x10 在 T=0.6 时咬合最深,T 每加 1mm 咬合减 1mm;咬合不足 3mm 时改用 M3x12。【2026-10-05 承压面让位腔】承压面段(z=-2.6..+1.0)用 SEAT_R=35.0(= 外壁 R35)圆腔掏出垫片位。**刀半径必须等于 R35**:只要小于 R35,刀半径与外壁之间那圈环墙就必然保留并相对承压面凸起,把电机尾端面围成\"一圈围挡\"(P08 实测 1536.9mm3)—— 这是取值的必然产物,不是残留。取满 R35 后承压面成为完整 R35 平圆盘,凸台与围挡一并消失。SEAT_TOP=+1.0 用于吃掉半包开口处的 0.052cm3 残片(取 0 时该残片脱空成独立碎块)。沉孔位置与深度完全不变(Ø5.5 深 4,z=-8..-4,与圆腔 z 区间不重叠,实测残余 0.00mm³),螺钉头仍坐在沉孔底、杆穿承压面进入电机螺纹槽,咬合量不变。承压环同时由 1.95mm 窄环变 4.75mm 完整圆环,受压面积 383->974mm²。"
|
||||
},
|
||||
{
|
||||
"id": "S03",
|
||||
"规格": "M3 x 16",
|
||||
"螺纹": "M3",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P03 后置重载法兰 -> M1 电机尾端面",
|
||||
"备注": "Ø3.4 通孔 + Ø6.5 圆柱沉孔(深 5mm,头沉入 1.5mm),孔位 BCD55、相位 39.9°+90k(电机.STEP 实测螺纹径向槽),轴向锁死防拉脱;旧 35.1×40.9 矩形孔距对角两颗偏出槽位 ~4.7mm,2026-10-02 修正;头型按用户已采购件用圆柱头内六角(沉孔本为圆柱形)"
|
||||
},
|
||||
{
|
||||
"id": "S04",
|
||||
"位置": "P03 前置锁紧凸台(Ø10 x4) -> M1 电机前端面",
|
||||
"备注": "Ø3.2 通孔 + Ø6.0 圆柱沉孔(深 2mm,头露出 1mm),孔位 BCD55 @17.8°+90k(电机.STEP 实测前端螺纹径向槽);头坐在沉孔底 x=9.5,M3x8 咬合电机前端面 3.5mm;2026-10-02 按用户已采购规格由 M3x10 沉头改回 M3x8 圆柱头",
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"螺纹": "M3",
|
||||
"规格": "M3 x 8",
|
||||
"长度mm": 8
|
||||
},
|
||||
{
|
||||
"id": "S05",
|
||||
"规格": "M4 x 16",
|
||||
"螺纹": "M4",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 8,
|
||||
"位置": "P01 立柱分段对锁:A-B 缝 4 颗 + B-C 缝 4 颗(每缝前后各 2 颗)",
|
||||
"备注": "统一 Ø3.9 直孔(母口壁与公榫壁同径,只有这一个孔,无过孔/沉孔/预埋):M4x16 从外面直接拧入自攻成型,螺纹吃在母口壁 3.6 + 公榫壁 6.9 共 10.5mm;孔位 x=-131/-93 非对称物理防反装"
|
||||
},
|
||||
{
|
||||
"id": "S06",
|
||||
"规格": "M4 x 16",
|
||||
"螺纹": "M4",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P09 末端工具法兰 -> 末端工具/夹爪",
|
||||
"备注": "Ø4.4 通孔(贯穿法兰)+ Ø7.0 圆柱沉孔(深 4mm,头与法兰底面齐平),R22 @0/90/180/270°(BCD44)-> 末端工具;头型按用户已采购件用圆柱头内六角。2026-10-02 由 R20 改 R22:原 R20 与 3xS01 输出螺钉 Ø5.6 螺丝刀通道中心距 6.06mm < 所需 6.30mm,0° 孔的 Ø7.0 沉孔壁被啃穿成月牙形(圆柱面 88mm² 裂成 45.7+35.4);相位差仅 8.6°,转相位躲不开,R22 后余量 1.66mm、边壁仍余 9.5mm;同日修正通孔:原 Ø3.7 比 M4 杆 Ø4.0 还细且只到 z=105,而 M4x16 杆需走到 z=113,杆尾 8mm 埋在实心料里(干涉 147.3mm³),改为 Ø4.4 贯穿"
|
||||
},
|
||||
{
|
||||
"id": "S07",
|
||||
"规格": "M5 x 25",
|
||||
"螺纹": "M5",
|
||||
"长度mm": 25,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P02 底座中核心 -> P01 立柱底部榫头",
|
||||
"备注": "Ø5.5 通孔 + Ø10 沉孔(深 6mm),非对称孔位防反装,轴向力由榫座面承载"
|
||||
},
|
||||
{
|
||||
"id": "S08",
|
||||
"规格": "M5 x 25",
|
||||
"螺纹": "M5",
|
||||
"长度mm": 25,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P02 前/后力臂 -> 中核心:前臂 2 颗 + 后臂 2 颗",
|
||||
"备注": "Ø5.5 通孔 + Ø10 沉孔;需另配 M5 六角螺母 4 枚(嵌入螺母沉槽)"
|
||||
},
|
||||
{
|
||||
"id": "S09",
|
||||
"规格": "M4 x 16",
|
||||
"螺纹": "M4",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P03 肩吊臂 -> P01_C 立柱顶面(从腔体上方往下拧)",
|
||||
"备注": "统一 Ø3.9 直孔(鞍座与立柱顶环同径,只有这一个孔,无过孔/沉孔/预埋):M4x16 从上方直接拧入自攻成型,穿鞍座 9mm 后吃进立柱顶环 7mm;载荷走 2403mm² 承压面,螺钉只防上抬"
|
||||
},
|
||||
{
|
||||
"id": "S11",
|
||||
"规格": "M4 x 16",
|
||||
"螺纹": "M4",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 1,
|
||||
"位置": "P01_C 立柱后壁 -> P03 榫头(横向防脱锁紧)",
|
||||
"备注": "与 S05/S09/S06 同为 M4x16(全机 M4x16 合计 17 颗);Ø3.9 直孔贯穿 11mm 后壁 + 榫头同径:从后方直接拧入自攻成型,榫头内咬合 4.7mm"
|
||||
},
|
||||
{
|
||||
"id": "S10",
|
||||
"规格": "M6 x 35",
|
||||
"螺纹": "M6",
|
||||
"长度mm": 35,
|
||||
"头型": "外六角",
|
||||
"数量": 6,
|
||||
"位置": "底座 6 组 28x7 紧固腰槽 -> 工作台/桌面",
|
||||
"备注": "需另配 M6 螺母 + 平垫圈各 6(建议加弹垫防松)"
|
||||
},
|
||||
{
|
||||
"id": "S12",
|
||||
"规格": "M3 x 8",
|
||||
"螺纹": "M3",
|
||||
"长度mm": 8,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 16,
|
||||
"位置": "P04/P05/P06/P07 前端压盖 -> M2/M3/M4/M5 电机前端盖(J2/J3/J4/J5 各 4 颗)",
|
||||
"备注": "Ø3.4 通孔 + Ø6.0 圆柱沉孔(深 3.0,头 Ø5.5×3.0 全沉入),孔位 BCD55 @17.8°+90k—— 正是电机前端面 4 个 M3 螺纹径向槽的相位(与 S04 同一套,勿改);螺钉头面压在孔口台阶上(Y 轴关节 Y=158;J3 的 Z 轴版本 Z=387),压盖背面与电机前端盖外端面 0.0 间隙面压贴合—— 与后端安装板 S02 的 4xM3x10 一起把电机前后双向夹死,消掉大扭矩下电机绕 J 轴点头/翘起的倾向。J2(P04 夹 M2)/J4(P06 夹 M4)/J5(P07 夹 M5) 三处压盖几何完全相同;【2026-10-03 新增 J3】P05 夹 M3 是同一套配方的 Z 轴版本(roll 电机轴向 -Z,压盖占 Z384.0..389.0,背面 Z=389 与 M3 前端盖面压),沉孔台阶 Z=387,杆穿 2.0mm 压盖 + 3.5mm 端盖后旋入前端螺纹槽约 2.5mm。【2026-10-05d 只切敞口那一圈围挡】用户指出 M3 电机前端那圈围挡(P05 在 Z389.0..395.5 的 r30.25..35 前端定位环 + 骑在它上面的 R35 压盖外圈,Ø70 比电机 Ø63.6 凸出 3.2mm)需要删除。之前一版把整个前端(定位环 + 压盖 + 腔口下沿 389->395)都切了,电机前端没了支撑面 —— 过度;现已回退。现只切敞口(-Y)那一圈(盒切,Y 界限与 cut_open 一致),-Y 半圈从 Z=395.5 一路开到压盖背面 Z=389;背脊(+Y)侧整圈定位环保留,继续定位 M3 前端盖并作为R35 压盖唯一且足够强的支撑面(4.75mm 宽 x 0.5mm 熔接带)。压盖本体、Ø37 让位孔、4xM3x8 沉孔、腔口下沿 z_bot=389、P06 毂面 383.0 与直锁凸台 65.0 全部不动,本组 16 颗螺钉的孔位/相位/沉孔台阶/咬合量一概不变(M3 仍是后端板 4xM3x10 + 前端压盖 4xM3x8 双向面压)。不整圈削到 R31.8 的原因:那圈壁与 Loft 在 X=±35 处与 Ø70 柱面相切,整圈切完会脱空出 1.32mm3 碎块破坏单实体;且压盖根部熔接带会从 2.37mm2 缩到 0.78mm2,夹紧力会把压盖拉下来。开关 arm_model.FENCE_OPEN_CUT(2026-10-05e 起为全机 5 处共用)。。【2026-10-05e 推广到其余三处】上述\"只切敞口那半圈围挡\"的做法与 P05/M3 完全同源,已推广到 J2/M2(P04)、J4/M4(P06)、J5/M5(P07) 三处同样有 M2/M4/M5 前端压盖的电机,以及尚无前端压盖的 J6/M6(P08)(只切定位环)。切刀 cut_motor_fence() 按各关节自己的局部坐标切(y -3..+40 / z 49.4~56.1,5 处定位环都落在局部 z 49.5~56,一对参数通吃;敞口方向恒为局部 +y)。**本组 16 颗螺钉的数量、型号、孔位 BCD55、相位、沉孔台阶深度、拧紧力矩一概不变** —— 被切掉的只是压盖外侧那圈围挡环墙,压盖本体与沉孔区一根没动,夹紧力与夹紧面积不变。"
|
||||
}
|
||||
{
|
||||
"id": "S01",
|
||||
"规格": "M2 x 10",
|
||||
"螺纹": "M2",
|
||||
"长度mm": 10,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 18,
|
||||
"位置": "J1~J6 输出毂:P04/P05/P06/P07/P08/P09 各 3 颗",
|
||||
"备注": "Ø2.8 通孔 + Ø5.6 沉孔,BCD 29(3 孔均布),旋入电机输出毂螺纹孔(深 6mm)"
|
||||
},
|
||||
{
|
||||
"id": "S02",
|
||||
"规格": "M3 x 10",
|
||||
"螺纹": "M3",
|
||||
"长度mm": 10,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 20,
|
||||
"位置": "P04/P05/P06/P07/P08 各 4 颗 -> 下级电机尾端面",
|
||||
"备注": "Ø2.8 通孔 + Ø5.5 沉孔(深 4mm),旋入电机尾端面 4x M3 螺纹径向槽(电机.STEP 实测:BCD55、相位 39.9°+90k,槽宽 2.5,径向可调约 ±1.25mm)。【2026-10-03 电机厚度公差】各台电机轴向长度实测差可达 2mm,本孔的承压面已按 MOTOR_TOL=2.0 从 s=-0.6 让空到 s=-2.6(armcore.MOTOR_TOL / arm_build.REAR_SEAT),所以这 4 颗螺钉**不负责把电机压死在某个长度上**,只负责夹紧垫片:装配时在电机尾端面与承压面之间叠 0~2.6mm 的 M3 平垫(标称电机约 0.6mm),厚度 T = 58.6 - 电机实际长度 L,让前端盖正好落到前端压盖面上(压盖背面与前端盖 0.0 面压)。螺钉杆长按最坏情况 T=2.6 选:M3x10 在 T=0.6 时咬合最深,T 每加 1mm 咬合减 1mm;咬合不足 3mm 时改用 M3x12。【2026-10-05 承压面让位腔】承压面段(z=-2.6..+1.0)用 SEAT_R=35.0(= 外壁 R35)圆腔掏出垫片位。**刀半径必须等于 R35**:只要小于 R35,刀半径与外壁之间那圈环墙就必然保留并相对承压面凸起,把电机尾端面围成\"一圈围挡\"(P08 实测 1536.9mm3)—— 这是取值的必然产物,不是残留。取满 R35 后承压面成为完整 R35 平圆盘,凸台与围挡一并消失。SEAT_TOP=+1.0 用于吃掉半包开口处的 0.052cm3 残片(取 0 时该残片脱空成独立碎块)。沉孔位置与深度完全不变(Ø5.5 深 4,z=-8..-4,与圆腔 z 区间不重叠,实测残余 0.00mm³),螺钉头仍坐在沉孔底、杆穿承压面进入电机螺纹槽,咬合量不变。承压环同时由 1.95mm 窄环变 4.75mm 完整圆环,受压面积 383->974mm²。"
|
||||
},
|
||||
{
|
||||
"id": "S03",
|
||||
"规格": "M3 x 16",
|
||||
"螺纹": "M3",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P03 后置重载法兰 -> M1 电机尾端面",
|
||||
"备注": "Ø3.4 通孔 + Ø6.5 圆柱沉孔(深 5mm,头沉入 1.5mm),孔位 BCD55、相位 39.9°+90k(电机.STEP 实测螺纹径向槽),轴向锁死防拉脱;旧 35.1×40.9 矩形孔距对角两颗偏出槽位 ~4.7mm,2026-10-02 修正;头型按用户已采购件用圆柱头内六角(沉孔本为圆柱形)"
|
||||
},
|
||||
{
|
||||
"id": "S04",
|
||||
"位置": "P03 前置锁紧凸台(Ø10 x4) -> M1 电机前端面",
|
||||
"备注": "Ø3.2 通孔 + Ø6.0 圆柱沉孔(深 2mm,头露出 1mm),孔位 BCD55 @17.8°+90k(电机.STEP 实测前端螺纹径向槽);头坐在沉孔底 x=9.5,M3x8 咬合电机前端面 3.5mm;2026-10-02 按用户已采购规格由 M3x10 沉头改回 M3x8 圆柱头",
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"螺纹": "M3",
|
||||
"规格": "M3 x 8",
|
||||
"长度mm": 8
|
||||
},
|
||||
{
|
||||
"id": "S05",
|
||||
"规格": "M4 x 16",
|
||||
"螺纹": "M4",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 8,
|
||||
"位置": "P01 立柱分段对锁:A-B 缝 4 颗 + B-C 缝 4 颗(每缝前后各 2 颗)",
|
||||
"备注": "统一 Ø3.9 直孔(母口壁与公榫壁同径,只有这一个孔,无过孔/沉孔/预埋):M4x16 从外面直接拧入自攻成型,螺纹吃在母口壁 3.6 + 公榫壁 6.9 共 10.5mm;孔位 x=-131/-93 非对称物理防反装"
|
||||
},
|
||||
{
|
||||
"id": "S06",
|
||||
"规格": "M4 x 16",
|
||||
"螺纹": "M4",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P09 末端工具法兰 -> 末端工具/夹爪",
|
||||
"备注": "Ø4.4 通孔(贯穿法兰)+ Ø7.0 圆柱沉孔(深 4mm,头与法兰底面齐平),R22 @0/90/180/270°(BCD44)-> 末端工具;头型按用户已采购件用圆柱头内六角。2026-10-02 由 R20 改 R22:原 R20 与 3xS01 输出螺钉 Ø5.6 螺丝刀通道中心距 6.06mm < 所需 6.30mm,0° 孔的 Ø7.0 沉孔壁被啃穿成月牙形(圆柱面 88mm² 裂成 45.7+35.4);相位差仅 8.6°,转相位躲不开,R22 后余量 1.66mm、边壁仍余 9.5mm;同日修正通孔:原 Ø3.7 比 M4 杆 Ø4.0 还细且只到 z=105,而 M4x16 杆需走到 z=113,杆尾 8mm 埋在实心料里(干涉 147.3mm³),改为 Ø4.4 贯穿"
|
||||
},
|
||||
{
|
||||
"id": "S07",
|
||||
"规格": "M5 x 25",
|
||||
"螺纹": "M5",
|
||||
"长度mm": 25,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P02 底座中核心 -> P01 立柱底部榫头",
|
||||
"备注": "Ø5.5 通孔 + Ø10 沉孔(深 6mm),非对称孔位防反装,轴向力由榫座面承载"
|
||||
},
|
||||
{
|
||||
"id": "S08",
|
||||
"规格": "M5 x 25",
|
||||
"螺纹": "M5",
|
||||
"长度mm": 25,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P02 前/后力臂 -> 中核心:前臂 2 颗 + 后臂 2 颗",
|
||||
"备注": "Ø5.5 通孔 + Ø10 沉孔;需另配 M5 六角螺母 4 枚(嵌入螺母沉槽)"
|
||||
},
|
||||
{
|
||||
"id": "S09",
|
||||
"规格": "M4 x 16",
|
||||
"螺纹": "M4",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 4,
|
||||
"位置": "P03 肩吊臂 -> P01_C 立柱顶面(从腔体上方往下拧)",
|
||||
"备注": "统一 Ø3.9 直孔(鞍座与立柱顶环同径,只有这一个孔,无过孔/沉孔/预埋):M4x16 从上方直接拧入自攻成型,穿鞍座 9mm 后吃进立柱顶环 7mm;载荷走 2403mm² 承压面,螺钉只防上抬"
|
||||
},
|
||||
{
|
||||
"id": "S11",
|
||||
"规格": "M4 x 16",
|
||||
"螺纹": "M4",
|
||||
"长度mm": 16,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 1,
|
||||
"位置": "P01_C 立柱后壁 -> P03 榫头(横向防脱锁紧)",
|
||||
"备注": "与 S05/S09/S06 同为 M4x16(全机 M4x16 合计 17 颗);Ø3.9 直孔贯穿 11mm 后壁 + 榫头同径:从后方直接拧入自攻成型,榫头内咬合 4.7mm"
|
||||
},
|
||||
{
|
||||
"id": "S10",
|
||||
"规格": "M6 x 35",
|
||||
"螺纹": "M6",
|
||||
"长度mm": 35,
|
||||
"头型": "外六角",
|
||||
"数量": 6,
|
||||
"位置": "底座 6 组 28x7 紧固腰槽 -> 工作台/桌面",
|
||||
"备注": "需另配 M6 螺母 + 平垫圈各 6(建议加弹垫防松)"
|
||||
},
|
||||
{
|
||||
"id": "S12",
|
||||
"规格": "M3 x 8",
|
||||
"螺纹": "M3",
|
||||
"长度mm": 8,
|
||||
"头型": "圆柱头内六角",
|
||||
"数量": 20,
|
||||
"位置": "P04/P05/P06/P07/P08 前端压盖 -> M2/M3/M4/M5/M6 电机前端盖(J2/J3/J4/J5/J6 各 4 颗)",
|
||||
"备注": "Ø3.4 通孔 + Ø6.0 圆柱沉孔(深 3.0,头 Ø5.5×3.0 全沉入),孔位 BCD55 @17.8°+90k—— 正是电机前端面 4 个 M3 螺纹径向槽的相位(与 S04 同一套,勿改);螺钉头面压在孔口台阶上(Y 轴关节 Y=158;J3 的 Z 轴版本 Z=387),压盖背面与电机前端盖外端面 0.0 间隙面压贴合—— 与后端安装板 S02 的 4xM3x10 一起把电机前后双向夹死,消掉大扭矩下电机绕 J 轴点头/翘起的倾向。J2(P04 夹 M2)/J4(P06 夹 M4)/J5(P07 夹 M5) 三处压盖几何完全相同;【2026-10-03 新增 J3】P05 夹 M3 是同一套配方的 Z 轴版本(roll 电机轴向 -Z,压盖占 Z384.0..389.0,背面 Z=389 与 M3 前端盖面压),沉孔台阶 Z=387,杆穿 2.0mm 压盖 + 3.5mm 端盖后旋入前端螺纹槽约 2.5mm。【2026-10-05d 只切敞口那一圈围挡】用户指出 M3 电机前端那圈围挡(P05 在 Z389.0..395.5 的 r30.25..35 前端定位环 + 骑在它上面的 R35 压盖外圈,Ø70 比电机 Ø63.6 凸出 3.2mm)需要删除。之前一版把整个前端(定位环 + 压盖 + 腔口下沿 389->395)都切了,电机前端没了支撑面 —— 过度;现已回退。现只切敞口(-Y)那一圈(盒切,Y 界限与 cut_open 一致),-Y 半圈从 Z=395.5 一路开到压盖背面 Z=389;背脊(+Y)侧整圈定位环保留,继续定位 M3 前端盖并作为R35 压盖唯一且足够强的支撑面(4.75mm 宽 x 0.5mm 熔接带)。压盖本体、Ø37 让位孔、4xM3x8 沉孔、腔口下沿 z_bot=389、P06 毂面 383.0 与直锁凸台 65.0 全部不动,本组 16 颗螺钉的孔位/相位/沉孔台阶/咬合量一概不变(M3 仍是后端板 4xM3x10 + 前端压盖 4xM3x8 双向面压)。不整圈削到 R31.8 的原因:那圈壁与 Loft 在 X=±35 处与 Ø70 柱面相切,整圈切完会脱空出 1.32mm3 碎块破坏单实体;且压盖根部熔接带会从 2.37mm2 缩到 0.78mm2,夹紧力会把压盖拉下来。开关 arm_model.FENCE_OPEN_CUT(2026-10-05e 起为全机 5 处共用)。。【2026-10-05e 推广到其余三处】上述\"只切敞口那半圈围挡\"的做法与 P05/M3 完全同源,已推广到 J2/M2(P04)、J4/M4(P06)、J5/M5(P07) 三处同样有 M2/M4/M5 前端压盖的电机,以及尚无前端压盖的 J6/M6(P08)(只切定位环)。切刀 cut_motor_fence() 按各关节自己的局部坐标切(y -3..+40 / z 49.4~56.1,5 处定位环都落在局部 z 49.5~56,一对参数通吃;敞口方向恒为局部 +y)。**本组 16 颗螺钉的数量、型号、孔位 BCD55、相位、沉孔台阶深度、拧紧力矩一概不变** —— 被切掉的只是压盖外侧那圈围挡环墙,压盖本体与沉孔区一根没动,夹紧力与夹紧面积不变。【2026-10-03 补齐 M6】P08 原先 roll_clamp=False,是五处电机腔里唯一只被后端板4xM3x10 单面锁死的;现按同一配方给 M6 加上前端压盖(轴向 -Z,占全局 Z115.0..120.5,沉孔台阶 Z=118,与 J3 的 Z 轴版本逐项同源),对侧 P09 毂面后移 CLAMP_BACKOFF=5.5让位(工具端点 Z_TIP=93 不变)。至此五处电机全部是「后端板 + 前端压盖」双向面压。"
|
||||
}
|
||||
]
|
||||
+38
-12
@@ -82,6 +82,24 @@ SEAT_R = R35_SEAT # 35.0 承压面段腔口 = 外壁
|
||||
SEAT_TOP = 1.0 # 圆腔顶端越过电机尾端面 1mm(吃掉开口处残片)
|
||||
BORE_Z0 = 5.5 # 座孔起点:R35 圆腔挖到此处,与 R30.15 座孔相接
|
||||
|
||||
# ---------------------------------------------------------------- 电机腔统一半径
|
||||
# 【2026-10-05f 接缝整改】腔内壁此前有 4 个互相打架的半径,逐层都能实测到台阶:
|
||||
# R35(承压面) -> R30.15(座孔) -> R30.25(前端定位) -> R30.50(前端盖让位)
|
||||
# 每一处单看都有理由,合在一起却让内壁变成「圆-台阶-圆-台阶-圆」,从腔里看全是横向接缝。
|
||||
#
|
||||
# 实测依据(scratch/probe_motor_env.py,剖切取 Rmax,112 层):
|
||||
# 电机本体从 z=0.43 到 z=55.9 **全程 R30.14~30.15 的正圆**,全程无任何台阶。
|
||||
# 即电机根本没有需要让位的形状变化 —— 那些台阶全是零件自己凭空造出来的。
|
||||
#
|
||||
# 故统一取 BAY_R = 30.50 = CB_R:
|
||||
# - 比电机实测最大半径 30.15 单边大 0.35(直径 0.7),打印件足以塞进去;
|
||||
# - 前端盖让位本来就是 30.50,沿用它可省掉一处台阶;
|
||||
# - 比 R30.15 座孔大 0.35,换来的是内壁从 z=-2.6 一直到前端只有一段正圆。
|
||||
# 代价:R30.15 座孔原本的单边 0.15 滑配变成 0.35,电机在座孔里的径向游隙变大。
|
||||
# 但电机前后已被后端板 4xM3x10 + 前端压盖 4xM3x8 双向面压夹死(见 motor_front_clamp),
|
||||
# 径向游隙不影响定位,倾倒自由度已归零。
|
||||
BAY_R = 30.50
|
||||
|
||||
PARTS = []
|
||||
CENTS = {}
|
||||
|
||||
@@ -279,15 +297,18 @@ class Joint:
|
||||
1. 方腔半宽 32.2 < 外壁 R35,在四个方位留下一圈 2.8mm 环形台肩;
|
||||
2. 方腔对角 45.5 > R35,四个角把外壁咬穿,形成四个凸角。
|
||||
两者叠加使内壁呈"圆—方—圆"三段,与同族零件的整体圆弧语言不一致。
|
||||
现改为**单一 R35 圆腔从承压面一直挖到座孔起点 BORE_Z0(=5.5)**,
|
||||
与其上的 R30.15 座孔正交相接,内壁成为两段同心正圆(仅一处正常台阶),
|
||||
承压面到外壁之间再无任何凸起或方角。P04 走自己那套刀具,本来就无方腔。
|
||||
|
||||
【2026-10-05f 承压面段也并进主腔,全腔只剩一段正圆】
|
||||
去掉方腔后内壁还剩两段:R35(承压面段 z=-2.6..5.5)+ R30.15 座孔(z>5.5),
|
||||
接缝处仍是一道 4.85mm 深的横向台阶。加上前端定位 R30.25、前端盖让位 R30.50,
|
||||
实测内壁依次是 35.0 / 30.5 / 30.2 / 30.5 / 30.2 —— 四道台阶(scratch/bay_step_profile.py)。
|
||||
根因是**电机根本没有那么多形状变化**:实测电机 STEP 全程 R30.15 正圆,
|
||||
那些半径全是零件自己造的。
|
||||
现改为**单一 BAY_R 圆柱从承压面一直挖到前端盖外**,
|
||||
SEAT_R / BORE_R / CB_R 三把刀合并成一把,承压面 -> 前端内壁全程一段正圆,
|
||||
接缝归零。承压面仍是 R35 的完整平圆盘(SEAT_TOP 段保留,只是不再往上延伸)。
|
||||
"""
|
||||
c = [cyl(BORE_R, BORE_Z0, COVER_Z - 3.5), cyl(CB_R, COVER_Z - 3.5, COVER_Z + front_pad),
|
||||
# 承压面段 + 尾部过渡段:SEAT_R(=R35 外壁) 圆腔,从承压面一路挖到座孔起点。
|
||||
# 取满 R35 才能让承压面与外壁齐平成一个平面;取小于 R35 就会留下
|
||||
# 一圈凸起的"围挡"(见 docstring)。
|
||||
cyl(SEAT_R, -REAR_SEAT, BORE_Z0)]
|
||||
c = [cyl(BAY_R, -REAR_SEAT, COVER_Z + front_pad)]
|
||||
return shape.cut(*[self.L(s) for s in c])
|
||||
|
||||
def rear_mount_holes(self, shape, t_plate=8.0, hole_d=2.8, cb_d=5.5, cb_depth=4.0):
|
||||
@@ -309,10 +330,15 @@ class Joint:
|
||||
cuts.append(self.L(cb))
|
||||
return shape.cut(*cuts)
|
||||
|
||||
def front_collar_pocket(self, shape, r_bore=30.25, z0=50.0, z1=56.5):
|
||||
"""Cut front locating collar pocket for the motor front rim."""
|
||||
p = cyl(r_bore, z0, z1)
|
||||
return shape.cut(self.L(p))
|
||||
# 【2026-10-03i】front_collar_pocket 已整段删除。
|
||||
# 它切的是 cyl(r_bore, 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 两张面,
|
||||
# P06 同样在 50.0 处裂开,而没调它的 P04/P08 腔壁是完整一张。
|
||||
# 这条棱在着色渲染里就是横穿腔内的一道线 —— 属于纯自找的接缝。
|
||||
# 前端定位环本身(前段 r30.5..35 的 6mm 环墙)不受影响:
|
||||
# 它由各零件自己的 lower_block / front_* 圆柱构成,不再靠这刀掏内孔。
|
||||
|
||||
def pinch(self, shape, fracs=(0.26, 0.58, 0.86), r_out=48.0, n=2):
|
||||
"""Radial M3 pinch screws through the boss wall onto the housing."""
|
||||
|
||||
+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 之后切)
|
||||
#
|
||||
|
||||
+20
-4
@@ -50,12 +50,28 @@ def rebuild_viewer():
|
||||
.replace("/*__IKGLUE__*/", ik_glue))
|
||||
assert "/*__" not in out, [l for l in out.split("\n") if "/*__" in l][:3]
|
||||
dst = WEB + "/机器人手臂3D查看器.html"
|
||||
io.open(dst, "w", encoding="utf-8").write(out)
|
||||
io.open(WEB + "/index.html", "w", encoding="utf-8").write(out)
|
||||
io.open(WORKSPACE + "/机器人手臂3D查看器.html", "w", encoding="utf-8").write(out)
|
||||
# 【2026-10-06】三个副本逐个写、逐个报错,不要一把梭。
|
||||
# 原来三行连写,任一份被浏览器独占(Windows 上打开中的 html 是独占锁)就抛异常,
|
||||
# 而调用方 arm_model.py 把整个 rebuild_viewer() 包在 try/except 里,
|
||||
# 于是只写成功第一份、另外两份静默停在旧版本 —— 表现为"代码改了但网页没变"。
|
||||
# 实测就是这个坑:18:52 那次 dst 是新的,web/index.html 和根目录那份还停在 18:12。
|
||||
ok, failed = True, []
|
||||
for path in (dst, WEB + "/index.html", WORKSPACE + "/机器人手臂3D查看器.html"):
|
||||
try:
|
||||
io.open(path, "w", encoding="utf-8").write(out)
|
||||
except Exception as e:
|
||||
ok = False
|
||||
failed.append("%s (%s)" % (path, e))
|
||||
sz_mb = os.path.getsize(dst) / 1e6
|
||||
print(f" 完成 ({sz_mb:.2f} MB, 耗时: {time.time()-t0:.2f}s) ✓", flush=True)
|
||||
print(f"-> 3D查看器已更新至: {dst} 与 根目录/机器人手臂3D查看器.html\n", flush=True)
|
||||
if failed:
|
||||
print("!! 以下副本写入失败(多半是浏览器正打开着该文件,Windows 独占锁):", flush=True)
|
||||
for f in failed:
|
||||
print(" - %s" % f, flush=True)
|
||||
print(" 关掉对应页面后重跑 python src/build_viewer.py 即可。\n", flush=True)
|
||||
else:
|
||||
print(f"-> 3D查看器已更新至: {dst}、{WEB}/index.html 与 根目录/机器人手臂3D查看器.html\n",
|
||||
flush=True)
|
||||
|
||||
if __name__ == "__main__":
|
||||
rebuild_viewer()
|
||||
|
||||
+6
-3
@@ -29,7 +29,8 @@ docs/screws.json 是紧固件清单的唯一事实源(规格 / 长度 / 数量
|
||||
沿 +X Ø3.9 直孔穿 11mm 后壁 + 榫头同径,直接拧入自攻(榫头内咬合 4.7mm)
|
||||
S10 底座腰槽 6xM6 :3 件底座的 6 组 28x7 通腰槽中心(-97.5/120/-215 × 53/203/58/198),
|
||||
头面 z=22(底座顶面;腰槽为通槽无沉孔,桌面紧固螺栓头必然外露)
|
||||
S12 电机前端压盖 4xM3x8:J2(P04 夹 M2) / J3(P05 夹 M3) / J4(P06 夹 M4) / J5(P07 夹 M5) 各 4 颗。
|
||||
S12 电机前端压盖 4xM3x8:J2(P04 夹 M2) / J3(P05 夹 M3) / J4(P06 夹 M4) / J5(P07 夹 M5)
|
||||
/ J6(P08 夹 M6) 各 4 颗。
|
||||
配方唯一事实源 = arm_model.motor_front_clamp(R35、4xM3x8 BCD55 @17.8°+90k、Ø6.0 沉孔
|
||||
深 3.0、沉孔台阶 = 前端盖外端面 +2.0mm、压盖背面 0.0 面压);J3 是同一套配方的 Z 轴版本
|
||||
(台阶落在 Z=(z_r-56)-2=387),半径/相位直接取 arm_model 的 CLAMP_BCD/CLAMP_CLOCK。
|
||||
@@ -217,7 +218,8 @@ def instances(m2_bcd, m2_clock):
|
||||
"P03 后置法兰", "BCD55 @39.9° 螺纹槽 -> M1 尾端面"))
|
||||
|
||||
# S12 电机前端压盖 -> 电机前端盖:J2(P04 夹 M2) / J3(P05 夹 M3) / J4(P06 夹 M4) /
|
||||
# J5(P07 夹 M5) 各 4 颗。J2/J4/J5 三处压盖几何完全相同,J3 是同一套配方的 Z 轴版本。
|
||||
# J5(P07 夹 M5) / J6(P08 夹 M6) 各 4 颗。J2/J4/J5 三处压盖几何完全相同,
|
||||
# J3/J6 是同一套配方的 Z 轴版本(M6 压盖 2026-10-03 补齐,见 p_wrist_bracket)。
|
||||
# R35、沉孔台阶都在"前端盖外端面 + 2.0mm":Y 轴是 Y_COVER+2=158,Z 轴是 (z_r-56)-2=387。
|
||||
# 4xM3x8 @BCD55 17.8°+90k、沉孔 Ø6.0 深 3.0、压盖背面与前端盖 0.0 面压,
|
||||
# 相位与 S04(P03→M1 前端锁紧)同一套约定,全机 BCD55 孔位一致。
|
||||
@@ -230,7 +232,8 @@ def instances(m2_bcd, m2_clock):
|
||||
# (布尔校验:M3 圆柱头沉在 Ø6.0 沉孔里却与压盖实体重叠 71.27 mm^3,装不进去)。
|
||||
# 故此处显式用全局平面复刻成孔公式,与建模脚本一一对应。
|
||||
for tag, prox in (("J2", "P04 肩叉"), ("J3", "P05 大臂旋转座"),
|
||||
("J4", "P06 大臂骨架"), ("J5", "P07 小臂骨架")):
|
||||
("J4", "P06 大臂骨架"), ("J5", "P07 小臂骨架"),
|
||||
("J6", "P08 腕偏转座")):
|
||||
dt = frame(tag)[1]
|
||||
rear = tuple(HL.AXIS[tag]["rear"])
|
||||
roll = HL.AXIS[tag]["d"][1] == 0 # J3/J6 是 roll 电机(轴向 -Z)
|
||||
|
||||
+121
-121
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+121
-121
File diff suppressed because one or more lines are too long
+121
-121
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user