当前位置:   article > 正文

3.1 插补算法概述

插补算法

3.1 插补算法概述

常见的插补算法

对于控制数控刀具或机器人末端工具运动轨迹来说,插补功能至关重要。插补的任务就是根据给定的运动速度,正在轮廓起点和终点之间计算出若干个中间点的坐标值。由于每个中间点计算所需的时间直接影响系统的控制速度,而插补中间点坐标值的计算精度有影响到NC系统的控制精度,所以插补算法是NC系统控制的核心。

数控技术发展过程中出现了脉冲增量插补、数字增量插补、时间分割插补、拓展DDA方法、双DDA法等,这些方法在文献[1]中有详细的论述,这里就不赘述了。其中时间分割插补、拓展DDA方法、双DDA法都可以归纳为数据采样插补,数据采样插补是现代运动控制系统普遍采用的方法,其中最经典的是时间分割法,后面章节我们介绍的插补算法都属于时间分割法。

数据采样插补是根据用户程序的给定速度,将给定轮廓曲线分割为每一插补周期的进给段,即轮廓步长。每一个插补周期,执行一次插补运算,计算出下一个插补点(动点)的坐标。从而计算出下一个周期各个坐标的进给量,如 Δ x 、 Δ y \Delta x、\Delta y ΔxΔy等,从而得出下一个插补点的指令位置。

时间分割法

时间分割法是典型的数据采样插补方法。它首先根据加工指令中的进给速度 v v v,计算出每个周期的轮廓步长 l l l,即用插补周期为时间单位,将整个加工过程分割成许多单位时间内的进给过程。以插补周期为时间单位,则单位时间内的移动的路程等于速度,即轮廓步长与轮廓速度 f f f相等。插补计算的主要任务是计算出下一个插补点的坐标,从而计算出轮廓速度在各个坐标轴的分速度,即下一个插补周期内的各坐标进给量 Δ x 、 Δ y \Delta x、\Delta y ΔxΔy。控制X,Y坐标分别以 Δ x 、 Δ y \Delta x、\Delta y ΔxΔy为速度协调进给,即可走出逼近直线段,到达下一个插补点。需要注意的是,插补前需要进行加减速规划,常用的梯形加减速、指数加减速和S形加减速在前面的章节有详细的介绍。根据加减速曲线可以计算出第i周期的位移,根据路径(直线、圆弧、样条等)的几何参数,计算出对应的坐标。如下图是梯形加减速控制的直线插补的示意图。

在这里插入图片描述

示例:基于指数加减速的直线插补

基本流程是:计算直线的长度→加减速规划→计算每个周期的位移→计算该周期的插补点坐标。

对应的位移、速度和插补坐标变化如图所示。

在这里插入图片描述

示例代码如下。

其中指数加减速相关的函数expProfile,expProfile_dis,可以参考上一个章节《2.3 指数加减速》(https://blog.csdn.net/Galaxy_Robot/article/details/132255426?spm=1001.2014.3001.5502)。

clc
clear
close("all")
%%
%给定直线起点和终点,以及运动参数
ps=[10;20;0];
pe=[20;30;0];
vs=10;vmax=50;ve=5;amax=1000;dmax=1200;
%%
%加减速规划
L=sqrt((pe(1)-ps(1))^2+(pe(2)-ps(2))^2+(pe(3)-ps(3))^2);
param=expProfile(L,vs,vmax,ve,amax,dmax);
ts=param.t1+param.t2+param.t3;
Ts=0.001;%插补周期
k=1;
s0=0;
%绘图环境
fig=figure;
set(gcf,'Color','w')

f1=subplot(3,1,1);
xlabel("time")
ylabel("si") 
hold on
plot(f1,ts,L,'or-');
f2=subplot(3,1,2);
xlabel("time")
ylabel("vi") 
hold on
plot(f2,ts,ve,'or-');
plot(f2,[0,ts],[vmax vmax],'b--');
f3=subplot(3,1,3);
xlabel("x")
ylabel("y")
%axis equal
hold on
plot(f3,ps(1),ps(2),'or-')
plot(f3,pe(1),pe(2),'or-')
%插补输出
for ti=0:Ts:ts
    time(k,1)=ti;
    %数据采样。根据加减速轮廓,计算给定时刻对应的位移
    si(k,1)=expProfile_dis(param,ti);
    %插补计算。根据累计位移计算坐标点
    pi(k,:)=ps+si(k,1)/param.s*(pe-ps);
    %速度计算。只是用来画图用
    vi(k,1)=(si(k,1)-s0)/Ts;
    %绘图演示
    plot(f1,time(k),si(k),'.r-')
    plot(f2,time(k),vi(k),'.r-')
    plot(f3,pi(k,1),pi(k,2),'.r-')
    pause(0.01);  
    %制作动画
    frame = getframe(fig);
    im{k} = frame2im(frame);
    [A,map] = rgb2ind(im{k},256); %将 RGB 图像转换为索引图像 A。map 最多包含 n 个颜色。
    
    if k == 1
        imwrite(A,map,'test.gif','gif','LoopCount',Inf,'DelayTime',0.01);%'DelayTime'为每帧图像播放时间
    else
        imwrite(A,map,'test.gif','gif','WriteMode','append','DelayTime',0.01);
    end
    s0=si(k,1);
    k=k+1;
end


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

参考文献

[1]王爱玲.现代数控原理及控制系统[M].国防工业出版社,2002.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/439275
推荐阅读
相关标签
  

闽ICP备14008679号