开源改变世界!!

单向雕刻产生错误的结果 #295

推推 grbl 2年前 (2023-01-26) 246次浏览
关闭
arkypita 打开了这个问题 2018 年 3 月 10 日 · 13条评论
关闭

单向雕刻产生错误的结果#295

arkypita 打开了这个问题 2018 年 3 月 10 日 · 13条评论

注释

单向雕刻产生错误的结果 #295
所有者

当与单向雕刻标志一起使用时,我发现 vectorize+filling 存在问题:

单向雕刻产生错误的结果 #295

具有相同参数的相同图像,在没有单向标志的情况下创建会产生正确的输出:

单向雕刻产生错误的结果 #295

单向雕刻产生错误的结果 #295 arkypita 添加了 漏洞 标签 2018 年 3 月 10 日
单向雕刻产生错误的结果 #295

首先,祝贺并感谢您的出色工作。在过去,它为我提供了极大的乐趣和满足感,在此期间我建造了一个 diy 激光钻机。您的软件是迄今为止我发现的最好的软件。干杯。

然而…….

我同意您的发现,即事物的渲染方面似乎存在错误。我已经想了几个月了。使用为单向雕刻配置的程序,
会发生您描述的错误,不仅填充矢量,线到线跟踪也会受到影响。据我所知,这个问题影响了自引入单向选项以来的所有版本。非常遗憾,因为我非常依赖单向功能,因为我的 DIY 钻机的反弹难以忍受!(自私,我知道)。

双向:
单向雕刻产生错误的结果 #295

单向:
单向雕刻产生错误的结果 #295

单向雕刻产生错误的结果 #295

单向雕刻产生错误的结果 #295

希望您能抽出时间对此问题进行一些调查。

再次感谢。

单向雕刻产生错误的结果 #295
所有者作者
阿尔基皮塔 评论了 2018 年 3 月 17 日  

我已经找到了原因,但解决方案并不容易实施。

在第一遍中,我寻找黑色和像素序列,生成“段”,这些“段”是具有相同灰色调的连续像素线及其长度(整数,连续像素数)。

在第二遍中,我将 gcode 中的所有段都按比例缩放像素数转换为实数 mm,生成具有固定精度(3 位小数)的双精度数,这必然会引入舍入误差。

当在双向雕刻段中在两个方向上产生时,这平衡了舍入误差。当单向时,我只在雕刻方向上制作线段,然后插入一个大的“返回”线段。大段仅引入小的舍入误差,而所有小段引入累积舍入误差。

如果我使用两位小数,则错误很大,3 位小数(实际设置)可见,5 位小数则消失。

两位小数
单向雕刻产生错误的结果 #295

五位小数
单向雕刻产生错误的结果 #295

单向雕刻产生错误的结果 #295

感谢你的及时回复。我发现它提供了丰富的信息,但它让我想到了几个问题。

我已经找到了原因,但解决方案并不容易实施。

您似乎已经为上面显示的示例实施了解决方案。

1:这是我也可以做的事情吗?如果可以,怎么做?请让我参考任何相关教程。我有基本的编程技能,足以让我走到这一步,但渴望学习。

2:有没有理由计算到小数点后五位不规范?这样做会对计划的其他方面产生不利影响吗?

3:您会考虑使用小数点后五位方法的未来版本吗?

谢谢你的时间,
干杯

单向雕刻产生错误的结果 #295
所有者作者
阿尔基皮塔 评论了 2018 年 3 月 19 日  

您似乎已经为上面显示的示例实施了解决方案。

我实现的解决方案只有一行代码,将 GrblFile.cs第 96
行中 的gcode 输出从 #.### 更改为 #.#####

public string formatnumber(double number)
{
    //return number.ToString("#.###", System.Globalization.CultureInfo.InvariantCulture); 
    return number.ToString("#.#####", System.Globalization.CultureInfo.InvariantCulture); 
}

然而,这个如此简单的解决方案并不正确:提高小数位数会增加发送到 grbl 的字符数,结果会降低流速度并限制最大雕刻速度。对于某些人来说这可能不是问题,但对于其他人来说可能是一个限制。

最好的解决方案是将舍入误差累积到一个临时变量中,并在每个下一步计算中对其进行计数。我正在尝试以这种方式实现。

单向雕刻产生错误的结果 #295
所有者作者
阿尔基皮塔 评论了 2018 年 3 月 19 日  

是这样的:

static double errX;
public string formatnumberX(double number)
{
	double orig = number + errX;
	double send = Math.Round(orig, 3);
	errX = send - orig;
	return send.ToString(System.Globalization.CultureInfo.InvariantCulture);
}

static double errY;
public string formatnumberY(double number)
{
	double orig = number + errY;
	double send = Math.Round(orig, 3);
	errY = send - orig;
	return send.ToString(System.Globalization.CultureInfo.InvariantCulture);
}
arkypita 添加了引用此问题的提交 2018 年 3 月 19 日

单向雕刻产生错误的结果 #295
所有者作者

我已经发布了一个解决这个问题的版本:https ://github.com/arkypita/LaserGRBL/releases/tag/v2.8.37
@Citizen63 @Dpsspower任何其他使用单向的用户都可以测试吗?也请测试双向:-)

单向雕刻产生错误的结果 #295

早上好,再次感谢您的宝贵时间。今晚我下班回家后,我会好好锻炼你的最新版本。

单向雕刻产生错误的结果 #295

嗨,
老实说,我从来没有见过这个问题,因为我从来没有使用轮廓矢量化功能雕刻过东西。我使用单独的图片处理软件进行所有矢量化。
在逐行模式下,我从未发生过这个错误。从去年年底到现在,我使用的是旧版本。切勿更改正在运行的系统。我从来没有在逐行模式下遇到过这种失真。
我总是使用单向模式。它的工作做得很好,显着提高了结果的清晰度!:-)
我使用轮廓矢量化 + 填充检查了它,是的 – 错误就在那里。但绝不是逐行模式。
所以这似乎只与矢量轮廓+填充的组合有关,与简单的逐行雕刻无关。

现在我安装了新版本,错误似乎在屏幕上消失了。
我同意“即时”计算错误是比增加输出代码的输出分辨率更好的方法。

我唯一不明白的是,为什么问题只是在添加轮廓和逐行填充时发生,而不是仅在逐行使用时发生。

我会做更多的测试。
非常感谢你。

单向雕刻产生错误的结果 #295
所有者作者

问题出在我同时用于 lin2line 和矢量化填充的 line2line 算法中,但是当您使用矢量化+填充时,它会更加明显,因为您有视觉参考。

单向雕刻产生错误的结果 #295

它在某些分辨率设置下也更明显,即 8 线/毫米似乎问题消失了,但 7 线/毫米非常强。

单向雕刻产生错误的结果 #295

单向雕刻产生错误的结果 #295

单向雕刻产生错误的结果 #295
所有者作者
阿尔基皮塔 评论了 2018 年 3 月 19 日  

在最后的 2.8.37 中,问题似乎被最小化了,但并没有真正解决:

单向雕刻产生错误的结果 #295

单向雕刻产生错误的结果 #295
所有者作者

请用v2.8.38测试,应该是最后一个!
https://github.com/arkypita/LaserGRBL/releases/tag/v2.8.38

单向雕刻产生错误的结果 #295

你好

惊人的。
我没有机会尝试 2_8_37,但我正在对 2_8_38 进行几次测试。

(20分钟以后)…..

我不能打破它!
现在 Pin 清晰成像。我要去拿我的护目镜并启动激光。

我会在检查一些结果后回复您。
祝贺和感谢。