feat: P07小臂骨架顶板整条加高19mm补强+前后外缘R3圆角,gusset弧R28->R14随顶板联动相切融入;重算全关节行程J4反向-121->-111,同步重建模型数据与查看器
This commit is contained in:
+34
-43
@@ -133,8 +133,8 @@ def p_chest():
|
||||
|
||||
def split_p01_poka_yoke(p01):
|
||||
"""拆分 P01 为 A/B/C 三段(严格适配 200x200mm 打印机,竖直免支撑打印):
|
||||
带 16mm 阶梯互锁榫卯(外套筒壁 3.6 + 公榫壁 7.1,内腔收窄 51->44 换取双厚壁,
|
||||
单边配合间隙 0.3)、非对称 M4 横向对锁穿钉孔(物理防反装防呆)、以及本体 3D 凹刻朝向标识。
|
||||
带 16mm 阶梯互锁榫卯(外套筒壁 3.6 + 公榫壁 6.9,内腔收窄 51->44 换取双厚壁,
|
||||
单边配合间隙 0.5)、非对称 M4 横向对锁穿钉孔(物理防反装防呆)、以及本体 3D 凹刻朝向标识。
|
||||
"""
|
||||
z_bot = 22.0
|
||||
z_s1 = 172.0
|
||||
@@ -149,7 +149,7 @@ def split_p01_poka_yoke(p01):
|
||||
cut_above_s1 = bx(X_COL - 50.0, X_COL + 50.0, Y_COL - 50.0, Y_COL + 50.0, z_s1, z_top + 10.0)
|
||||
p01_a_base = p01.cut(cut_above_s1)
|
||||
tongue1_outer = (cq.Workplane("XY", origin=(X_COL, Y_COL, z_s1))
|
||||
.rect(58.2, 58.2).extrude(h_lap)
|
||||
.rect(57.8, 57.8).extrude(h_lap)
|
||||
.edges("|Z").fillet(3.4).edges(">Z").chamfer(1.5)).val()
|
||||
tongue1_cav = (cq.Workplane("XY", origin=(X_COL, Y_COL, z_s1 - 1.0))
|
||||
.rect(44.0, 44.0).extrude(h_lap + 2.0)).val()
|
||||
@@ -176,11 +176,11 @@ def split_p01_poka_yoke(p01):
|
||||
cut_above_s2 = bx(X_COL - 50.0, X_COL + 50.0, Y_COL - 50.0, Y_COL + 50.0, z_s2, z_top + 10.0)
|
||||
p01_b_base = p01.cut(cut_below_s1).cut(cut_above_s2)
|
||||
pocket1 = (cq.Workplane("XY", origin=(X_COL, Y_COL, z_s1 - 0.1))
|
||||
.rect(58.8, 58.8).extrude(h_lap + 0.6).edges("|Z").fillet(3.7)).val()
|
||||
.rect(58.8, 58.8).extrude(h_lap + 0.6).edges("|Z").fillet(3.9)).val()
|
||||
p01_b_base = p01_b_base.cut(pocket1)
|
||||
|
||||
tongue2_outer = (cq.Workplane("XY", origin=(X_COL, Y_COL, z_s2))
|
||||
.rect(58.2, 58.2).extrude(h_lap)
|
||||
.rect(57.8, 57.8).extrude(h_lap)
|
||||
.edges("|Z").fillet(3.4).edges(">Z").chamfer(1.5)).val()
|
||||
tongue2_cav = (cq.Workplane("XY", origin=(X_COL, Y_COL, z_s2 - 1.0))
|
||||
.rect(44.0, 44.0).extrude(h_lap + 2.0)).val()
|
||||
@@ -204,7 +204,7 @@ def split_p01_poka_yoke(p01):
|
||||
cut_below_s2 = bx(X_COL - 50.0, X_COL + 50.0, Y_COL - 50.0, Y_COL + 50.0, z_bot - 14.0, z_s2)
|
||||
p01_c_base = p01.cut(cut_below_s2)
|
||||
pocket2 = (cq.Workplane("XY", origin=(X_COL, Y_COL, z_s2 - 0.1))
|
||||
.rect(58.8, 58.8).extrude(h_lap + 0.6).edges("|Z").fillet(3.7)).val()
|
||||
.rect(58.8, 58.8).extrude(h_lap + 0.6).edges("|Z").fillet(3.9)).val()
|
||||
p01_c = p01_c_base.cut(pocket2)
|
||||
for xx in xx_bolts:
|
||||
p01_c = p01_c.cut(Ycyl(2.2, Y_COL - 40.0, Y_COL + 40.0, xx, z_bolt2))
|
||||
@@ -772,24 +772,32 @@ def make_pitch_to_roll_bracket(j_pitch, j_roll, z_pitch, z_r, name="bracket"):
|
||||
s = s.fuse(disc)
|
||||
|
||||
# 3. 前侧从底端 Ø70mm 圆柱到顶端法兰的有机相切平滑渐变过渡体 (Loft Morph)
|
||||
# 后缘不取恒定 v=-5(那会在 y=123 处相对 R35 柱面 (x=53.14) 外凸 0.36mm,
|
||||
# 形成一条 z 向竖鳍,并在顶端被 cut_top_solid 切出 z=452 硬台面):
|
||||
# 改为从柱面 (v=0, y=128) 平滑长到顶壁 (v=+29, y=157):
|
||||
# - 低端后角落在 R35 柱面上,与立柱共面零外凸,底端裙边不再有拼接竖筋;
|
||||
# - 高端后角与 top_fill 矩形 (y 157..174) 齐平,z=452 台面与 R2 小圆角
|
||||
# 不再需要,立柱到竖直壁完全由放样曲面相切过渡。
|
||||
Z_top = z_pitch - 35.0
|
||||
z_start = z_bot
|
||||
N = 16
|
||||
N = 24
|
||||
wp = cq.Workplane("XY")
|
||||
for i in range(N + 1):
|
||||
t = i / float(N)
|
||||
z_curr = z_start + t * (Z_top - z_start)
|
||||
st = 3.0 * (t**2) - 2.0 * (t**3)
|
||||
sb = 6.0 * (t**5) - 15.0 * (t**4) + 10.0 * (t**3) # 后缘 smoothstep(两端切线水平)
|
||||
y_center = y_cyl_max + st * (y_out - y_cyl_max)
|
||||
y_side = HL.Y_AXIS + st * (y_out - HL.Y_AXIS)
|
||||
v_c = y_center - HL.Y_AXIS
|
||||
v_s = y_side - HL.Y_AXIS
|
||||
v_b = sb * (y_hub_in - HL.Y_AXIS) # 0 (柱面) -> +29 (顶壁)
|
||||
v_mid = max(v_c, v_s + 0.02)
|
||||
w = (cq.Workplane("XY", origin=(HL.X_ARM, HL.Y_AXIS, z_curr))
|
||||
.moveTo(-35.0, v_s)
|
||||
.threePointArc((0.0, v_mid), (35.0, v_s))
|
||||
.lineTo(35.0, -5.0)
|
||||
.lineTo(-35.0, -5.0)
|
||||
.lineTo(35.0, v_b)
|
||||
.lineTo(-35.0, v_b)
|
||||
.close())
|
||||
wp = wp.add(w)
|
||||
|
||||
@@ -951,6 +959,7 @@ def p_forearm_bone(j4, j5, half=None):
|
||||
y_front = Y_COVER - 0.5 # 155.5
|
||||
y_rear = Y_REAR - 8.0 # 92.0
|
||||
z_top_housing = Z_WR + 39.0 # 261.0 (顶面加厚 4.0mm,消除过薄破面问题)
|
||||
z_roof_top = z_top_housing + 19.0 # 280.0 (顶板整条加高 19mm,用户确认方案4)
|
||||
|
||||
# 1. J5 电机前后安装环
|
||||
collar_front = Ycyl(35.0, HL.Y_COVER - 6.0, HL.Y_COVER - 0.5, X_ARM, Z_WR)
|
||||
@@ -964,8 +973,11 @@ def p_forearm_bone(j4, j5, half=None):
|
||||
# 3. M5 电机壳体水平顶部顶板 (Z: Z_WR..z_top_housing, Y: y_rear..y_front)
|
||||
roof_w = (cq.Workplane("YZ", origin=(X_ARM, 0, 0))
|
||||
.moveTo(y_rear, Z_WR)
|
||||
.lineTo(y_rear, z_top_housing)
|
||||
.lineTo(y_front, z_top_housing)
|
||||
.lineTo(y_rear, z_roof_top)
|
||||
.lineTo(y_front - 3.0, z_roof_top)
|
||||
.threePointArc((y_front - 3.0 + 3.0 * math.cos(math.pi / 4),
|
||||
z_roof_top - 3.0 + 3.0 * math.sin(math.pi / 4)),
|
||||
(y_front, z_roof_top - 3.0))
|
||||
.lineTo(y_front, Z_WR)
|
||||
.close()
|
||||
.extrude(35.0, both=True))
|
||||
@@ -983,16 +995,17 @@ def p_forearm_bone(j4, j5, half=None):
|
||||
|
||||
# 5. L型内侧圆弧加强过渡(Circular Arc Gusset,用户要求"改成圆弧而不是折角,消掉悬空小块")
|
||||
# 彻底取代直角折角与直斜线折角,采用与顶面和立柱双相切的平滑内凹大圆弧 (R=28.0mm)
|
||||
# 起点在顶板平整面 (y_arc_start, z_top_housing),精确相切至立柱内侧面 (y_hub_in, z_arc_end)
|
||||
# 起点在顶板平整面 (y_arc_start, z_roof_top),精确相切至立柱内侧面 (y_hub_in, z_arc_end)
|
||||
# 严控全域 Z >= z_top_housing,彻底消除侵入下方旋转副的悬空小方块与多余突起!
|
||||
R_arc = 28.0
|
||||
# 注:顶板整条加高19mm(z_roof_top=280)后,R28改R14使弧仍与顶板面光滑相切,不出现折角
|
||||
R_arc = 14.0 # 随顶板加高联动重定:相切起点(144.5,280)->终点(158.5,294),避开P06环底z=297留3mm
|
||||
y_arc_start = y_hub_in - R_arc
|
||||
z_arc_end = z_top_housing + R_arc
|
||||
z_arc_end = z_roof_top + R_arc
|
||||
p_mid_arc = (y_arc_start + R_arc * math.cos(math.pi / 4),
|
||||
z_arc_end - R_arc * math.sin(math.pi / 4))
|
||||
|
||||
gusset_w = (cq.Workplane("YZ", origin=(X_ARM, 0, 0))
|
||||
.moveTo(y_arc_start, z_top_housing)
|
||||
.moveTo(y_arc_start, z_roof_top)
|
||||
.threePointArc(p_mid_arc, (y_hub_in, z_arc_end))
|
||||
.lineTo(y_out, z_arc_end)
|
||||
.lineTo(y_out, z_top_housing)
|
||||
@@ -1033,37 +1046,15 @@ def p_forearm_bone(j4, j5, half=None):
|
||||
|
||||
# ========== 关键圆角优化 ==========
|
||||
try:
|
||||
# 后侧顶板外边缘倒角(平滑消除水平顶板与后部垂直端面交汇处的 90° 尖角)
|
||||
# 后侧顶板外边缘圆角(平滑消除水平顶板与后部垂直端面交汇处的 90° 尖角,用户要求倒角改圆角)
|
||||
wp_s = cq.Workplane(obj=s)
|
||||
sel_rear = cq.selectors.BoxSelector(
|
||||
(X_ARM - 40, y_rear - 1.0, z_top_housing - 1.0),
|
||||
(X_ARM + 40, y_rear + 1.0, z_top_housing + 1.0)
|
||||
(X_ARM - 40, y_rear - 1.0, z_roof_top - 1.0),
|
||||
(X_ARM + 40, y_rear + 1.0, z_roof_top + 1.0)
|
||||
)
|
||||
s = wp_s.edges(sel_rear).chamfer(CHAMFER_EDGE).val()
|
||||
s = wp_s.edges(sel_rear).fillet(FILLET_SMALL).val()
|
||||
except Exception as e:
|
||||
print(f"P07 顶板后边缘倒角异常: {e}")
|
||||
|
||||
try:
|
||||
# 圆润化 J4 圆盘外沿
|
||||
wp_s = cq.Workplane(obj=s)
|
||||
sel_disc = cq.selectors.BoxSelector(
|
||||
(X_ARM - 40, y_out - 2, Z_EL - 40),
|
||||
(X_ARM + 40, y_out + 2, Z_EL + 40)
|
||||
)
|
||||
s = wp_s.edges(sel_disc).fillet(FILLET_SMALL).val()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
# 圆润化垂直立柱外侧边棱
|
||||
wp_s = cq.Workplane(obj=s)
|
||||
sel_leg = cq.selectors.BoxSelector(
|
||||
(X_ARM - 37, y_out - 2, z_top_housing),
|
||||
(X_ARM + 37, y_out + 2, Z_EL + 40)
|
||||
)
|
||||
s = wp_s.edges(sel_leg).fillet(FILLET_SMALL).val()
|
||||
except Exception:
|
||||
pass
|
||||
print(f"P07 顶板后边缘圆角异常: {e}")
|
||||
|
||||
return s
|
||||
|
||||
@@ -1185,7 +1176,7 @@ def build():
|
||||
("P06_大臂骨架", "大臂骨架", lambda: p_humerus_bone(j3, j4), 0x0d9488,
|
||||
"Loft有机过渡版:借鉴P05圆弧变方形放样算法,顶端Ø70正圆与J3平齐无台阶,底端渐变融入M4抱紧套筒与壳体,单实体0干涉"),
|
||||
("P07_小臂骨架", "小臂骨架", lambda: p_forearm_bone(j4, j5, None), 0x7c3aed,
|
||||
"V2 L型结构:+Y侧背脊立柱避让大臂骨架,过渡区采用与顶板和立柱双相切的R=28mm平滑内凹大圆弧,彻底消除直斜线折角与悬空阶梯小块,顶板前后外缘2mm倒角改R3圆角,J4圆盘外沿与立柱外棱不倒圆保持原始尖角,下方M5电机半包散热,俯仰大范围自由运动零干涉"),
|
||||
"V2 L型结构:+Y侧背脊立柱避让大臂骨架,过渡区采用与顶板和立柱双相切的R=28mm平滑内凹大圆弧,彻底消除直斜线折角与悬空阶梯小块,顶板前后外缘2mm倒角改R3圆角,顶板整条加高19mm(z261->280)加强连接且gusset弧R28->R14重定相切融入,J4圆盘外沿与立柱外棱不倒圆保持原始尖角,下方M5电机半包散热,俯仰大范围自由运动零干涉"),
|
||||
("P08_腕偏转座", "腕部转接座", lambda: p_wrist_bracket(j5, j6), 0xd97706,
|
||||
"V2圆角:Loft外轮廓R=10mm,L型转角内部2mm倒角,彻底清除立壁保证J5全角度0干涉"),
|
||||
("P09_工具法兰", "末端工具法兰", lambda: p_tool_flange(j6), 0xdc2626,
|
||||
|
||||
Reference in New Issue
Block a user