找回密码
 欢迎注册
楼主: gxqcn

[分享] “全局15段超顺滑S形速度曲线算法”研发成功了!

  [复制链接]
发表于 2016-6-26 12:48:10 | 显示全部楼层
gxqcn 发表于 2016-6-26 10:44
在实际运动中,最理想的速度曲线,当然是全匀速,但这不现实,因为缺少启动与停止的过程。

所以,还得引 ...

之前用matlab的simulink进行隔振系统主动控制时,就是用数值方法来模拟阶跃函数,即将突变处用S型曲线来实现竖直直线的效果(当然是在很短时间内),也是利用梯形速度规律。只是后来发现这种方法由于时间空隙非常小,但又不是为0,因此导致控制系统对这个误差很敏感(系统是多自由度非线性强耦合的)。所以后来就放弃了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-6-26 13:58:26 | 显示全部楼层
不清楚你实现的方式,
而实际上,可以自由设置最大速度、最大加速度、最大加加速、最大加加加速,
即可构造出不同的速度曲线,参数间不存在耦合性。

七段式S形速度曲线,数年前我已实现,并得到实际验证,效果非常好,
而最新的“15段超顺滑S形速度曲线算法”,也即将上机床测试。
(先前的“七段式S形速度曲线”算法,可看作在新算法中把最大 Jounce 设置成无穷大时的特例)

之所以还特意强调“全局”,是因为从全局出发进行构造,
一段微线段可能跨越速度曲线的多个阶段,
也可能速度曲线上的一个阶段包含多条微线段,
这样的结果,将是全局时间最优。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-6-26 14:04:21 | 显示全部楼层
在开发的过程中,我曾将输出的脉冲序列(纳米级,每毫秒)存文件,然后在 MatLab 中仿真,结果显示完全符合预期。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2016-6-27 09:36:10 | 显示全部楼层
“全局15段超顺滑S形速度曲线算法” 是 适用于任意给定的路径么
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-6-27 09:38:49 | 显示全部楼层
对呀!
而且是全局性的(见 12# 说明)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2016-6-27 10:31:41 | 显示全部楼层
这个是不是实时的,类似反馈的原理。根据之前和当前的状态预测和修正之后的状态?是否能做成DSP芯片。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-6-27 14:15:49 | 显示全部楼层
这个实时需要一定的缓冲实现。

先前瞻一定段数的刀路程序,
然后得到这条线路上的指定点的限速,
通过算法构造出符合条件的速度曲线。

依此速度曲线,
插补出位置,发脉冲序列进缓存,
设备指定间隔时间读取脉冲并驱动伺服。
当插补器将该段插补脉冲计算完成,
即可进行下一个序列的前瞻规划。

如果算法计算效率跟不上,
则会造成加工不必要的停顿,
这就是要求它足够快,具备实时性。

不清楚DSP的浮点能力如何,
因为除了最后输出的脉冲指令是整型外,
之前的都是基于浮点的,一切都是为了高精度。

在ARM上,是跑得溜溜的,
因为不仅仅是算法本身高效,
而且作了大量优化。

点评

我说的误差问题就是没有缓冲造成的代数环问题,因为反馈是同时的,不存在先后。当然,可以加入一个延时装置(也就是你说的缓冲),来避免代数环,不过这就造成了误差,对非线性系统效果很明显。我做过这个科研项目。  发表于 2016-6-28 12:43
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-6-27 14:21:05 | 显示全部楼层
马上要登机了,用手机发的,易重复,抱歉。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2016-6-28 13:32:37 | 显示全部楼层
我觉得可以从数学的角度来解决这个变分问题:已知走刀路径s(一般用参数方程表示,因为路径不一定是函数,甚至不光滑),目标是找到一个光滑的速度曲线,使得完成整个走刀时间最短。
设走刀路径的参数方程为 $$\boldsymbol s(u)=\left(x(u),\,y(u)\right)\;(0\leqslant u\leqslant 1)$$弧微分`\dif s=|\dif \boldsymbol s|=\sqrt{\dif x(u)^2+\dif y(u)^2}`,对于任意速度曲线v(u),有泛函极值问题$$\min T(v)=\int_0^1\frac{\dif s}{v(\boldsymbol s(u))}$$不过这与实际过程还是有区别的,比如对于自相交的走刀路径,走刀的先后顺序可以不按照参数方程参数 `u` 连续从0到1变化的顺序来绘制。例如,一个“8”字型路线(参数方程有很多,详见http://www.zhihu.com/question/40717216),可以走两个“3”(左右对称),或者两个“0”(上下对称),而不是参数方程那样走两个"S"(中心对称),都能保证走刀是连续的。
另外,实际过程中,难免有惯性效应(当然,伺服电机可以解决)或微小误差(比如电路信号的稳定性,或者刀头过热造成加工表面变形等等,不过这些外界因素可尽量降低),这都是在应用过程中会出现的问题,而非简单数学意义上的解就能解决。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-6-29 23:02:38 | 显示全部楼层
仔细拜读了楼上内容好几遍,
感觉咱们讨论的问题实际上并不在一个频道上。

我说的是指通过前瞻一些刀路,依所给的一些运动限定(比如说最大向心加速度等),
自动规划出一个时间尽可能短、尽可能平滑的速度曲线,
然后依此得到指定插补间隔周期时,各轴应运动的脉冲数,
这就是通常说的“前插补”,也是核心插补最重要的一环。

还有些速度平滑的算法,是伺服等设备供应商自己开发的,
是出于保护其硬件考虑的(用户可以选择关闭,或设定起效的级别),
这就是所谓的“后插补”,因其无法保证多轴联动位置的准确性,不推荐。

楼上的说的,则是需要根据反馈实时调整,这个应该是“闭环”的问题,
一般来说,也是在“前插补”的基础上,在实际工作时,对位置等测量后的一个微小补偿,
正如作者所言,这不属于数学问题,而更象是个工程问题。

而我的工作,可看作纯粹是个数学问题(虽然也有许多物理学公式需推导),
将“前插补”尽可能做好,其优劣对加工质量及机床都有很大影响。
而它无需上设备检验,仿真运行即可。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-25 14:33 , Processed in 0.058452 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表