激光雕刻机的位图-GCode转换方法实践

Author:Gary Li
Date:2019-5-2

1. 简介

现在有一部分3D打印机带有激光雕刻功能,自己组装一台专用的激光雕刻机也并不复杂成本也很低。但是当我们使用激光雕刻机时,激光雕刻下位机只能接受路径指令,所以我们需要把位图——也就是我们平时最常见的jpg、png图片转换为控制板能理解的G-Code代码。根据需求以及复杂程度,转换有以下几种方法可以选择。下述方法所需的工具包均已打包上传,且均为绿色免安装版,下载地址。

https://download.csdn.net/download/m0_37340681/11156631

2. 位图->G-Code (使用JediMaster)

绝地大师(JediMaster)这个软件可以一键实现上述的目的,优点是使用简单,但是有一些致命的缺点,比如配置选项少导致最后效果不可控;只能支持简单的线条图形,复杂图形会转换失败等等。如果雕刻的原图片是一些logo之类的可以考虑使用此软件。
使用方法:解压后直接双击打开软件,左上角加号选择图片后等待转换完成就可以在主界面看到结果。双击主界面可以修改图片大小等等。使用方法很简单这里不详细说明了。解析完毕后图片就已经保存到了C:\Users\.jedimaster中,将后缀为.nc的文件打开复制到上位机控制软件即可。
激光雕刻机的位图-GCode转换方法实践_第1张图片

3. 位图->SVG->GCode (VectorMagic,JediMaster)

VectorMagic是一款位图转矢量图的小工具,具有很多功能比如去除背景,控制精细度等等功能并且支持较复杂的图形。弥补了JediMaster的缺点,将VectorMagic生成的SVG文件输入到JediMaster中即可。不过这个方法有个致命的缺点,那就是如下图所示,会生成很多移动路径,并且移动的时候激光头是打开状态的,所以会产生许多的杂线条。并且我观察了很久生成的GCode,并无法通过程序的方式将这些杂线条区分出来,所以这个致命问题导致了该方法不可用。
激光雕刻机的位图-GCode转换方法实践_第2张图片

激光雕刻机的位图-GCode转换方法实践_第3张图片

4. 位图 / 矢量图 -> GCode(InkScape) (推荐)

InkScape是个免费开源的矢量图作图软件,也支持大量的插件,功能选项很多,可以直接转换位图或者矢量图为GCode。这个软件还有个最大的优点是生成的路径是优化过的最短路径,效率很高;并且生成的路径原点在中间,方便定位。网上使用方法也很多,但是我折腾了大半天,原因是inkscape是个开源软件版本很多兼容性也控制得不是很好,下了很多版本要不就是功能残缺或者缺个库,或者就是运行时报很多错误。在我上传的资源包里有我测试完成的绿色版inkscape以及转换成GCode的插件。将资源包里的inkscape-unicorn-master的src文件夹里的内容解压到inkscape\share\extensions打开inkscape即可。使用方法参考这个视频:

https://www.bilibili.com/video/av10491675

不过转换出来的GCode不能直接使用,需要将里面的指令进行替换以及过滤。过滤脚本如下:

# AccLaser.py
# Usage:python3 AccLaser.py -f  [-m  -c ]

import sys, getopt

move_speed = 3000
crave_speed = 300

if __name__ == '__main__':
    opts, args = getopt.getopt(sys.argv[1:], "f:m:c:")
    input_file=""
    #获取参数
    for op, value in opts:
        if op == "-f":
            input_file = value
        elif op == "-m":
            move_speed = value
        elif op == "-c":
            crave_speed = value

    print(input_file,move_speed,crave_speed)

    if input_file == "":
        print("Please input file name")
        sys.exit()

    lines = []

    #设置初始参数
    lines.append('G21')
    lines.append('G90')
    lines.append('G92')
    lines.append('M05')

    # 记录激光状态,用于判断移动速度
    state = False

    with open(input_file,'r') as ifd:
        for index,line in enumerate(ifd):
            #去除换行,避免换行混乱
            line = line.replace("\n", "")
            line = line.replace("\r", "")

            #跳过前面几行生成的测试语句
            if index <= 14:
                continue

            elif 'pen down' in line:
                lines.append('M03')
                state = True

            elif 'pen up' in line:
                lines.append('M05')
                state = False

            #如果读到了移动指令
            elif line.startswith('G1'):
                #判断激光状态,如果激光关了,则可以快速移动
                if state == False:
                    lines.append(line.replace('F3500.00','F'+str(move_speed)))
                #如果激光是关着的
                else:
                    lines.append(line.replace('F3500.00', 'F' + str(crave_speed)))

    #输出文件
    output_file = input_file + '.acc'
    with open(output_file,'w') as ofd:
        for line in lines[:-3]:#跳过最后三行回家的指令
            ofd.write(line+'\n')

    print("文件生成成功:",output_file)

你可能感兴趣的:(激光雕刻,3D打印)