机器人3D打印项目

增材制造(或3D打印)是从数字文件制造三维固体物体的过程。世界杯2022美洲预选赛直播工业机械臂可以使用RoboDK作为3轴或5轴3D打印机。下面的视频概述了如何使用RoboDK离线设置3D打印:观看视频.

用机器人进行3D打印可以通过以下方式之一实现:

·使用RoboDK直接将G-code程序(NC文件)转换为机器人程序,如机器人加工项目.物料流动速率(挤出机指令E)是正确计算每个运动,它可以集成到生成的程序作为项目活动.G-code是RoboDK支持的一种NC文件,也是许多3D打印机支持的一种格式。大多数切片器软件可以生成给定STL文件的g代码。

·选择公用事业公司➔3D打印项目打开3D打印设置。

机器人加工-图36

机器人加工-图37

机器人加工-图38

默认情况下,RoboDK将E指令转换为一个程序调用到一个名为挤出机并将E值作为参数传递。选择项目活动改变这种行为。

机器人加工-图39

挤出机值(E)表示每次运动前需要挤出多少材料。考虑到机器人的速度和点之间的距离,该值可用于从机器人驱动挤出机进料。

或者,可以使用后处理器计算挤出机进料并相应地生成适当的代码。举例如下。

用于机器人3D打印的后处理器

介绍修改机器人的操作步骤后置处理程序在执行3D打印的运动指令之前,计算挤出机速度。或者,这些操作可以在机器人控制器上使用挤出机程序调用(驱动挤出机的默认命令)进行。

通过定制机器人后处理器,在将程序发送给机器人之前,可以更容易地集成3D打印挤出机。为了完成这一任务,我们需要在机器人后处理器中生成程序时进行一些计算并输出定制代码。

第一步是拦截Extruder调用,并在后处理器的RunCode部分中读取新的Extruder值(E值)。以下部分处理为一个程序生成的所有程序调用:

defRunCode(自我,代码,is_function_call=假):

如果is_function_call:

如果代码.startswith(挤出机():

#截取挤出机命令。

#如果程序调用是Extruder(123.56)

#我们将数字提取为字符串

#并将其转换为数字

自我。PRINT_E_NEW=浮动(代码[9:-1])

#跳过程序调用生成

返回

其他:

自我.addline(代码+“()”)

其他的:

#输出程序代码

自我.addline(代码)

Extruder值(length/E)保存为机器人后处理器中的PRINT_E_NEW变量。

我们需要触发一个名为new_move伴随着每一个新的线性运动指令。我们可以在MoveL命令的开头添加这个调用:

defMoveL(自我,构成,关节,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程序定义之前添加以下代码。

defcalculate_time(自我,距离,Vmax,Amax= -1):

计算以Amax加速度和Vmax速度移动一段距离所需的时间"""

如果Amax<0:

假设速度恒定(必须设置适当的平滑/舍入参数)

Ttot=距离/Vmax

其他的:

#假设我们加速和减速

tacc=Vmax/Amax;

Xacc=0.5*Amax*tacc*tacc;

如果距离< =2*Xacc:

# Vmax未达到

tacc=√6(距离/Amax)

Ttot=tacc*2

其他的:

# Vmax已达到

Xvmax=距离-2*Xacc

Tvmax=Xvmax/Vmax

Ttot=2*tacc+Tvmax

返回Ttot

defnew_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

计算机器人速度和挤出机信号

extruder_signal=0

如果add_material>0:

distance_mm=规范(subs3(自我.PRINT_POSE_LAST.Pos(),new_pose.Pos()))

#以秒为单位计算移动时间

time_s=自我.calculate_time(distance_mm,自我.SPEED_MMS,自我.PRINT_ACCEL_MMSS)

#避免除0

如果time_s>0:

#这可能看起来多余,但它可以让你考虑到加速度,我们可以应用小的速度调整

speed_mms=distance_mm/time_s

#以RPM*Ratio计算挤出机速度(PRINT_SPEED_2_SIGNAL)

extruder_signal=speed_mms*自我.PRINT_SPEED_2_SIGNAL

#确保信号在可接受值范围内

extruder_signal=马克斯(0,最小值(自我.PRINT_FLOW_MAX_SIGNAL,extruder_signal))

需要时更新挤出机速度

如果自我.PRINT_LAST_SIGNAL是没有一个或腹肌(extruder_signal-自我.PRINT_LAST_SIGNAL)>1 e-6:

自我.PRINT_LAST_SIGNAL=extruder_signal

#使用内置的setDO函数设置模拟输出

自我.setDO(自我.PRINT_E_AO,“% .3f”%extruder_signal)

#或者,触发一个程序调用并处理与机器人控制器的集成

#self.addline('ExtruderSpeed(%.3f)' % extruder_signal)

记住最后一个姿势

自我.PRINT_POSE_LAST=new_pose