PMAC的PVT功能实现解析笔记
从上图中我们可以得到如下信息:
- 速度截面是一个抛物线
- P0P_0P0、V0V_0V0是上一次指定的,P1P_1P1、V1V_1V1是当前期望的,TA是当前期望的运动时间
- A0A_0A0是上一次计算的,A1A_1A1是当前计算的,加加速度dA/dtdA/dtdA/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−3t2+2t3)p0+(t−2t2+t3)v0+(3t2−2t3)p1+(t3−t2)v1p(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_1p(t)=(1−3t2+2t3)p0+(t−2t2+t3)v0+(3t2−2t3)p1+(t3−t2)v1
v(t)=(6t2−6t)p0+(3t2−4t+1)v0+(6t−6t2)p1+(3t2−2t)v1v(t)=(6t^2-6t)p_0+(3t^2-4t+1)v_0+(6t-6t^2)p_1+(3t^2-2t)v_1v(t)=(6t2−6t)p0+(3t2−4t+1)v0+(6t−6t2)p1+(3t2−2t)v1
a(t)=(12t−6)p0+(6t−4)v0+(6−12t)p1+(6t−2)v1a(t)=(12t-6)p_0+(6t-4)v_0+(6-12t)p_1+(6t-2)v_1a(t)=(12t−6)p0+(6t−4)v0+(6−12t)p1+(6t−2)v1
j(t)=12p0+6v0−12p1+6v1j(t)=12p_0+6v_0-12p_1+6v_1j(t)=12p0+6v0−12p1+6v1
由此可见,加加速度确实为定值。
令p0=0p_0=0p0=0、v0=0v_0=0v0=0、p1=△Pp_1=\triangle Pp1=△P、v1=Vv_1 = Vv1=V,则有:
v(t)=(6t−6t2)△P+(3t2−2t)V=(3V−6△P)t2+(6△P−2V)tv(t)=(6t-6t^2)\triangle P+(3t^2-2t)V=(3V-6\triangle P)t^2+(6\triangle P-2V)tv(t)=(6t−6t2)△P+(3t2−2t)V=(3V−6△P)t2+(6△P−2V)t
a(t)=(6−12t)△P+(6t−2)V=(6V−12△P)t+(6△P−2V)a(t)=(6-12t)\triangle P+(6t-2)V=(6V-12\triangle P)t+(6\triangle 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)*v1v = 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 alldt = 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;endend
endplot(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功能实现解析笔记相关推荐
- python编写登录_通过Python编写一个简单登录功能过程解析
通过Python编写一个简单登录功能过程解析 需求: 写一个登录的程序, 1.最多登陆失败3次 2.登录成功,提示欢迎xx登录,今天的日期是xxx,程序结束 3.要检验输入是否为空,账号和密码不能为空 ...
- 源码解析:Spring源码解析笔记(五)接口设计总览
本文由colodoo(纸伞)整理 QQ 425343603 Java学习交流群(717726984) Spring解析笔记 启动过程部分已经完成,对启动过程源码有兴趣的朋友可以作为参考文章. 源码解析 ...
- React深入学习与源码解析笔记
***当前阶段的笔记 *** 「面向实习生阶段」https://www.aliyundrive.com/s/VTME123M4T9 提取码: 8s6v 点击链接保存,或者复制本段内容,打开「阿里云盘」 ...
- javaSE基础——集合全面解析笔记
javaSE基础--集合全面解析笔记 英文单词 一.容器定义 1.1.容器继承体系 二.Set--------容器类 部分方法数学集合意义 2.1 HashSet 2.1.1 基本用法 2.1.2 特 ...
- obs 源码解析笔记
obs 源码解析笔记 由于obs rtp音频传输有问题,所以可能需要修改obs源码,学习了两天,发现官方文档有些混乱,国内有关说明又少,特此记录,也方便以后自己查阅.这里主要涉及工作有关源码其他基本略 ...
- cuDNN 功能模块解析
cuDNN 功能模块解析 Abstract 本cuDNN 8.0.4开发人员指南概述了cuDNN功能,如可自定义的数据布局.支持灵活的dimension ordering,striding,4D张量的 ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- onenote快捷键_高效飞快地使用onenote快捷键:快捷键功能架构解析
默认快捷键有近200组,涉及到的功能如此之多,但真正频繁使用的,可能也就几十组.如何从这么多快捷键中选择出自己需要的呢?你需要一张功能架构参考图. 1 默认快捷键功能架构图 官方文档已对快捷键做了初步 ...
- Plugin工具类-Unreal4源码拆解-UnrealBuildTool功能流程解析
Unreal4源码拆解-UnrealBuildTool功能流程解析-Plugin 知乎专栏:UBT源码解析 4.2x功能不会差太多 主要功能 Plugin静态类,功能上大致是一个工具类,根据文件夹保存 ...
最新文章
- wine on ubuntu linux, and source insight 绿色版的安装
- 计算机英语语言学考研真题,考研类试卷英语专业语言学历年真题试卷汇编14
- mysql to mssql_MysqlToMsSql
- jmap+MAT实战内存溢出
- flask处理http request的时候是多线程还是多进程?
- 使用jquery datatables插件遇到fnReloadAjax的问题
- 中专计算机应用完整教学计划,中职生教学计划
- 为什么说 Transformer 就是图神经网络?
- sqlserver isnull函数使用
- java---多线程及线程的概念
- Arm 中国原 CEO 被“罢免”,新指定“官方”:已获员工大力支持
- 程序员如何高效准备简历和面试06:使用STAR法则表现自己
- Google 2016开发者大会
- Euler配置yum源
- 人工智能是怎么准备训练样本的
- 运用 Ntop 监控网络流量
- 作为优秀的DBA,究竟需要掌握多少种数据库?
- 新手向:如何用python打开网址
- 2021朔城区一中高考成绩查询,青春有志逐梦远行—朔城区一中2021届高三毕业典礼暨高考壮行大会...
- 5年大厂Java高频面试题及答案整理
热门文章
- 学生HTML个人网页作业作品下载 HTML5+CSS大作业——个人网页(4页)
- python空气质量分析与预测_python 空气质量AQI数据分析与预测 ---分析,相关系数矩阵...
- 面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生
- Linux主机访问实达终端辅口,实达系列终端操作说明.doc
- 【微信小程序】在wxss中引入其他的css
- Excel绝对引用和相对引用
- Java数据结构之二分查找/插值查找/斐波那契查找
- Codeforces Round #738 (Div. 2)——C. Mocha and Hiking
- 用python做股票智能投顾模型_如何用Python建模GGM模型并对股票估值?
- python求偏导函数_Python中多元函数的向量化偏导数