智能车制作

标题: 三轮控制之串级pid(后续)——By 小学生 [打印本页]

作者: 小学生做车来了    时间: 2018-7-31 11:35
标题: 三轮控制之串级pid(后续)——By 小学生
        如同电路中的串并联一样,pid控制也可以被串并联,在这里我只讲串联。
        先说一下三轮中控制的流程吧,首先是感应电动势的ADC采集,然后分析这些值,得出一个偏差,再依据这个偏差和车期望的前进速度,算出左右轮的期望速度,以此来控制车的前进。其实在这里,就已经存在着第一级pid控制了(先假设没转速闭环):
        第一级pid控制:反馈量:电感值。进而算出偏差,也可以理解为反馈为车的偏差。
                                期望值:因为要车寻迹,因此期望车的偏差为0,所以期望值恒为0。
                                输出量:根据反馈与期望,经pid计算得到一个输出,这个输出直接和差速成正比,再和期望前进速度加减,得到左右                            轮的期望速度。
        在这里。通过电感的反馈,完成了第一级pid的控制,这里就一个pid控制,接下来再加进去一个pid控制,和它串起来,就形成了2个pid
控制串联起来的串级控制。如何再加呢?电机转速那里可以根据编码器的反馈再形成一个pid控制,这个时候控制流程变成这样:
        计算偏差->一级pid控制->得出一级pid输出->以此计算左右电机期望速度->二级pid控制->得出二级pid输出(也就是占空比)
        这里就形成了串级控制,它和单级pid控制相比起来,多了一路反馈,如果说单级pid是能使车逼近偏差为0的控制的话,串级pid就是在使车逼近偏差为0的的基础上,再使电机转速逼近我的期望的控制。串级相比单级,能控制的物理量变,使车的控制性能变得更好,相信大多数用了电机闭环的都感受得到和没闭环的天差地别吧。
         接下来再讲一讲角速度在串级控制中的引入,以形成三个pid控制的串级控制。
         首先是我这个pid控制该放在什么位置?我先给这三个控制编个号。偏差闭环为1,转速闭环为2,角速度闭环为3.既然是串级,那么我123,132,213,231,312,321都是串联啊,那么我随便串都行?答案肯定是否,在控制中,逻辑的先后非常重要,就如同直立的控制,肯定是角度外环角速度内环,而不能反着来。再举个比较粗鲁的例子,是先有你父母,再有你,而不能倒着来。在这里,我是用的132这样的串联方式,为什么?任何控制系统都得有一个输入,而与输入直接相关的,就是电感,所以把1偏差闭环放前面,而转速闭环2是在期望速度确认的情况下进行的pid控制,而角速度闭环3是根据角速度的反馈来调节差速,或者说调节左右电机的期望速度,所以应该放在2的前面.
          这个时候控制流程如下:
          计算偏差->控制1->一级pid输出->以此计算左右电机期望速度->控制3->二级pid输出(调整后的左右电机期望速度)->控制2->三级pid输出(也就是占空比)
           至此,就完成的3个pid的串联(串级控制)了,当然,在这过程中会遇到许多问题,比如我是角速度,如何调整左右电机的速度?
根据高中物理知识,差速=角速度*间距,便可将角速度与差速联系起来,进而控制左右轮的期望速度了。除此之外,还有许多细节,这里我就不一一细说了,毕竟自己探究出来的,才有成就感,才有自己学到了东西的感觉嘛。
            做了2年了,说实话并没有在论坛上学到什么,我这个老司机也快要下车了,希望走之前能用行动改变一下这里。毕竟这比赛都做了这么多年了,感觉强的还是那么些人,那么些学校。如果大家全民提速,百花齐放,思想多分享分享,也不至于这样吧。
            话不多说,闪人

作者: 李白不白    时间: 2018-7-31 15:40
顶顶顶顶顶顶顶顶
作者: L_K    时间: 2018-7-31 16:46
大佬优秀
作者: c767831092    时间: 2018-7-31 17:09
通常内环频率要大于等于外环,编码器采样通常使用10ms,那么内环控制频率仅有100Hz,即使是5ms也只是200Hz,远低于最外环传感器和中间环角速度,这样的串级控制效果就被大打折扣,甚至可能还不如直接用传感器单环控制的效果。串级的方案不止一种,各有优缺点。比如将传感器数据拟合成期望转向半径R,根据当前速度就可以直接计算出期望转向角速度,直接控制角速度环即可,6050最高可以8KHz。也可以使用当前角速度和当前速度直接计算出当前转向半径,直接控制转向半径环,频率同样可以做到很高
作者: 小学生做车来了    时间: 2018-7-31 17:42
李白不白 发表于 2018-7-31 15:40
顶顶顶顶顶顶顶顶

感谢顶贴

作者: 小学生做车来了    时间: 2018-7-31 17:53
c767831092 发表于 2018-7-31 17:09
通常内环频率要大于等于外环,编码器采样通常使用10ms,那么内环控制频率仅有100Hz,即使是5ms也只是200Hz ...

再控制周期上我确实如你所说,内环不过5ms的周期。控制周期对控制带来的影响我确实没有探究过,感谢提供思路
作者: 来一杯烈酒    时间: 2018-7-31 17:53
给大佬顶帖
作者: 麋鹿迷路    时间: 2018-7-31 22:48
给大佬顶贴
作者: 北一前三    时间: 2018-8-1 23:26
c767831092 发表于 2018-7-31 17:09
通常内环频率要大于等于外环,编码器采样通常使用10ms,那么内环控制频率仅有100Hz,即使是5ms也只是200Hz ...

大佬 那我是不是可以 让内环执行几次之后再执行外环呢  这样串级的效果会不会好一点?

作者: c767831092    时间: 2018-8-2 10:42
北一前三 发表于 2018-8-1 23:26
大佬 那我是不是可以 让内环执行几次之后再执行外环呢  这样串级的效果会不会好一点?

正确的做法是让内环频率提高,而不是为了让内环比外环快而去降低外环频率

作者: 菜鸟自蒙    时间: 2018-8-3 10:36
学习一下
作者: 尔世电子    时间: 2018-8-5 00:04
给大佬顶帖
作者: 767124048    时间: 2018-8-5 14:58
楼楼我看你这个思路好几天了 关于角速度窜进去 当差速 调整期望速度  我一直没看懂。。
偏差PID得到差速 (左右轮期望速度)后,还需要角速度怎么调整,不应该直接接编码器(真实差速)然后PID吗?实在不知,还望解答😛

作者: 767124048    时间: 2018-8-5 14:58
楼楼我看你这个思路好几天了 关于角速度窜进去 当差速 调整期望速度  我一直没看懂。。
偏差PID得到差速 (左右轮期望速度)后,还需要角速度怎么调整,不应该直接接编码器(真实差速)然后PID吗?实在不知,还望解答😛

作者: 小学生做车来了    时间: 2018-8-5 17:21
767124048 发表于 2018-8-5 14:58
楼楼我看你这个思路好几天了 关于角速度窜进去 当差速 调整期望速度  我一直没看懂。。
偏差PID得到差速 ( ...

你这里是有一个误区的,就是我编码器能采集到左右轮速度,那它们差速不就能相减直接得到吗?对,是可以这么操作得到一个差速,但这个差速是会受你的抬轮,打滑等原因,会产生一部分空转的转速混进去而得到的差速,这个差速错误地反应你车身实际的转向差速,而陀螺仪则不会,所以他们不能等价

作者: leguandedidiao    时间: 2018-8-5 23:03
电机如何闭环?不太懂 。 。能解释下吗?
作者: 小学生做车来了    时间: 2018-8-6 13:57
leguandedidiao 发表于 2018-8-5 23:03
电机如何闭环?不太懂 。 。能解释下吗?

开环控制直流电机,就是你如同一个瞎子样,只知道给电机电压,而不知道它转的快或慢,这就很难受了。而闭环就相当于你能亲眼看到电机的转的快慢,然后你觉得快了,你就降低电压,你觉得慢了,就加电压。
而看到电机的速度这个过程,被称为反馈,因此,要想能闭环,至少要有反馈。
这个时候你有了反馈,也就是电机的实际转速,还有你想让它达到的速度,也就是期望。当期望与不相符的时候,你就要通过一系列“手段”使它达到期望,而这个“”手段”就是算法。常用的简单的就是pid控制。这个网上一大堆我就不说了。
通过这样的一个流程,就能形成一个闭环控制了
这样说你还有疑问吗

作者: 767124048    时间: 2018-8-8 15:56
小学生做车来了 发表于 2018-8-5 17:21
你这里是有一个误区的,就是我编码器能采集到左右轮速度,那它们差速不就能相减直接得到吗?对,是可以这 ...

我理解的  3  2后面窜起来作用有点雷同,我一直用的1 3窜,一直想用132窜 。 如果3 2都是进行差速调整。3在正常情况正确,2在非正常情况把差速拉回。是这个意思吧?

因为我认为3  2作用都是和1相减    ,所以还是不太懂怎么吧1 3 2一起窜。(2是在特殊情况下用吗)
楼主好人⊙ε⊙

作者: 小学生做车来了    时间: 2018-8-9 00:19
767124048 发表于 2018-8-8 15:56
我理解的  3  2后面窜起来作用有点雷同,我一直用的1 3窜,一直想用132窜 。 如果3 2都是进行差速调整。3 ...

3的作用是使角速度稳定可控,且有强的响应能力,也就是使差速稳定可控
2的作用是使转速稳定可控
它们的闭环控制的量,或者说指标是不一样的,但是最终都是控制左右轮的速度,所以体现出来感觉一样都是进行差速调整。
你说的3   2的作用都是和1相减是啥意思,不是很明白。
你还是不懂怎么串可以这么理解。每一个pid控制都是加强了对某个指标的控制
而你只用1  3 的话 ,也就是实现了偏差为0 ,且角速度是我期望角速度的控制,也就是使偏差和角速度这两个指标的控制被加强了
而引入  1 3  2 的话,就在1  3 的基础上,对电机轮子的转速控制也加强了
至于如何串起了    就是一个pid 的输出 作为另一个pid 的输入  这样,2个pid就串起来了

作者: 小学生做车来了    时间: 2018-8-9 14:17
767124048 发表于 2018-8-8 15:56
我理解的  3  2后面窜起来作用有点雷同,我一直用的1 3窜,一直想用132窜 。 如果3 2都是进行差速调整。3 ...

你可以这样理解,每个pid控制都对应一个指标的具体控制3 角速度闭环,也就是使车的加速度能达到我的期望
2 轮子转速闭环,也就是使车轮的转速能达到我的期望
所以32雷同,不是很准确的。只能说他们具体表现出来的结果都是使车的差速达到我的期望。但是他们的途径是不一样的
一个是强行使轮子速度达到我的期望速度,它们之间的差也就是差速,可控了。
一个是强行使车的角速度达到期望,角速度和差速成正比,也就是差速可控了。
既然都能使差速可控,为什么还要串呢? 首先是3 和 2对应的物理量不一样,你在控制某个东西时,是从单一面控制好还是从多个方面都控制好?粗略理解的话大概就是这个道理吧。
3  2  作用都是和1 相减?不是很理解这句
132 一起串,2 不应再特殊情况用(参考上面我的分析),
pid间如何串联的话, 就是 吧一个pid的输出作为另一个pid 的输入,这样pid就串起来了
1 输出 作为3 输入  3 输出作为 2 输入   2 输出作为电机pwm波  就这样

作者: Pandakai    时间: 2018-12-26 18:54
楼主你好有些地方我不太理解,我想请问一下比如一阶pid算出一个输入值a,那么这个a作为输入给二阶,二阶pid中的P项I项D项这些值怎么算,a应该和什么数相减
作者: 小学生做车来了    时间: 2018-12-28 16:48
Pandakai 发表于 2018-12-26 18:54
楼主你好有些地方我不太理解,我想请问一下比如一阶pid算出一个输入值a,那么这个a作为输入给二阶,二阶pid ...

首先。。pid;理论上是能算出大概的,但很复杂,所以我们基本上是“调试”出来 的。
其实,第一个pid计算的输出作为第二级pid的输入,  那始终也是输入,那么久应该跟反馈做负反馈运算,进行第二次pid运算

作者: anyint    时间: 2019-3-2 22:25
大佬,请问串级pid,方向环调好了,速度环怎么调?,方向环pid输出作为输入给速度环,速度环是空载的时候调好的,但是上了赛道就感觉速度环滞后了车老是晃来晃去,或者说由于摩擦系数不同,导致速度环控制电机反应不过来。怎么调外环(速度环)?大佬求教,直接上赛道调有点蒙蔽,没有波形分析实在是有点难受
作者: 烈炎风魂    时间: 2019-4-15 21:08
嗯嗯 感谢
作者: Joy_begew    时间: 2019-5-18 21:47
顶,优秀
作者: 小学生做车来了    时间: 2019-5-23 17:14
anyint 发表于 2019-3-2 22:25
大佬,请问串级pid,方向环调好了,速度环怎么调?,方向环pid输出作为输入给速度环,速度环是空载的时候调 ...

先针对你说的最后的问题,没有波形分析,可以使用串口吧波形发给电脑上位机显示。我用的软件是虚拟示波器回答你前面的问题,(如果你是需要电机作差速控制转向时,比如三轮,直立)我建议你先调速度环,调试方法为观测其空载阶跃响应。当速度环调试好了后再调方向环。方向环的输出作为速度环的输入。PID闭环阶跃响应效果比较好时,不会轻易受外界干扰的影响的,但是会受控对象(电机)本身的影响,而且比较大。如果你只用速度环转向,因为电机是惯性较大的系统,其本身的这个特性导致它在作用转向控制时会出现明显滞后,需要在前面加上方向环作用速度环输入,才能消除你说的晃来晃去的问题。(如果你是需要电机作差速辅助转向时,比如四轮车),则方向环与差速环分开独立调试,在都有较好的响应性能后,再将他们通过一定的物理关系式联系起来,共同控制转向。



作者: 2669190177    时间: 2022-12-24 22:39
小学生做车来了 发表于 2018-8-9 14:17
你可以这样理解,每个pid控制都对应一个指标的具体控制3 角速度闭环,也就是使车的加速度能达到我的期望
...

大佬,我真的想不明白了 偏差环得到值 给角速度环  角速度环输出 给速度环

偏差环时位置与位置的偏差  角速度环是什么的偏差啊 大佬 偏差环输出是 加减期望速度和z轴角速度*半径 吗 还是和x轴角速度 大佬 求指点
按大佬的写之后 角速度环是偏差环输出加减期望速度和z轴角速度*半径 但是角速度*半径会飙到3000 大佬求指点





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2