概述
从上图中我们可以得到如下信息:
-
- 速度截面是一个抛物线
-
- P 0 P_0 P0、 V 0 V_0 V0是上一次指定的, P 1 P_1 P1、 V 1 V_1 V1是当前期望的,TA是当前期望的运动时间
-
- 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)=(1−3t2+2t3)p0+(t−2t2+t3)v0+(3t2−2t3)p1+(t3−t2)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)=(6t2−6t)p0+(3t2−4t+1)v0+(6t−6t2)p1+(3t2−2t)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)=(12t−6)p0+(6t−4)v0+(6−12t)p1+(6t−2)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+6v0−12p1+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)=(6t−6t2)△P+(3t2−2t)V=(3V−6△P)t2+(6△P−2V)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)=(6−12t)△P+(6t−2)V=(6V−12△P)t+(6△P−2V)
以下是说明书中给出的常见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功能实现解析笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复