开源改变世界

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528

推推 grbl 3年前 (2023-01-30) 162次浏览
关闭
2个任务
Strahlensauger 打开了这个问题 2022 年 1 月 24 日 · 8条评论
关闭
2个任务

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的,#1528

Strahlensauger 打开了这个问题 2022 年 1 月 24 日 · 8条评论

注释

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528

使用 FreeCAD 创建的 gcode 由具有大 I 和 J 参数的 G2/G3 行组成,

这是我期望发生的事情:

用 linuxcnc 加载 gcode 应该显示绘图的形状(矮门)

这是发生了什么:

linuxcnc显示巨大的圆圈

在此之前它工作正常:

(如果在对硬件或软件进行特定更改后行为发生了变化
,请描述您认为负责的更改。例如,“
从 LinuxCNC 2.7.3 升级到 2.7.4 后”)

有关我的硬件和软件的信息:

  • 我正在使用这个 Linux 发行版和版本(通常用 表示lsb_release -a):

  • 没有可用的 LSB 模块。
    发行商 ID:Debian
    描述:Debian GNU/Linux 10 (buster)
    版本:10
    代号:buster

  • 我正在使用这个内核版本(由 显示uname -a):

  • Linux cnc 4.19.0-18-rt-amd64使用 Tcl_SetResult 和 Tcl_GetStringResult  #1 SMP PREEMPT RT Debian 4.19.208-1 (2021-09-29) x86_64 GNU/Linux

  • 我在跑步 …

    • [ x] 来自 linuxcnc.org 的二进制版本(包括 buildbot.linuxcnc.org)
    • 我自己构建的二进制文件
    • 来自 linuxcnc.org 之外的其他来源的二进制版本
  • 我正在使用这个 LinuxCNC 版本(显示在包管理器中,或者对于 git 版本,scripts/get-version-from-git):

  • 我正在使用此用户界面 (GUI)(例如 AXIS、Touchy、gmoccapy 等):

  • 我正在使用这个接口硬件供应商和芯片组(例如,并行端口、以太网端口、FPGA 卡):

  • 台面 7i76e

Wichteltuer.txt

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528
合作者

这是相当病态的 G 代码,但 LinuxCNC 似乎确实错误地解释了它。
(例如,弧长约 5 毫米,半径为 7 公里……)
它应该是一条近乎笔直的短线,但被解释为略大于一整圈。

我的猜测是,两端相对于圆弧半径靠得太近,以至于解释器决定做一个完整的圆(因为它正常 ix 起点和终点是相同的)

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528
贡献者
德罗贝尔 评论了 2022 年 1 月 25 日  

我不确定这有什么用,但是当我将文件内容复制粘贴到ncviewer (在线 G 代码查看器)时 – 它看起来很合理:

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528
:
Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528
合作者

是的,G 代码在技术上没有任何问题。

简单测试用例

G0 X29.976 Y115.144 Z-3.000
G2 X29.078 Y120.080 Z-3.000 I6253343.722 J1136978.869 F1200.000
M2

我认为问题出在这里,代码决定是否要一个完整的圆圈:
https
://github.com/LinuxCNC/linuxcnc/blob/master/src/emc/task/emccanon.cc#L1662 而它确实如此似乎是基于弧角(为什么?它应该只是检查起点和终点是否(双)完全相同)极限是 1e-12 并且根据我的计算,我提取的代码有一个内角4.4E-6

打开调试日志记录,似乎问题没有发生在 emccanon.cc 中

line = 2
first_end = 29.078000, second_end = 120.080000
start = 29.976000 115.144000 -3.000000
end = 29.078000 120.080000 -3.000000
center = 6253373.698000 1137094.013000 -3.000000
active plane is 1, shift_ind is 0
normal = 0.000000 0.000000 1.000000
plane_x = 1.000000 0.000000 0.000000
plane_y = 0.000000 1.000000 0.000000
end = 29.078000 120.080000 -3.000000
endpt = 29.078000 120.080000 -3.000000
center = 6253373.698000 1137094.013000 -3.000000
normal = 0.000000 0.000000 1.000000
planar end = -6253344.620000 -1136973.933000
planar start = -6253343.722000 -1136978.869000
rotation = -1
radius = 6355865.688797
raw values: theta_end = -2.96173881573440667e+00, theta_start = -2.96173802638150852e+00
theta_end = -2.961739, theta_start = -2.961738
angle = -0.000001
full turns = 0
full_angle = -7.89352898156181482e-07
axis1 = 0, axis2 = 1
a_max_axes = 508.000000
v_max_radial = 52879.157706
v_max_planar = 30.480000
v_max = 30.480000
current F = 20.000000
vel = 20.000000
v_max = 30.480000
a_max = 508.000000

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528
合作者
安迪普 评论了 2022 年 1 月 26 日  

看起来这里有两个错误….

  1. 预览错了
  2. 议案是错误的。错的少,但错了。

首先,我稍微修改了代码,使到端点的半径完全相同(在原始 G 代码中有阴影)
[代码]
G0 X29.976 Y115.144 Z-3.000
G2 X29.078 Y120.080 Z-3.000 I6253343.722 J1137665.164 F1200.000
m2[/代码]

然后我运行代码,工具点飞出界外,但实际上确实在途中经过了终点。
预览实际上错过了终点。红色是刀具路径,青色是 G2 的预览图。

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528
合作者
安迪普 评论了 2022 年 1 月 26 日  

简化代码:

G0 X1 Y -1
G2 X1 Y 1 I 10000000 J 0 F1200
m2

并试验这些数字。我 1999999 可以,我 2000000 不行。

在调试中:

line = 3
first_end = 1.000000, second_end = 1.000000
start = 1.000000 -1.000000 -3.000000
end = 1.000000 1.000000 -3.000000
center = 1000001.000000 -1.000000 -3.000000
active plane is 1, shift_ind is 0
normal = 0.000000 0.000000 1.000000
plane_x = 1.000000 0.000000 0.000000
plane_y = 0.000000 1.000000 0.000000
end = 1.000000 1.000000 -3.000000
endpt = 1.000000 1.000000 -3.000000
center = 1000001.000000 -1.000000 -3.000000
normal = 0.000000 0.000000 1.000000
planar end = -1000000.000000 2.000000
planar start = -1000000.000000 0.000000
rotation = -1
radius = 1000000.000000
raw values: theta_end = 3.14159065358979328e+00, theta_start = 3.14159265358979312e+00
theta_end = 3.141591, theta_start = 3.141593
angle = -0.000002
full turns = 0
full_angle = -1.99999999983546672e-06
axis1 = 0, axis2 = 1
a_max_axes = 508.000000
v_max_radial = 20974.768297
v_max_planar = 30.480000
v_max = 30.480000
current F = 20.000000
vel = 20.000000
v_max = 30.480000
a_max = 508.000000

可以

然而

line = 3
first_end = 1.000000, second_end = 1.000000
start = 1.000000 -1.000000 -3.000000
end = 1.000000 1.000000 -3.000000
center = 10000001.000000 -1.000000 -3.000000
active plane is 1, shift_ind is 0
normal = 0.000000 0.000000 1.000000
plane_x = 1.000000 0.000000 0.000000
plane_y = 0.000000 1.000000 0.000000
end = 1.000000 1.000000 -3.000000
endpt = 1.000000 1.000000 -3.000000
center = 10000001.000000 -1.000000 -3.000000
normal = 0.000000 0.000000 1.000000
planar end = -10000000.000000 2.000000
planar start = -10000000.000000 0.000000
rotation = -1
radius = 10000000.000000
raw values: theta_end = 3.14159245358979344e+00, theta_start = 3.14159265358979312e+00
theta_end = 3.141592, theta_start = 3.141593
angle = -0.000000
full turns = 0
full_angle = -1.99999999672684226e-07
axis1 = 0, axis2 = 1
a_max_axes = 508.000000
v_max_radial = 66328.041214
v_max_planar = 30.480000
v_max = 30.480000
current F = 20.000000
vel = 20.000000
v_max = 30.480000
a_max = 507.999999

不好(我承认我期待看到阈值 < -2E-7

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528
合作者

更新:我在运动层中对此进行了修复(即机器现在可以正确移动)并且我正在处理预览层。

与此同时,我只是想提出一种通过编辑 G 代码将问题弧线转换为直线的解决方法,它们几乎是直的,不会产生明显的差异。
您可以单击预览中的圆圈以查看它们是由哪一行 G 代码生成的,然后将 G2 / G3 更改为 G1 并删除 I / J 编号。

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528
合作者

我想我已经修复了它,但它涉及搞乱 LinuxCNC 中最关键的代码(我猜仅次于直接馈送)所以它需要大量验证。
Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528

Linuxcnc 解释带有大参数 I 和 j 的 Freecad 后处理器 Gcode 行是错误的, #1528
合作者