你还在用PID?MPC模型预测控制,从公式到代码!

作者: 华南小虎队分类: 计算机技术 发布时间: 2021-06-30 23:11:34 浏览:180349 次

你还在用PID?MPC模型预测控制,从公式到代码!

鲁棒控制我的最爱:
up主,你好,我主要是做鲁棒控制的理论研究,硕士阶段研究自抗扰控制在电机驱动上的应用,但是目前做的都是用Simulink 进行仿真。我想把我的控制算法转换转换为c代码并应用至实际硬件系统中,但不知道怎么入手。想请教一下你,应该怎么去学习将论文上的控制算法怎么用c代码实现,有什么书籍或者学习视频推荐吗?

【回复】回复 @18077234g : 这个问题可能各行业有各行业的经验,没有绝对统一的建议值,不过一般来说要遵循一些原则 (1)、积分分离:首先计算或者测得在有干扰情况下的纯P控制是否存在稳态误差,若存在,是否能知道此时最大的稳态误差,则积分分离的值至少要比这个最大的稳态误差大 (2)、积分饱和:其实积分限幅和积分饱和大多数情况下可以视为一个东西,一个是限制他的输出不超过一个值,一个是限制他自身不超过一个值,针对ki系数较大的系统,退饱和时间短,此时如果系统一直维持最大输出是有利于减小调节时间的话,积分饱和可以设为最大输出值,而针对一些ki系数较小,退饱和时间长的系统,限幅值最低应该设在一个可以消除(1)中所说的最大稳态误差的值 积分分离和积分饱和这两个值在大多数情况下肯定会遵循以上两个原则,这几个值都是给了一个极限值,在实践时可以根据要求再一点点调节,不过有时有的系统不要求无稳态误差,有的不严格要求调节时间,此时也要具体问题具体分析,根据情况来定
【回复】回复 @421施公队 :同求~现在学了一堆的控制方法,全都是在论文里仿真的,想转换成C或者C++太有难度了
【回复】回复 @华南小虎队 :[doge]老哥,你之前的回复我还正在消化,然后我又来问个新的问题,pid的积分分离值和积分饱和值真的只能纯靠感觉调嘛?有没有一个指导的值,比如积分值大概在误差只剩50%左右才开始累积啥的,饱和值大概在总误差的200%啥的,我也搜了好久资料感觉没有回答类似问题的,我在这里调就调的很无从下手全凭感觉,然后有人提到使用增量式pid可以少调一个积分饱和值和分离值,只需要调积分限幅就行,那为什么还需要位置式的pid,全部学增量式的pid不就行了嘛[笑哭]增量式pid肯定还是有不适用的场景吧?
冯胖胖的碎生活:
[笑哭]我研究了两个星期PID 等着你详细讲解三个参数怎么调 突然叫我用MPC??

【回复】hhhh外行人告诉你一下。 随着比例增益越大,曲线会出现振荡。(现象有点像荡秋千,如果没人在后面推,就会来回摆荡,最终慢慢停下来) 当出现振荡现象,就能增加i值来抑制振荡部分。直至抑制到没有振荡现象。 但随着i值增加,过度抑制会导致低频共振。 所以这个时候就需要d值来抑制低频共振。 我是外行调试电机的,不知道这个方法对你有没有效果[吃瓜]
【回复】那啥。 参数整定找最佳,从小到大顺序查, 先是比例后积分,最后再把微分加, 曲线振荡很频繁,比例度盘要放大, 曲线漂浮绕大湾,比例度盘往小扳, 曲线偏离回复慢,积分时间往下降, 曲线波动周期长,积分时间再加长, 曲线振荡频率快,先把微分降下来, 动差大来波动慢,微分时间应加长, 理想曲线两个波,前高后低四比一, 一看二调多分析,调节质量不会低。 全文背诵,下周默写?[小电视_赞]
【回复】比例:k*(PVt - PVt-1) 积分:1/Ti *(PVt - SVt) 微分:Td *((PVt - PVt-1)-(PVt-1 -PVt-2)) PVt是当前时刻值,PVt-1是上一时刻值,SVt是当前时刻设定值,K、Ti、Td是系数,拿个正弦曲线,随便设个设定值,找三个连续的点,算一算比例积分微分,多算几次,基本能理解PID是怎么回事,再到现场调一个,应该能入门了
华南小虎队:
视频制作不易,希望大家给个一键三连鸭~~[打call] 1.想快速上手代码的同学,可直接跳过第二讲 2.手推公式繁琐,建议先看文献一遍,再来一起推公式 Matlab代码和C++关键部分代码链接如下: 链接:https://pan.baidu.com/s/1M5oRc_DCjYbi1QlwJagKNw 提取码:421N

【回复】回复 @雪·月·花 :模型预测控制在纯滞后对象中的研究 你说的是这篇吧[妙啊]
【回复】这个的重点不是蜜雪冰城甜蜜蜜吗?
沈洁Eacc:
我来说一下我对PID的理解吧,无论如何,你都需要用到PID中的三重信息量。比例信息,积分信息,微分信息。这是信息论的基础,信号变化能给你的唯一全部信息。所以MPC再牛逼,都不可能缺了这三种信息中的任何一种。 关键是,你就算想要预测未来,算力也是制约你的瓶颈。我用整数做的PID,非常快,你的MPC如果要有优势就必须算的足够的快。所以受制于算力MPC的优势不会很明显

【回复】回复 @421施公队 :PID流行使用的很大一个原因是,它是一个黑箱控制,不需要被控系统的模型,而且简单容易实现。在现场应用中很多系统模型是不确定的,得益于上述优点,工程师可以非常快速的在现场搭建出一套控制器对系统进行控制。当然如果时间较为充裕,自适应PID控制也是相当香的。对于MPC来说我个人认为它最爽的是对于不同状况下可以改变它的控制策略,比如汽车变道时又障碍物和无障碍物时的变道策略等。
【回复】应该说pid仅仅只是用了你说的这三重信息,mpc相比pid加入了预测模型——以已有的经验模型去预测控制。加入了数学工具的帮助使得控制算法更优秀了,至于算力,这点矩阵计算还算不上什么
【回复】回复 @去尼玛的上帝 :算力确实不可忽略,我前几天写了一个四轮差速车辆MPC轨迹跟踪控制器,控制频率20HZ,一开始调试不成功,发现就是我的运算时间超过了0.05S。后来换了台电脑当主机才成,当然也可以降低预测时域。
yycs001:
up主的mpc完全没有用状态方程,而是耦合了动态系统辨识的方法。 建议up主 使用脉冲响应, 会更加科学一点。 好多同学不太清楚05:44时刻公式怎么来的,我放个推导图,注意,这里要用脉冲响应才符合公式。 https://pics-1306623709.cos.ap-nanjing.myqcloud.com/image-20220111135115584.png

【回复】您好,请问如果是多输入系统,这个推导方法该怎么用呢?
【回复】回复 @桃杌君 :这个图可以分享一下吗?
华南小虎队:
视频制作不易,希望大家给个一键三连鸭~~[打call] 1.想快速上手代码的同学,可直接跳过第二讲 2.手推公式繁琐,建议先看文献一遍,再来一起推公式 3.Matlab代码和C++关键部分代码链接如下: 链接:https://pan.baidu.com/s/1M5oRc_DCjYbi1QlwJagKNw 提取码:421N 4.想实现对应C++工程,请观看我们的视频《Vrep联合C++机器人仿真系统~从入坑到入土!》 [给心心]重点重点![给心心] 论文是:《模型预测控制在纯滞后对象中的研究》

【回复】回复 @属于你的吻痕 :可以的
【回复】回复 @421施公队 :c和python可以仿真出这样的效果吗
【回复】回复 @assasion1412 :你说仿真吗?不行噢
Sunonein:
Up以后会不会做四元数姿态解算的视频啊,太难了[脱单doge]

【回复】回复 @Sunonein :可参考mahony互补滤波解算,CSDN有资源
【回复】回复 @421施公队 :Csdn留个号呀,大佬[狗子]
cx吹雪:
哈哈哈,毕业论文研究的这个,感慨良多,加油,再来温习一下!

我想写飞控:
第三讲一开始的模型是怎么得到的啊,看来这个视频我想把步兵云台的控制器换成MPC,但是模型不知道怎么得到

【回复】我们是通过系统辨识,来获得传递函数或者状态空间方程模型。 可以看看我的知乎“龙胆也老师”~
【回复】回复 @421施公队 :应该把采集数据这块内容也拍视频出来,
【回复】回复 @421施公队 :我的疑问主要是数据怎么采集,直接给电机电流阶跃信号,测云台角度变化,然后用MATLAB计算电流到角度的传函吗
-in1:
大佬是否将MPC应用在RM云台里面了呢[doge]效果如何

【回复】可以推断: MPC适合RM的云台。因为子弹的数量,会改变云台的惯量。 相比于一成不变的PID参数,MPC具有“误差补偿”的特点!
【回复】云台速度环可以考虑一下PI+LQR,提高系统相位裕度,在(非RM的)云台上实现过,效果拔群。
【回复】PID能解决RM云台控制中99%的要求[脱单doge]
zzyykj:
麻烦问一下,动态矩阵法可以跟踪正弦信号嘛?

【回复】回复 @421施公队 :谢谢,另外如果我的采样时间比较小,比如1/20000s,会不会影响MPC的稳定性?
五点半的玉米杀手:
请问up主,MPC可以应用到履带式车辆的轨迹跟踪中吗?

飞往天上:
MATLAB代码中的离散状态方程是不是写错了,for k=2:3step后面的两句,应该是y(k)=Cx(k)+Du(k)吧

大浅水鲨:
我有个疑问,既然需要模型,那不是只有建模足够精确才有效吗,按道理如果实际系统是非线性或者时变系统,那不是没法精确建模吗,这样又怎么实现预测呢,特别是那种你根本无法预测下一时刻系统参数会怎么变化的系统,这样只能说选几个典型特征点分别设计pid,然后增益调度,保证在整个包线范围内的一个大致性能

【回复】回复 @华南小虎队 :是不是要弄个状态观测器好一点?

MATLAB 自动控制原理 控制 MPC 自动驾驶 PID 现代控制理论 LQR 模型预测控制

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!