介绍修改机器人的操作步骤后置处理程序在执行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