机器人3D打印项目

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

机器人3D打印可以通过以下方式实现:

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

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

机器人加工-图像36

机器人加工-图像37

机器人加工-图像38

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

机器人加工-图像39

挤出机值(E)表示在每次移动之前需要挤出多少材料。这个值可以用来驱动挤出机饲料从机器人考虑到机器人的速度和点之间的距离。

或者,可以使用后处理器计算挤出机进料并相应地生成适当的代码。下面的小节提供了一个示例。

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

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

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

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

defRunCode自我代码is_function_call):

如果is_function_call

如果代码startswith挤出机():

#拦截挤出机命令。

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

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

#并将其转换为数字

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

跳过程序调用生成

返回

其他:

自我addline代码+“()”

其他的

#输出程序代码

自我addline代码

挤出机值(长度/E)保存为机器人后处理器中的PRINT_E_NEW变量。

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

defMoveL自我构成关节conf_RLF没有一个):

“”“添加一个线性运动”“”

处理3D打印挤出机集成

自我new_move构成

我们还必须在后处理程序的头部添加以下变量来计算挤出机增量:

# 3D打印挤出机设置参数:

PRINT_E_AO5#模拟输出ID,用于命令挤出机流量

PRINT_SPEED_2_SIGNAL0.10#比率转换速度/流量模拟输出信号

PRINT_FLOW_MAX_SIGNAL24提供给挤出机的最大信号

PRINT_ACCEL_MMSS-1#加速,-1假设恒定速度,如果我们使用舍入/混合

#内部3D打印参数

PRINT_POSE_LAST没有一个#最后一个姿势打印出来

PRINT_E_LAST0#最后挤出机长度

PRINT_E_NEW没有一个新挤出机长度

PRINT_LAST_SIGNAL没有一个最后一个挤出机信号

最后,我们需要定义一个新的程序,该程序将根据运动之间的距离,机器人速度和机器人加速度生成适当的挤出机进料命令。这假定挤出机进料是由特定的模拟输出或定制的程序调用驱动的。

我们需要在def MoveL程序定义之前添加以下代码。

defcalculate_time自我距离VmaxAmax= -1):

计算用最大加速度和最大速度移动一段距离的时间

如果Amax<0

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

Ttot距离/Vmax

其他的

假设我们加速和减速

taccVmax/Amax

Xacc0.5*Amax*tacc*tacc

如果距离<=2*Xacc

未达到# Vmax

tacc√6距离/Amax

Ttottacc*2

其他的

达到了# Vmax

Xvmax距离-2*Xacc

TvmaxXvmax/Vmax

Ttot2*tacc+Tvmax

返回Ttot

defnew_move自我new_pose):

"""对3D打印的挤出机实施操作,如果适用的话"""

如果自我PRINT_E_NEW没有一个new_pose没有一个

返回

#跳过第一步,记住姿势

如果自我PRINT_POSE_LAST没有一个

自我PRINT_POSE_LASTnew_pose

返回

计算下一个移动的增加的材料

add_material自我PRINT_E_NEW-自我PRINT_E_LAST

自我PRINT_E_LAST自我PRINT_E_NEW

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

extruder_signal0

如果add_material>0

distance_mm规范subs3自我PRINT_POSE_LASTPos(),new_posePos()))

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

time_s自我calculate_timedistance_mm自我SPEED_MMS自我PRINT_ACCEL_MMSS

避免被0除法

如果time_s>0

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

speed_mmsdistance_mm/time_s

计算挤出机转速(RPM*Ratio) (PRINT_SPEED_2_SIGNAL)

extruder_signalspeed_mms*自我PRINT_SPEED_2_SIGNAL

确保信号在可接受的范围内

extruder_signal马克斯0最小值自我PRINT_FLOW_MAX_SIGNALextruder_signal))

#根据需要更新挤出机速度

如果自我PRINT_LAST_SIGNAL没有一个腹肌extruder_signal-自我PRINT_LAST_SIGNAL>1 e-6

自我PRINT_LAST_SIGNALextruder_signal

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

自我setDO自我PRINT_E_AO“% .3f”extruder_signal

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

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

#记住最后一个姿势

自我PRINT_POSE_LASTnew_pose