用于机器人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代码

Extruder值(length/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.5Amaxtacctacc

如果距离< =2Xacc

# Vmax未达到

tacc√6距离/Amax

Ttottacc2

其他的

# Vmax已经达到

Xvmax距离-2Xacc

TvmaxXvmax/Vmax

Ttot2tacc+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