我是靠谱客的博主 忐忑豆芽,最近开发中收集的这篇文章主要介绍PMAC的PVT功能实现解析笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述
从上图中我们可以得到如下信息:

    1. 速度截面是一个抛物线
    1. P 0 P_0 P0 V 0 V_0 V0是上一次指定的, P 1 P_1 P1 V 1 V_1 V1是当前期望的,TA是当前期望的运动时间
    1. A 0 A_0 A0是上一次计算的, A 1 A_1 A1是当前计算的,加加速度 d A / d t dA/dt dA/dt是常数

根据上述几条信息,可以看出轨迹插补方式有点类似于三次多项式。

在这里插入图片描述
此图下方接下来有一段话:

PVT mode provides excellent contouring capability, because it takes the interpolated commanded path exactly through the programmed points. It creates a path known as a “Hermite spline”. To use PVT mode for this multi-axis contouring, the axis velocities at each programmed point must be specified in addition to the positions.

划关键词Hermite spline,结合文首推测,应该是用的三次Hermite曲线,不了解Hermite曲线的朋友可以移步这篇文章:传送门

这里直接给出三次Hermite曲线的表达式:
p ( t ) = ( 1 − 3 t 2 + 2 t 3 ) p 0 + ( t − 2 t 2 + t 3 ) v 0 + ( 3 t 2 − 2 t 3 ) p 1 + ( t 3 − t 2 ) v 1 p(t)=(1-3t^2+2t^3)p_0+(t-2t^2+t^3)v_0+(3t^2-2t^3)p_1+(t^3-t^2)v_1 p(t)=(13t2+2t3)p0+(t2t2+t3)v0+(3t22t3)p1+(t3t2)v1
v ( t ) = ( 6 t 2 − 6 t ) p 0 + ( 3 t 2 − 4 t + 1 ) v 0 + ( 6 t − 6 t 2 ) p 1 + ( 3 t 2 − 2 t ) v 1 v(t)=(6t^2-6t)p_0+(3t^2-4t+1)v_0+(6t-6t^2)p_1+(3t^2-2t)v_1 v(t)=(6t26t)p0+(3t24t+1)v0+(6t6t2)p1+(3t22t)v1
a ( t ) = ( 12 t − 6 ) p 0 + ( 6 t − 4 ) v 0 + ( 6 − 12 t ) p 1 + ( 6 t − 2 ) v 1 a(t)=(12t-6)p_0+(6t-4)v_0+(6-12t)p_1+(6t-2)v_1 a(t)=(12t6)p0+(6t4)v0+(612t)p1+(6t2)v1
j ( t ) = 12 p 0 + 6 v 0 − 12 p 1 + 6 v 1 j(t)=12p_0+6v_0-12p_1+6v_1 j(t)=12p0+6v012p1+6v1

由此可见,加加速度确实为定值。

p 0 = 0 p_0=0 p0=0 v 0 = 0 v_0=0 v0=0 p 1 = △ P p_1=triangle P p1=P v 1 = V v_1 = V v1=V,则有:
v ( t ) = ( 6 t − 6 t 2 ) △ P + ( 3 t 2 − 2 t ) V = ( 3 V − 6 △ P ) t 2 + ( 6 △ P − 2 V ) t v(t)=(6t-6t^2)triangle P+(3t^2-2t)V=(3V-6triangle P)t^2+(6triangle P-2V)t v(t)=(6t6t2)P+(3t22t)V=(3V6△P)t2+(6△P2V)t
a ( t ) = ( 6 − 12 t ) △ P + ( 6 t − 2 ) V = ( 6 V − 12 △ P ) t + ( 6 △ P − 2 V ) a(t)=(6-12t)triangle P+(6t-2)V=(6V-12triangle P)t+(6triangle P-2V) a(t)=(612t)P+(6t2)V=(6V12△P)t+(6△P2V)

以下是说明书中给出的常见PVT模式的时间-速度曲线,发现图像与上述公式完全相符。转载请注明出处,罗伯特祥。matlab符号运算验证代码如下:

syms t p0 p1 v0 v1 real;

p = (1 - 3*t^2 + 2*t^3)*p0 + (t - 2*t^2 + t^3)*v0 + (3*t^2-2*t^3)*p1 + (t^3-t^2)*v1

v = diff(p,t)

v = subs(v,p0,0);
v = subs(v,v0,0);
v = subs(v,p1,2*v1/3);
v = expand(v)

注意:下图中▲P与V的关系中,横坐标标注的t是一个单位量,代入公式时应当作一个常量看待。

在这里插入图片描述

此外,说明书还给出了一个比较有意思的圆弧构建案例:

在这里插入图片描述

最后,给出一个PVT插补案例,代码如下:

clear,clc,close all

dt = 1;
t = 0:dt:20;
X = 100*sin(0.2*pi*t);
Vx = 0.2*pi*100*cos(0.2*pi*t);

count = 1;
time = 0;
n = 1000;
for i=1:length(X)
    if(i>=2)
        q0 = X(i-1);
        q1 = X(i);
        v0 = Vx(i-1);
        v1 = Vx(i);
        traj = pvt(q0,q1,v0,v1,n);
        for k=1:length(traj)
            Xpvt(count) = traj(k);
            time = time + dt/n;
            tpvt(count) = time;
            count = count + 1;
        end
    end
end

plot(t,X,"*")
hold on
plot(tpvt,Xpvt)
t = 0:0.0001:20;
plot(t,100*sin(0.2*pi*t))
legend("插值点","pvt","理想轨迹")

function traj = pvt(p0,p1,v0,v1,n)
    dt = 1/n;
    tt = dt:dt:1;
    for i=1:length(tt)
        t = tt(i);
        H0 = 1 - 3*t^2 + 2*t^3;
        H1 = t - 2*t^2 + t^3;
        H2 = 3*t^2 - 2*t^3;
        H3 = t^3 - t^2;
        traj(i) = H0 * p0 + H1*v0 + H2*p1 + H3*v1;
    end
end

在这里插入图片描述


结论: PMAC应用三次Hermite spline实现的PVT功能。

最后

以上就是忐忑豆芽为你收集整理的PMAC的PVT功能实现解析笔记的全部内容,希望文章能够帮你解决PMAC的PVT功能实现解析笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部