本节将展示如何修改一个机器人后置处理程序计算挤出机速度在执行之前3 d打印技术的运动指令。另外,这些操作可以在挤出机的机器人控制器程序调用(默认命令驱动挤出机)。
通过定制一个机器人后处理器,可以使3 d打印挤出机的集成更容易在发送程序之前机器人。要完成这样的任务,我们需要做一些计算和输出定制代码程序中生成时机器人后置处理程序。
第一步是拦截机电话和读取新的挤出机的值(E值)在RunCode部分后处理器。以下部分处理所有程序调用生成的程序:
defRunCode(自我,代码,is_function_call=假):
如果is_function_call:
如果代码。startswith(挤出机():
#拦截机命令。
#如果程序调用挤出机(123.56)
#我们提取数字作为一个字符串
#和将其转换为一个数字
self.PRINT_E_NEW=浮动(代码(9:-1])
#跳过程序调用的一代
返回
其他:
自我。addline(代码+“()”)
其他的:
#输出程序代码
自我。addline(代码)
挤出机值(长度/ E)保存在机器人PRINT_E_NEW变量后处理器。
我们需要触发函数调用命名new_move随着每一个新的线性运动指令。我们可以添加这个叫初MoveL命令:
defMoveL(自我,构成,关节,conf_RLF=没有一个):
添加一个线性运动”“”“
#处理3 d印制机集成
自我。new_move(构成)
…
我们还必须添加以下变量头的后置处理程序计算挤出机增量:
# 3 d印制机设置参数:
PRINT_E_AO=5#挤出机流模拟输出ID命令
PRINT_SPEED_2_SIGNAL=0.10#比率转换速度/流向一个模拟输出信号
PRINT_FLOW_MAX_SIGNAL=24#最大信号提供到挤出机
PRINT_ACCEL_MMSS=- - - - - -11 #加速度,假定恒速如果我们用舍入/混合
#内部3 d打印参数
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):
”““实施行动的挤出机3 d印刷,如果适用“”“
如果自我。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 *比率(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