我正在为一个数控铣床实现一个驱动程序,我在实现G代码的arc命令时遇到了困难。在
我发现了一些中点圆算法的实现,但它并不是真正可用的。在
我发现的中点圆算法的问题是,它是二维的,同时绘制所有的八分之一,而我需要连续的步骤通过三维路径,由起点,终点和中心点。在
我发现使用浮点运算的nice multidimensional equivalent of Bresenham’s line drawing algo。也许有类似的东西可以用来画一个弧?在
我也许可以通过大量的思考和实验使这个算法符合我的意愿,但既然画弧线并不是一个未解决的问题,而且数控机床以前也制造过,我想知道是否已经存在一个优雅的解决方案?在
在LinuxCNC中,位置生成与步骤生成分离。在位置生成循环中,系统跟踪它已经沿当前图元(直线或螺旋线)移动的距离,并使用一个简单的公式来获得沿该图元的距离D的位置。(通常,每毫秒执行一次)。这个位置可以以不同的方式使用,这取决于你是有伺服,硬件步骤生成,还是软件步骤生成。在
在软件步进生成系统中,沿每个轴确定旧命令位置和新命令位置之间的差,并用此差来更新使用直接数字合成方法(DDS)的数字波形发生器的速率。然后,以更高的速率(通常每20-50µs一次),DDS针对每个轴确定此时是否应生成台阶。在
这与您描述的设计不同,但它更灵活。例如,通过将位置生成与步骤生成分离,您可以在不修改步骤生成的情况下修改位置生成代码中的混合算法;您可以用硬件步骤生成代替软件步骤生成,或者用PID等算法代替伺服控制。在
在您的设计中,您可以近似我上面描述的方法,只需将螺旋弧切割成Roland所描述的线段,并将这些线段作为输入输入到只理解直线的步进生成代码中。从某种意义上说,这与LinuxCNC没有太大区别,只是曲线基本体根据距离而不是根据时间采样。在
我的dxftoolspython软件包用于处理DXF文件,该软件包具有在二维中将圆弧分割为线段的功能。您可以使用此代码,然后使用三维坐标变换将其任意放置在三维空间中。坐标变换的例子可以在我的py-stl软件包中找到。在
相关问题 更多 >
编程相关推荐