增材制造(或3D打印)是从数字文件中制作三维立体对象的过程。工业机器人手臂可与RoboDK一起用作3轴或5轴3D打印机。以下视频概述了如何使用RoboDK脱机设置3D打印:看视频。
可以通过以下方式之一使用机器人进行3D打印:
● 使用RoboDK将G代码程序(NC文件)直接转换为机器人程序,如机器人加工项目。每次移动都会适当考虑物料流速(挤出机指令E),并且可以将其作为程序事件集成到生成的程序中。G代码是RoboDK支持的一种NC文件,也是许多3D打印机支持的一种格式。给定一个STL文件,大多数切片器软件都可以生成G代码。
注意:切片器根据3D模型创建机器指令(G代码)。这些说明使用流速定义了挤出机的刀具路径。需要将RoboDK与切片器软件结合使用,以使用机器人正确完成3D打印。
提示: 右键单击RoboDK中的对象以将其另存为STL。
● 选择实用程序➔3D打印项目打开3D打印设置。这些设置与机器人加工项目,唯一的区别是“路径”输入已预设为3D打印对象。选择选择对象以在主屏幕上选择对象并自动获取刀具路径。选择3D打印选项以打开Slic3r。
重要:选择3D打印对象选项时,切片器Slic3r默认情况下可用于将对象转换为刀具路径。或者,可以通过生成G代码程序并将其转换为机器人程序来使用其他切片器,如机器人加工项目。
默认情况下,RoboDK将E指令作为程序调用转换为名为Extruder的程序,并将E值作为参数传递。选择“程序事件”以更改此行为。
挤出机值(E)表示每次移动前需要挤出多少物料。考虑到机械手的速度和点之间的距离,该值可用于驱动机械手的挤出机进料。
或者,可以使用后处理器计算挤出机进料并相应地生成适当的代码。以下部分提供了一个示例。
注意:一些机器人控制器可以自动使机器人运动与挤出机进料同步。在这种情况下,您需要将挤出机设置为后处理器中的外轴。
本节说明如何修改机器人后处理器在执行3D打印的移动指令之前计算挤出机速度。或者,可以通过调用Extruder程序(驱动挤出机的默认命令)在机器人控制器上进行这些操作。
通过自定义机器人后处理器,可以在将程序发送到机器人之前更轻松地集成用于3D打印的挤出机。为了完成这样的任务,当在机器人后处理器中生成程序时,我们需要做一些计算并输出定制的代码。
注意:默认情况下,某些后处理器,例如ABB RAPID IRC5,KUKA KRC2和Comau后处理器会实现这些建议的修改。
第一步是拦截Extruder调用,并在后处理器的RunCode部分中读取新的Extruder值(E值)。以下部分处理为程序生成的所有程序调用:
定义 运行码(自, 码, is_function_call = 假):
如果 is_function_call:
如果 码。以。。开始(“挤出机(”):
#拦截挤出机命令。
#如果程序调用为Extruder(123.56)
#我们将数字提取为字符串
#并将其转换为数字
自我。PRINT_E_NEW =浮动(码[9:-1个])
#跳过程序调用的生成
返回
其他:
自。附加线(代码+ “()”)
其他:
#输出程序代码
自。附加线(码)
挤出机值(长度/ E)被保存为机器人后处理器中的PRINT_E_NEW变量。
我们需要使用每个新的线性运动指令来触发名为new_move的函数调用。我们可以在MoveL命令的开头添加此调用:
定义 移动(自, 姿势, 关节, conf_RLF=没有):
“”“添加线性运动”“”
#处理3D打印挤出机集成
自。new_move(姿势)
...
我们还必须在后处理器的标题中添加以下变量,以计算挤出机的增量:
#3D打印挤出机设置参数:
PRINT_E_AO = 5 #模拟输出ID,用于控制挤出机流量
PRINT_SPEED_2_SIGNAL = 0.10 #将速度/流量转换为模拟输出信号的比率
PRINT_FLOW_MAX_SIGNAL = 24 #提供给挤出机的最大信号
PRINT_ACCEL_MMSS = --1个 #加速,如果我们使用舍入/混合,-1假设为恒定速度
#内部3D打印参数
PRINT_POSE_LAST = 没有 #最后姿势打印
PRINT_E_LAST = 0 #最后挤出机的长度
PRINT_E_NEW = 没有 #新挤出机长度
PRINT_LAST_SIGNAL = 没有 #最后挤出机信号
最后,我们需要定义一个新程序,该程序将根据运动之间的距离,机器人速度和机器人加速度来生成适当的挤出机进料命令。假设挤出机的进料是由特定的模拟输出或定制的程序调用驱动的。
我们需要在def MoveL程序定义之前添加以下代码。
重要: 用一个 四舍五入值在RoboDK中对机器人编程时,将有助于保持恒定的速度并最小化加速行为。在这种情况下,时间可以计算为距离/速度。
定义 计算时间(自, 距离, 最大值, 最大值=-1个):
“”“以Amax加速度和Vmax速度计算移动距离的时间”“”“
如果 最大值 < 0:
#假设速度恒定(必须设置适当的平滑/舍入参数)
托特 = 距离/最大值
其他:
#假设我们加速和减速
tacc = 最大值/最大值;
Xacc = 0.5*最大值*tacc*tacc;
如果 距离 <= 2*Xacc:
#未达到Vmax
tacc = sqrt(距离/最大值)
托特 = tacc*2
其他:
#达到Vmax
最大速度 =距离 -- 2*Xacc
最大电视 =最大速度/最大值
托特 = 2*tacc + 最大电视
返回 托特
定义 new_move(自, new_pose):
“”“对挤出机执行3D打印操作(如果适用)”“”
如果 自。PRINT_E_NEW 是 没有 要么 new_pose 是 没有:
返回
#跳过第一步,记住姿势
如果 自。PRINT_POSE_LAST 是 没有:
自。PRINT_POSE_LAST = new_pose
返回
#计算下一次运动的物料增加量
add_material = 自。PRINT_E_NEW -- 自。PRINT_E_LAST
自。PRINT_E_LAST = 自。PRINT_E_NEW
#计算机器人速度和挤出机信号
挤出机信号 = 0
如果 add_material > 0:
distance_mm = 规范(subs3(自。PRINT_POSE_LAST。位置(), new_pose。位置()))
#计算运动时间,以秒为单位
time_s = 自。计算时间(distance_mm, 自。SPEED_MMS, 自。PRINT_ACCEL_MMSS)
#避免被0除
如果 time_s >0:
#这可能看起来很多余,但是它可以让您考虑加速度,并且我们可以应用较小的速度调整
speed_mms = distance_mm / time_s
#以RPM * Ratio(PRINT_SPEED_2_SIGNAL)计算挤出机速度
挤出机信号 = speed_mms *自。PRINT_SPEED_2_SIGNAL
#确保信号在可接受的范围内
挤出机信号 = 最高(0,分(自。PRINT_FLOW_MAX_SIGNAL, 挤出机信号))
#根据需要更新挤出机速度
如果 自。PRINT_LAST_SIGNAL 是 没有 要么 腹肌(挤出机信号 -- 自。PRINT_LAST_SIGNAL) > 1e-6:
自。PRINT_LAST_SIGNAL = 挤出机信号
#使用内置的setDO功能设置模拟输出
自。setDO(自。PRINT_E_AO, “%.3f” % 挤出机信号)
#或者,引发程序调用并处理与机器人控制器的集成
#self.addline('ExtruderSpeed(%。3f)'%extruder_signal)
#记住最后一个姿势
自。PRINT_POSE_LAST = new_pose