colinzhao 发表于 2018-6-26 19:48:48

三次函数S曲线运动控制效果(步进电机)

本帖最后由 colinzhao 于 2018-6-26 19:58 编辑

本想增加个视频,可能是之前的帖子有点久了,编辑不了,只能再开个帖子了,之前的帖子:
https://www.amobbs.com/forum.php?mod=viewthread&tid=5693195&highlight=S%E6%9B%B2%E7%BA%BF
视频:
https://v.youku.com/v_show/id_XMzY4NzkyNzc4NA==.html?spm=a2h3j.8428770.3416059.1
几年前也做了一个算法,但之前的算法参数普适性不足,无法直接通过传递函数推导,当时的视频:
https://v.youku.com/v_show/id_XNzI2NzM1MTg0.html?spm=a2h0k.11417342.soresults.dtitle

目前可实现以下的算法:
1、给定时间、最高速度、最小速度、位移量。S曲线运行,时间精度可以做到10uS的精度。所有的参数均为双精度浮点数。此方式可用于多轴的同步运行,比如三轴坐标系下,合成运行轨迹是直线。
2、给定最高速度、变加加速度、位移量。S曲线运行。
3、给定加速段时间、减速段时间、位移量、最高速度、最小速度。S曲线运行。
4、给定最高速度、位移量。S曲线运行,最小速度为最高速度的1/10000,匀速段为0。此方式是最平稳的运行方式。
5、最高输出频率时5MHz,256细分的步进电机可驱动到1万转,视频里面的最大速度3500转左右。
6、若有需要可精确控制S曲线任何段位的参数。
7、所有运行参数严格遵循控制函数,直接用三次函数计算运行参数,比如可以根据运动部件的重量,由公式计算出最合适的运行参数。
8、准备把这个做成带CAN总线的单卡,方便多轴运行。

发出来大家拍拍砖!!!!!!{:biggrin:}

su33691 发表于 2018-6-26 19:55:31

你发在51板块,难道是用8051实现?{:sad:}

colinzhao 发表于 2018-6-26 19:57:03

su33691 发表于 2018-6-26 19:55
你发在51板块,难道是用8051实现?

抱歉之前的帖子发错位置了,这次发帖又没注意看!!不过,打算做一个51都能用的运动控制小卡,串口命令。

bsz84 发表于 2018-6-26 20:02:33

期待三次函数S曲线的算法!

colinzhao 发表于 2018-6-26 20:04:37

bsz84 发表于 2018-6-26 20:02
期待三次函数S曲线的算法!

视频就是三次函数的 速度 = jerk*t^3,jerk是变加加速度参数。

whatcanitbe 发表于 2018-6-26 20:06:09

能说说思路吗?

colinzhao 发表于 2018-6-26 20:06:27

三次函数的优点就是加速度是S曲线,只不过是二次曲线,也就是说,驱动源对运动物体的作用力是S曲线,没有尖角,是较平稳的方式。

colinzhao 发表于 2018-6-26 20:08:40

whatcanitbe 发表于 2018-6-26 20:06
能说说思路吗?

V = jerk * t^3,这个是基础函数,其实都是以这个函数为基础,只是一个完整的S运行曲线是一个分段函数。

kinsno 发表于 2018-6-26 20:20:26

colinzhao 发表于 2018-6-26 20:08
V = jerk * t^3,这个是基础函数,其实都是以这个函数为基础,只是一个完整的S运行曲线是一个分段函数。 ...

jerk 是加加速度吗?,你这个就是指速度是这个jerk 乘以时间的3次立方吗?
公式是出自哪里,总不能拍脑门拍出来吧。。

colinzhao 发表于 2018-6-26 20:24:33

这个可不是我拍脑门啊,这个直接用高中物理就可以推倒出来的,这个是S曲线的前面第一段啊,不是一整端的

bsz84 发表于 2018-6-26 20:24:59

本帖最后由 bsz84 于 2018-6-26 20:26 编辑

jerk是类似加速度a一样变的,是不是把七段中的加加速度段(减加速度段)再分为三段?

vjcmain 发表于 2018-6-26 20:29:37

楼主,请问使用sigmoid 函数效果如何?


以下是网上找到的链接
sigmoid函数 y = 1/(1+exp(-in))是一个良好的阈值函数,函数连续、光滑,严格单调并关于(0,0.5)中心对称,函数值∈[-1.1],

其导数f'(x)=f(x)*,可以节约计算时间



https://www.cnblogs.com/Ich-Sun/p/6888303.html

colinzhao 发表于 2018-6-26 20:29:43

kinsno 发表于 2018-6-26 20:20
jerk 是加加速度吗?,你这个就是指速度是这个jerk 乘以时间的3次立方吗?
公式是出自哪里,总不能拍脑门 ...

最简单的加减速算法是T型曲线,可此时的加速度是矩形的,也就是说作用力是阶跃的,不好,所以就弄成二次曲线,此时的速度是二次S曲线,加速度是T型曲线,仍然有尖角,要求高的还是不爽,比如飞针测试机,一秒钟点十几下,针头不能抖动啊,所以,就再加一次,变成三次曲线,此时加速度是二次s曲线,速度是s三次曲线!加速度是二次曲线,意味着作用力是平滑的,不会有突变的作用力!手打这么多字........

colinzhao 发表于 2018-6-26 20:32:11

vjcmain 发表于 2018-6-26 20:29
楼主,请问使用sigmoid 函数效果如何?




这个是指数函数,之前有论文讲了这个,我有简单对比过,还没有推导过这个曲线下的加速度是什么样的,所以不好评论!

colinzhao 发表于 2018-6-26 20:33:36

bsz84 发表于 2018-6-26 20:24
jerk是类似加速度a一样变的,是不是把七段中的加加速度段(减加速度段)再分为三段? ...

在曲线上是相当于再分三段了

kinsno 发表于 2018-6-26 20:55:57

本帖最后由 kinsno 于 2018-6-26 20:58 编辑

colinzhao 发表于 2018-6-26 20:29
最简单的加减速算法是T型曲线,可此时的加速度是矩形的,也就是说作用力是阶跃的,不好,所以就弄成二次曲 ...

你说问题在哪,我晓得的。我是指你这个公式来源,你是不是这样推断的:
1V = a*t , 在这里a叫加速度
2. 你为了速度曲线,再加一级V = a*t*t , 在这里a叫加加速度
3. 完了,你又为了让加速度曲线化,再加1级 V= a*t * t *t ,在这里a叫加加加速度
那实际上,这个a是3个加字,即“加加加”速度,好绕口。。但实际上,这样方便应用在程序里吗?你是不是根据最高速度和时间,或者位移和时间,计算出这个“加加加”速度,完了反推回速度和位移。。
看来有空我得做一个曲线图试一下。。。
PS:但实际过程中,不晓得你考虑到另外一个平滑问题了没有,比如,我从A点到B点运动中,所有参数计算完毕,刚走到半路中时,突然B点发生变化,那么势必要重新计算,这个重新计出来的值和原来的值之间,是否会有阶跃 ,也许就不能平滑了。那位速度也是一样,从A速度向B速度迁移,突然B速度变化了。。




cs128815 发表于 2018-6-26 21:06:12

能共享出来 就牛逼了

colinzhao 发表于 2018-6-26 21:19:23

kinsno 发表于 2018-6-26 20:55
你说问题在哪,我晓得的。我是指你这个公式来源,你是不是这样推断的:
1V = a*t , 在这里a叫加速度
...

嗯,是这样的,不过这个是不考虑中途变化的,这个不是插补,而是点到点的运动控制。

cs128815 发表于 2018-6-26 21:28:13

开源吗?

kinsno 发表于 2018-6-26 21:31:04

colinzhao 发表于 2018-6-26 21:19
嗯,是这样的,不过这个是不考虑中途变化的,这个不是插补,而是点到点的运动控制。 ...

中途变化的有什么好的想法吗?其实中途变化的才是更贴近实际应用中的需求。。

colinzhao 发表于 2018-6-26 21:35:32

kinsno 发表于 2018-6-26 21:31
中途变化的有什么好的想法吗?其实中途变化的才是更贴近实际应用中的需求。。

...

中途变化这这个是连续插补,其实这个有点是伪命题,若运动控制是不确定的话,那很多条件都是不成立的!

colinzhao 发表于 2018-6-26 21:36:51

cs128815 发表于 2018-6-26 21:28
开源吗?

暂时不开源哦,打算做成低成本的算法卡,可以大幅度改善目前自动化设备的运行平稳性,以此为初衷的做这个。

icherry 发表于 2018-6-26 21:45:42

不知楼主是否带载试过,效果咋样?

bsz84 发表于 2018-6-26 21:54:54

本帖最后由 bsz84 于 2018-6-26 21:56 编辑

kinsno 发表于 2018-6-26 21:31
中途变化的有什么好的想法吗?其实中途变化的才是更贴近实际应用中的需求。。

...

笨方法是,若Va<Vb ,在七段运行中途变化到C,若Vc>Vb,且当前正运行在1段,则按Va->Vc继续。若Vc<Vb,且当前正运行在1段,则按当前时刻做第3段,完成后做第5段和第7段,只不过1,3段和5,7段不对称,也许有第6段,其它段类似

活到老学到老 发表于 2018-6-26 22:08:18

colinzhao 发表于 2018-6-26 21:36
暂时不开源哦,打算做成低成本的算法卡,可以大幅度改善目前自动化设备的运行平稳性,以此为初衷的做这个 ...

什么时候卡做出来,价格大概多少,想试试看

gzhuli 发表于 2018-6-26 22:48:55

kinsno 发表于 2018-6-26 21:31
中途变化的有什么好的想法吗?其实中途变化的才是更贴近实际应用中的需求。。

...

S曲线一般用于开环控制,这种应用场景除了触发限位和急停外基本上没有中途变化目的坐标的需求。
而闭环控制场合用电流和位置双环PID调好参的运动曲线其实跟S曲线很相似,这个是可以实时变化的,只是电流环满足不了加速度要求时位置环可能有过冲,但最终都能纠正过来不会有累积误差,开环过冲就没办法自己纠正了。

kinsno 发表于 2018-6-26 22:55:10

gzhuli 发表于 2018-6-26 22:48
S曲线一般用于开环控制,这种应用场景除了触发限位和急停外基本上没有中途变化目的坐标的需求。
而闭环控 ...

是的,实际上我试过这种S形曲线,在这种动态里用起来相当繁锁,并且效果并不在好。。还是双PID的效果比较好,流畅 。。
毕竟是大师,各方向都有涉猎啊。。


colinzhao 发表于 2018-6-26 23:13:14

icherry 发表于 2018-6-26 21:45
不知楼主是否带载试过,效果咋样?

带载测试过的,特别是在重载下效果极其明显,当运动部件重量很重时,没有S曲线几乎是不可想象的。

colinzhao 发表于 2018-6-26 23:15:26

活到老学到老 发表于 2018-6-26 22:08
什么时候卡做出来,价格大概多少,想试试看

打算做成两个U盘那么大的小卡,价格应该在一百来块吧,希望能广泛应用的。

colinzhao 发表于 2018-6-26 23:18:46

kinsno 发表于 2018-6-26 22:55
是的,实际上我试过这种S形曲线,在这种动态里用起来相当繁锁,并且效果并不在好。。还是双PID的效果比较 ...

两位都是高手,不过我还是认为这三种“技术”实际上是不同的,很难做对比,比如S曲线运动控制在于点对点的平稳运行,点胶机、贴片机、机器人等等,插补在于数控。闭环控制应该算是伺服的一部分了,这个在控制之后,属于执行机构。

colinzhao 发表于 2018-6-26 23:22:59

gzhuli 发表于 2018-6-26 22:48
S曲线一般用于开环控制,这种应用场景除了触发限位和急停外基本上没有中途变化目的坐标的需求。
而闭环控 ...

嗯,有些领域用伺服不用步进也是因为加减速算法做不好,间接使用了伺服驱动器的“滤波器”,以达到平稳运行的效果。不过这种情况就像您说的,会有过冲,需要根据负载调试。那么当有高精度的S曲线控制的话,伺服驱动器只需要调整在最大的“刚性(松下伺服是这么设置的)”即可,并不需要考虑负载的问题了。还有就是S曲线运控实际上是不存在过冲的,因为是开环实时运算,也可以理解为百分之百的前馈。

colinzhao 发表于 2018-6-26 23:24:31

活到老学到老 发表于 2018-6-26 22:08
什么时候卡做出来,价格大概多少,想试试看

对了,应该7月底就可以出来

xuxueliang 发表于 2018-6-27 21:29:11

先出来这样一个简易版本,逐渐迭代就好,点对点做好了,再考虑运动中变参数

bitter_rain 发表于 2018-6-28 16:30:52

colinzhao 发表于 2018-6-26 23:22
嗯,有些领域用伺服不用步进也是因为加减速算法做不好,间接使用了伺服驱动器的“滤波器”,以达到平稳运 ...

请问一下,在指定的脉冲数,指定的减速度的情况下,怎么做到速度正好降到0(或者是可柔和刹车的速度值)时,指定的脉冲数正好走完?

whatcanitbe 发表于 2018-6-28 19:58:42

本帖最后由 whatcanitbe 于 2018-6-28 20:00 编辑

以下回复是搜索来的
在实际运动中,最理想的速度曲线,当然是全匀速,但这不现实,因为缺少启动与停止的过程。所以,还得引入匀加速和匀减速过程,这样就是“三段式梯形速度曲线”; 但此时加速度是突变的,由 F=ma 可知,机床或工件受力会突然变化,引起剧烈振动。于是,将匀加速及匀减速两端再各新增一个变加速段(共4段),使整体加速度曲线连续化,这样就形成了常说的“七段式S形速度曲线”, 可让加速度线性变化,其变化率即为加加速(jerk),适当调整 jerk 的大小,可以控制振动的大小。更进一步,上述的 jerk 仅仅是受控,但并不连续(类似于“三段式梯形速度曲线”中的加速度), 于是引入“加加加速度” (jounce)概念,将“七段”演变成“15段”, 使加速度曲线由之前的梯形提升为更光滑的S形, 每一次算法级别的提高,复杂度都会大很多,但实际效果会有质的飞跃。

colinzhao 发表于 2018-6-29 05:53:10

bitter_rain 发表于 2018-6-28 16:30
请问一下,在指定的脉冲数,指定的减速度的情况下,怎么做到速度正好降到0(或者是可柔和刹车的速度值) ...

算法呀,严格按照函数,实时运算呀,实际上因为即使双精度浮点书也还是有误差,所以一般最后一个脉冲会有误差,这得额外做补偿!

colinzhao 发表于 2018-6-29 05:55:23

whatcanitbe 发表于 2018-6-28 19:58
以下回复是搜索来的
在实际运动中,最理想的速度曲线,当然是全匀速,但这不现实,因为缺少启动与停止的过 ...

嗯,很精准的科普哦,目前的算法就是这个,加加加速度了!

su33691 发表于 2018-6-29 06:25:43

既然用到串口命令,楼主应该把串口通讯协议公开一下吧。

su33691 发表于 2018-6-29 06:37:34

看楼主以前的帖子,用到了FPGA,那应该有电子齿轮比功能吧。

colinzhao 发表于 2018-6-29 06:49:11

su33691 发表于 2018-6-29 06:25
既然用到串口命令,楼主应该把串口通讯协议公开一下吧。

命令还没定义好呢,这个肯定得公开的,不然没法用了

colinzhao 发表于 2018-6-29 06:53:12

su33691 发表于 2018-6-29 06:37
看楼主以前的帖子,用到了FPGA,那应该有电子齿轮比功能吧。

因为目前的架构其实可以达到很高的时间精度,所以会利用这个优点,扩展基于can总线下的一些其他运控功能,比如低速下的插补,电子齿轮,甚至是并联机器人解算等

ap0705307 发表于 2018-6-30 15:04:10

7段和15段区别有多大?比如同样负载快个零点几秒?

colinzhao 发表于 2018-6-30 20:07:12

ap0705307 发表于 2018-6-30 15:04
7段和15段区别有多大?比如同样负载快个零点几秒?

区别可能得在某种情况下才会有,比如飞针快速运动启停时的抖动。

interstellar_tr 发表于 2018-6-30 21:00:02

顶起~~
很好的资料

vjcmain 发表于 2018-7-1 09:21:22

本帖最后由 vjcmain 于 2018-7-1 09:23 编辑

colinzhao 发表于 2018-6-26 20:32
这个是指数函数,之前有论文讲了这个,我有简单对比过,还没有推导过这个曲线下的加速度是什么样的,所以 ...


楼主您好,上图是我用微软数学绘制的sigmoid 函数的曲线,可以看到sigmoid 的一阶导(加速度)和二阶导(加加速)都是平滑的没有突变的。貌似不错。

zouzhichao 发表于 2018-7-1 10:44:04

https://debugdump.com/t_1069.html

zouzhichao 发表于 2018-7-1 10:44:40

https://debugdump.com/t_1135.html

gonghuwei 发表于 2018-7-1 11:27:40

这个厉害。

whatcanitbe 发表于 2018-7-1 11:42:07

找到两篇跟这个相关的论文。有账号的能下载上传到这里就好了。

一种新型的Jerk连续加减速控制方法研究
http://www.doc88.com/p-1661941907589.html

高质量加工中四次多项式速度规划算法研究
http://www.doc88.com/p-8901953688849.html

vjcmain 发表于 2018-7-1 12:46:10

zouzhichao 发表于 2018-7-1 10:44
https://debugdump.com/t_1135.html

大神6666, 啥算法

zouzhichao 发表于 2018-7-1 13:51:13

vjcmain 发表于 2018-7-1 12:46
大神6666, 啥算法

就是你提到的那个算法实现的啊

vjcmain 发表于 2018-7-1 13:57:24

zouzhichao 发表于 2018-7-1 13:51
就是你提到的那个算法实现的啊

实际跑起来效果如何?

zouzhichao 发表于 2018-7-1 14:05:46

vjcmain 发表于 2018-7-1 13:57
实际跑起来效果如何?

还行吧,很久以前做的,效果还可以,运算量一般

colinzhao 发表于 2018-7-3 00:46:58

vjcmain 发表于 2018-7-1 09:21
楼主您好,上图是我用微软数学绘制的sigmoid 函数的曲线,可以看到sigmoid 的一阶导(加速度)和二阶导 ...

加速度不是一阶导,加加速度不是二阶导呀,若是导数的话就不用推导就看得出来的,因为就是斜率的,曲线是平滑的话,斜率也一定是平滑的。应该是指数函数的开平方的。

vjcmain 发表于 2018-7-8 09:51:26

colinzhao 发表于 2018-7-3 00:46
加速度不是一阶导,加加速度不是二阶导呀,若是导数的话就不用推导就看得出来的,因为就是斜率的,曲线是 ...

速度对时间的导数=加速度这个有错吗?

su33691 发表于 2018-7-18 12:32:37

楼主的串口通讯协议写好没有?
放出来让大伙拍拍砖。{:lol:}

colinzhao 发表于 2018-7-23 14:11:50

su33691 发表于 2018-7-18 12:32
楼主的串口通讯协议写好没有?
放出来让大伙拍拍砖。

还没呢{:cry:}

vermon 发表于 2018-7-24 06:54:55

楼主,你可以做这样一个东西,肯定大卖。   将普通的三轴脉冲方向的信号,输入到你的板子,然后进行三次加速度重规划,整体延迟0.1秒或则更长时间(计算和前瞻时间),然后再输出驱动各种电机。      因为这样不需要改动之前的太多东西,然而又可以在开环结构下达到立竿见影的效果。

stevenniu500 发表于 2018-11-3 09:57:00

我有个问题,这种S曲线的运行方式,原点是如何定义的呢?单纯的用计步数的方法,开环的控制模式下,肯定会存在误差。还是也需要用一种接近开关来不时的对原点进行校准呢?

落叶知秋 发表于 2018-11-3 10:57:23

stevenniu500 发表于 2018-11-3 09:57
我有个问题,这种S曲线的运行方式,原点是如何定义的呢?单纯的用计步数的方法,开环的控制模式下,肯定会 ...

控制误差一般都会在1个脉冲内,接近开关回原点是为了校准机械结构的误差

stevenniu500 发表于 2018-11-3 11:43:38

落叶知秋 发表于 2018-11-3 10:57
控制误差一般都会在1个脉冲内,接近开关回原点是为了校准机械结构的误差 ...

对的,这种机械误差是很难消除的吧?所以也就经常需要去回原点校正,,这样才能起到消隙的效果。

colinzhao 发表于 2018-11-3 12:37:45

最近有点进展,正想发帖呢,跟着这个贴吧,发个完美的S速度曲线上来给大家看看
下面蓝色的位移曲线,灰色的是速度曲线

huangqi412 发表于 2018-11-3 12:56:38

zouzhichao 发表于 2018-7-1 14:05
还行吧,很久以前做的,效果还可以,运算量一般

网站架在家里电脑?

vjcmain 发表于 2018-11-3 21:24:30

colinzhao 发表于 2018-11-3 12:37
最近有点进展,正想发帖呢,跟着这个贴吧,发个完美的S速度曲线上来给大家看看
下面蓝色的位移曲线,灰色的 ...

cool!! MCU 还是FPGA 做的?

colinzhao 发表于 2018-11-4 00:49:20

vjcmain 发表于 2018-11-3 21:24
cool!! MCU 还是FPGA 做的?

MCU+CPLD做的

picobox 发表于 2018-12-15 14:13:08

colinzhao 发表于 2018-11-4 00:49
MCU+CPLD做的

CPLD里面实现S曲线?

colinzhao 发表于 2018-12-15 17:33:40

picobox 发表于 2018-12-15 14:13
CPLD里面实现S曲线?

嗯,是的!

活到老学到老 发表于 2018-12-15 21:46:31

colinzhao 发表于 2018-12-15 17:33
嗯,是的!

板子做出来了吗,等着买了试试看呢

wowangru 发表于 2018-12-15 22:02:24

cpld做的话不简单啊!!!

colinzhao 发表于 2018-12-15 22:22:28

活到老学到老 发表于 2018-12-15 21:46
板子做出来了吗,等着买了试试看呢

板子是做出来了,不过还没调试完善呢,sorrysorry!!

活到老学到老 发表于 2018-12-15 22:37:05

colinzhao 发表于 2018-12-15 22:22
板子是做出来了,不过还没调试完善呢,sorrysorry!!

谢谢回复

wowangru 发表于 2018-12-18 21:12:32

colinzhao 发表于 2018-6-26 20:04
视频就是三次函数的 速度 = jerk*t^3,jerk是变加加速度参数。

这个公式不对吧!!!!V=1/2jerk*t^2才对啊   S曲线的第一段      现在国内2次函数 变加速度的S曲线运动都做不好。。。 3次完全没有必要   国外的采用加加速度做的二次S曲线运动已经非常的稳定了加加速度-加速度-速度- 位移,你整了个加加加速度-加加速度-加速度-速度- 位移,有什么意义

colinzhao 发表于 2018-12-18 21:19:58

wowangru 发表于 2018-12-18 21:12
这个公式不对吧!!!!V=1/2jerk*t^2才对啊   S曲线的第一段      现在国内2次函数 变加速度的S曲线运动 ...

3次是使得作用力是S曲线变化的最低次数了,二次曲线加速度波形是三角形,存在尖角,尖角以为这作用力存在突变。

wowangru 发表于 2018-12-19 10:06:32

colinzhao 发表于 2018-12-18 21:19
3次是使得作用力是S曲线变化的最低次数了,二次曲线加速度波形是三角形,存在尖角,尖角以为这作用力存在 ...

加速度存在尖角我觉得没有关系。力总会有拐点!!但是力没有波动!都属于缓慢过度。这样应该是运行稳定性和效率的最佳匹配。。。   只要不是速度存在尖角。。。。

大眼睛盒 发表于 2018-12-20 14:12:24

vjcmain 发表于 2018-7-1 09:21
楼主您好,上图是我用微软数学绘制的sigmoid 函数的曲线,可以看到sigmoid 的一阶导(加速度)和二阶导 ...

用你这个函数做拟合怎么样 可以做S控制么

doujiang 发表于 2019-1-1 15:45:35

wowangru 发表于 2018-12-15 22:02
cpld做的话不简单啊!!!

这个用CPLD或者FPGA实现挺简单的,3个加法器就能实现。实际上,梯形加减速只需要一个加法器、S型加减速需要两个加法器、楼主所说的这种曲线只需要3个就能实现,根本不需要做复杂的数学运算。

doujiang 发表于 2019-1-1 15:48:28

这个是我用两个加法器实现的标准7段S型加减速。

doujiang 发表于 2019-1-1 16:14:03

3次函数S曲线(上面)与2次函数S型曲线(下面)的对比。

vjcmain 发表于 2019-1-1 16:19:08

doujiang 发表于 2019-1-1 16:14
3次函数S曲线(上面)与2次函数S型曲线(下面)的对比。

cool !是否方便提供公式?

wowangru 发表于 2019-1-1 17:20:19

doujiang 发表于 2019-1-1 16:14
3次函数S曲线(上面)与2次函数S型曲线(下面)的对比。

FPGA 实现确实简单对加速度 速度 积分得到路程。。。但是其中每个拐点路程    再加上起点速度 起点加速度末速度运算很复杂!!   

wowangru 发表于 2019-1-1 17:22:06

doujiang 发表于 2019-1-1 16:14
3次函数S曲线(上面)与2次函数S型曲线(下面)的对比。

可否交流下 大家相互提升 我也做了一个   

colinzhao 发表于 2019-1-1 18:49:38

doujiang 发表于 2019-1-1 16:14
3次函数S曲线(上面)与2次函数S型曲线(下面)的对比。

做出速度S曲线还是不难的,不过要定脉冲数、定加速度、与输出脉冲对应起来,就比较有难度了。所有的参数都需要可推导才行,由一个公式推导,这样实际才能用得上。

colinzhao 发表于 2019-1-1 18:50:22

doujiang 发表于 2019-1-1 16:14
3次函数S曲线(上面)与2次函数S型曲线(下面)的对比。

看出来二次曲线跟三次曲线还是有很大差异的!

colinzhao 发表于 2019-1-1 18:57:06

doujiang 发表于 2019-1-1 16:14
3次函数S曲线(上面)与2次函数S型曲线(下面)的对比。

我目前没有做七段,因为加减速段正常是不需要恒加速段的,也就是五段或者四段S曲线。你目前可以定位移(脉冲数)吗?

doujiang 发表于 2019-1-11 15:46:54

colinzhao 发表于 2019-1-1 18:57
我目前没有做七段,因为加减速段正常是不需要恒加速段的,也就是五段或者四段S曲线。你目前可以定位移( ...

可以,搜下相关专利,很多都讲了变化点的判断方法。实现也挺简单。FPGA逻辑资源消耗大概在700个左右。

dukelec 发表于 2019-1-11 17:36:46

本帖最后由 dukelec 于 2019-1-11 17:49 编辑

doujiang 发表于 2019-1-11 15:46
可以,搜下相关专利,很多都讲了变化点的判断方法。实现也挺简单。FPGA逻辑资源消耗大概在700个左右。 ...

以當前速度和加速度順着推減速到 0 所需要路程,再與當前路程差做對比,來判斷變化點是非常不準的做法,會導致收尾到不了指定點。

因爲高速部分的一個小誤差帶來的位移對於低速部分來說是非常巨大的。

正確做法是根據當前位置差、速度和 jerk 去反推最大加速度,當算出來的最大加速度超過用戶設置的最大加速度值,則當做第 5 階段(加減速)的拐點,並每次都以實時算出來的加速度爲準來修改速度。
如果已經到第 7 階段(減減速),則是要反推 jerk, 同樣計算出來的 jerk 可能會稍微超出所設置的 jerk 值。

這種在規劃過程中不斷修正的方式,可以保證收尾非常乾淨,其實 T 型加減速要做好也是類似的方式。

pengtaoABC 发表于 2019-1-11 20:12:45


先出来这样一个简易版本,逐渐迭代就好,点对点做好了,再考虑运动中变参数

wzbwzb 发表于 2019-1-13 10:08:02

你用stm32做了伺服电机?

Error.Dan 发表于 2019-1-13 12:58:13

dukelec 发表于 2019-1-11 17:36
以當前速度和加速度順着推減速到 0 所需要路程,再與當前路程差做對比,來判斷變化點是非常不準的做法, ...

这个就是典型的位置前馈算法,其实大部分的系统里面有这个就够了,我以前做过一个类似的就是定点运动过程中根据剩余位移调整最高速阈值,保证系统在启动和停止的点上是以一个无限接近0的速度就可以有效避免冲击。
当然,速度调整怎么调整也是花了很多时间的,而且跟物理性能是强相关的,我那个东西简单加减速直接按2倍速率翻上去就行了,最后效果还行~

dukelec 发表于 2019-1-13 14:43:19

本帖最后由 dukelec 于 2019-1-13 14:55 编辑

Error.Dan 发表于 2019-1-13 12:58
这个就是典型的位置前馈算法,其实大部分的系统里面有这个就够了,我以前做过一个类似的就是定点运动过程 ...

直接 x2 抖动会比较大,毕竟 S 的目的就是避免加速度突变。
可以用同样的计算路程的方式,多次拟合得到更精确的值;不过逆向求解公式是最好的做法,公式自身可以是经过拟合得出的。

不过我也就大概推导了起始为 0 的公式,因为实际用还要处理各种起始不为 0 和中途修改目标位置和目标点速度的情况,比较麻烦,暂时懒的搞,用 T 加减速就够了。
我现在的应用场合是要配合视觉识别,要根据实时识别分析出来的结果去更新目标位置和速度。
目标速度不为 0 的场合:譬如给盒子打标签,机器要动态追着盒子,保持同步静止,跟飞机空中加油作业类似。

——————————— 更新 —————————————

重新看了下,你 x2 的是加速度的上限,加速度自身依然是按照 jerk 连续增减。
这种方式修正比较慢,收尾还是会有不同步的问题。

而且,最后一个减减速阶段,需要调整的是 jerk 值,你是怎么做的?来回在第 6 和第 7 阶段之间切换?

doujiang 发表于 2019-1-14 10:39:27

dukelec 发表于 2019-1-11 17:36
以當前速度和加速度順着推減速到 0 所需要路程,再與當前路程差做對比,來判斷變化點是非常不準的做法, ...

感谢你的回复,可能是方法不同,我现在没有遇到你说的这个问题。

doujiang 发表于 2019-1-14 10:41:24

colinzhao 发表于 2019-1-1 18:57
我目前没有做七段,因为加减速段正常是不需要恒加速段的,也就是五段或者四段S曲线。你目前可以定位移( ...

对了,我想问下楼主,变速过程中,你这个是每个脉冲调速还是每隔一段时间?我现在实现的是每个脉冲调速。

colinzhao 发表于 2019-1-14 13:09:13

doujiang 发表于 2019-1-14 10:41
对了,我想问下楼主,变速过程中,你这个是每个脉冲调速还是每隔一段时间?我现在实现的是每个脉冲调速。 ...

是单脉冲调整的,你这个实现方式我之前有做过,这个可能会遇到个问题,很难跟实际参数对应起来,比如给定0.1G^2的变加速度,或者要求在某个点为X个G的加速度时,这个几乎无法实现,我目前希望做到精确控制加速度。

doujiang 发表于 2019-1-14 13:20:42

colinzhao 发表于 2019-1-14 13:09
是单脉冲调整的,你这个实现方式我之前有做过,这个可能会遇到个问题,很难跟实际参数对应起来,比如给定 ...

嗯,后面有时间多交流。

shinemotou 发表于 2019-1-15 16:35:10

群主QQ多少   加我347828751

dongjiren2012 发表于 2019-1-16 14:19:36

我来参观学习 这个对于控制来说太重要了

shinemotou 发表于 2019-5-5 14:21:29

kinsno 发表于 2018-6-26 22:55
是的,实际上我试过这种S形曲线,在这种动态里用起来相当繁锁,并且效果并不在好。。还是双PID的效果比较 ...

在吗请教双PID

myqiang1990 发表于 2019-5-7 22:02:37

不用什么S什么指数曲线,直接PID就可以搞定,而且实时计算实时动态调整~

doujiang 发表于 2019-6-19 18:01:45

myqiang1990 发表于 2019-5-7 22:02
不用什么S什么指数曲线,直接PID就可以搞定,而且实时计算实时动态调整~

看过楼主的PID控制步进电机视频,效果很赞,请问能否把V-T曲线贴出来看看呢?

doujiang 发表于 2019-7-2 11:20:16

whatcanitbe 发表于 2018-7-1 11:42
找到两篇跟这个相关的论文。有账号的能下载上传到这里就好了。

一种新型的Jerk连续加减速控制方法研究








知网花钱下载的,贡献给大家!
页: [1] 2
查看完整版本: 三次函数S曲线运动控制效果(步进电机)