写在最前,在经验调参双环PID的时候,发现无论如何调都不能够满意,而且很浪费时间。因此,想找到更合理更科学地方法,来得出PID参数,于是发现了一个新大陆 -- 系统辨识
最终效果:自动调出PID三项对应的参数,控制效果很不错。
目的:通过matlab,辨识出系统的传递函数,找到最理想的PID参数。
优点:1.节省“盲调PID”的时间。2.在辨识出传递函数后,还可以设计专门的控制器,达到经验调参不能做到的效果,逼近完美。
用到的工具:1.matlab的system identification 和PID tunner app2.simulink。
只要跟我做以下几步就可以啦:
1.得到你的电机的输入输出曲线(数据),导入matlab里。
2.用system Identification app,系统辨识,得到传递函数;
3.用PID tunner自动整定PID参数。
一、伪造数据
tips:这一部分操作的目的,是模拟电机正常运行,得到相类似的数据。如果你已经有实际真实的数据,跳过这一步!
由于疫情原因,现在手头没有真实的电机数据,所以我只能假装我有数据(伪造)。
首先,设计一个电机的传递函数
![283c7997639dae34a00a71cdab8d9dee.png](https://i-blog.csdnimg.cn/blog_migrate/13c981678ac287b3c978518f692f5dfe.png)
接着在simulink上搭建简单的1DOF的PID控制器,给定PID初始参数是:P为1,I和D都为0。这样,这个控制器从输入到输出的传递函数即为电机的传递函数。
![08b8fb070a9f81dbcfacbc481d3d854a.png](https://i-blog.csdnimg.cn/blog_migrate/8e4a2344d885b0a7d813efb83bc55f8d.png)
仿真后,导出你的输入和输出数据到matlab的工作区里,这一步就完成啦。
tips:该例子中,输入是一个单位阶跃信号。
二、导入数据
打开system identification app,并把工作区中的输入和输出数据导入进来,点击import即可。
![e7fadd69911b04944ce3021b26a5ba58.png](https://i-blog.csdnimg.cn/blog_migrate/53cca9b0bf468ad6047e3206d79ccb8b.jpeg)
三、辨识系统
首先,把原始数据分开为两部分:训练部分和验证部分(其实本质就是用神经网络辨识);
![931f69acd9c3d239723ddd424ac18392.png](https://i-blog.csdnimg.cn/blog_migrate/91f409cc8d94f0442ba7ccec0bc66304.jpeg)
接着,把mydatae拖动到workspace Data中,把mydatav拖动到mydata中。
之后,选择估算传递函数,设置好合适的零点极点后,便可得出系统的传递函数。
![83fc37cc28b6829567a36d84ff1b345b.png](https://i-blog.csdnimg.cn/blog_migrate/e5d13ff072c553c18a633292803ffb16.jpeg)
双击tf2,你能看到它的详细数据,从中我们可以看到一些主要信息:辨识出来的传递函数,以及它的拟合度为100%。
![d0e04e941fa4fd96a69a624f34785684.png](https://i-blog.csdnimg.cn/blog_migrate/b59abe660b99504514b26673c13a212a.jpeg)
四、自动整定PID,使用PID tuner工具
打开simulink,双击你的PID控制器,点击tune
![b6d05c09c297723b9a1b2e8d4b97bbe8.png](https://i-blog.csdnimg.cn/blog_migrate/444e4d5c75d59141b6562be076575bdd.jpeg)
自动打开PID tuner之后,调节两个按钮,一个是响应速度,另一个是选择超调量。随后,它会自动更新新的曲线,以及保留原来方案的响应曲线,方便我们对比。
![bb4b1beccd105ab39960cab952a01762.png](https://i-blog.csdnimg.cn/blog_migrate/f8f75950b54eec91f619baf370472aca.jpeg)
得到一个较满意的响应后,我们选择update,更新PID参数到simulink中。
![1d860a102b422b29cb5592aaa7aa8c06.png](https://i-blog.csdnimg.cn/blog_migrate/db67f66e7d9d404e836e684cbb57282c.jpeg)
个人总结:以上步骤做出来的效果,也是和经验调参差不多的。要想做到更好的控制效果,还需要去根据传递函数与实际情况,设计一个新的控制器,matlab只是辅助工具,要懂得原理才是最重要的。
更新:最新一篇文章,系统辩识+调pid+机器人仿真平台上调角度环的完整流程,非常详细了,让你更清晰pid tuner的威力
龙胆也老师:matlab系统辨识+调PID,全网最完整步骤(v-rep仿真)zhuanlan.zhihu.com二更:后面又对单关节(单摆模型)进行动力学参数的辨识,还加上了力矩前馈控制。重新写了三篇文章:黑箱辨识、灰箱辨识以及力矩前馈控制。控制效果比上面那篇文章做的更好
龙胆也老师:【系统辨识】灰箱辨识单关节动力学参数zhuanlan.zhihu.com