RoboMaster

标题: 【分享帖】官方开源教程-系统辨识基础教程 [打印本页]

作者: robomasters    时间: 2017-10-11 21:07
标题: 【分享帖】官方开源教程-系统辨识基础教程
上周蘑菇菌和小R给大家分享了PID控制基础教程,想必大家都看懂了吧。目前我们在调试PID的时候主要根据时域分析法,即观察时域的响应曲线调节PID参数。(听说还有小伙伴在使用经验调参和玄学调参?那你可要恶补一下了:什么是机器人比赛中的PID控制?

使用时域分析法可以很方便的体现出系统的动态特性,例如调节时间、超调量等信息,也可以大致衡量系统的稳定性。但是如何才做到准确的判断系统的稳定性,了解系统的带宽,抑制噪声呢?这里给大家介绍一下频域分析法和系统辨识。
1. 摘要
本文介绍了对RoboMaster步兵机器人yaw轴云台速度环的系统辨识过程。引入频域分析法、传递函数、系统辨识的基本概念,介绍了J-Scope、Keil和MATLAB的fdatool和system Identification工具的应用技巧。

2. 基本概念
2.1 频域分析法
应用频率响应特性研究线性系统的经典方法称为频域分析法。
频率特性的物理意义明确,可以用分析法和实验方法获得。在进行系统分析和设计时可以应用图解法进行,直观方便。
2.2 闭环系统的传递函数
一个典型的反馈系统的结构图如图所示:
[attach]13812[/attach]

G(s)代表被控对象,C(s)为控制器,H(s)为反馈。
在不考虑扰动的情况下,系统的闭环传递函数为
[attach]13843[/attach]   
因此系统可以等效为:
[attach]13802[/attach]
系统的开环传递函数为:
C(s)G(s)H(s)代表回路增益。
注意:此处的开环传递函数是针对闭环系统来说的,不是开环系统的传递函数
由上面分析可知开环传递函数和闭环传递函数关系紧密,因此系统的开环频率特性很大程度上决定了系统的闭环性能。由于闭环系统包含反馈,校准过程较为复杂,而开环传递函数容易分析和设计,因此工程上常用开环传递函数来分析和设计控制器。

2.3 系统辨识
系统的数学模型是对该系统动态本质的一种数学描述,体现实际系统运行中的动态信息。相应的,我们也可以用实验分析方法获得表征过程动态行为的输入输出数据,建立系统的数学模型。
系统辨识得到数学模型可以用于预测系统输出的未来演变,也可以用于设计控制器来对现有系统的做出改进。

3. 基本思路
采集云台的输入输出数据(发送给yaw轴云台的目标角速度和云台的实际角速度),利用系统辨识得到传递函数,然后证明模型的正确性。

4. 实验平台和工具
硬件:RM步兵云台、stm32开发板、J-Link
软件:Keil、J-Scope、MATLAB(fdatool,systemIdentification)

5. 操作步骤
1. 在Yaw轴云台上加载速度环PID控制器,使得系统可以稳定运行
2. 写一个简单的信号发生器,将频率逐渐增加的激励信号输入至PID控制器
3. 采集并记录对应时刻的激励信号和角速度信息
4. 对输入输出数据进行系统辨识得到系统闭环传递函数,用其他方法进行验证

5.1 MPU6500滤波设置
查阅MPU6500的技术手册可知,陀螺仪有多个量程和带宽档位可以设置,为了达到更好的测量精度,需要根据应用需求进行设置。
[attach]13800[/attach]

[attach]13801[/attach]

经过初步测试,云台的正常工作角速度在±250°/s以内,因此设置量程为±250dps。
RM 6025电机能响应的电流信号频率为1kHz,根据采样定理,截止频率最高达到500Hz。因此设置MPU6500的带宽为3600Hz, 然后对数据进行低通滤波至500Hz。
如图所示,用fdatool生成截止频率为500Hz的4阶巴特沃斯滤波器:
[attach]13807[/attach]

[attach]13806[/attach]
导出系数,将传递函数形式转化为差分形式(具体过程请查阅信号与系统教材),然后在stm32工程里用C语言实现。

5.2 速度环PID控制器
根据经验和时域的响应情况,调节PID参数使得云台可以较为稳定的跟随目标角速度。

5.3 激励信号的设计
产生频率从1Hz到500Hz变化的正弦信号,每个频率点持续20个周期。由于频率范围较大,且高频部分云台振幅变化较小,为了减少数据量,采用类指数形式的变化趋势。为了保证信号不会发生跳变,在每次信号频率发生变化时都需要从零相位开始,因此周期需要是整数。使用MATLAB生成的激励信号频率如下:
F = ([1:0.5:22, 24:2:40, 50:10:120,200,250,333,500]);
T = round(1000./F);         //周期取整
F = 1000./T;                 
[attach]13805[/attach]
5.4 数据采集和处理
编译好stm32嵌入式工程后,配置J-Scope工程,Keil进入调试模式,设置好相关参数后启动程序,用J-Scope记录云台的期望角速度和实际角速度,采集完成后导出数据为csv格式。
注意:J-Scope只能读取整型的数据,因此需要把浮点型的角速度值转化成整型(这里采用的方法是乘以1000然后转成整数)
用MATLAB导入csv文件中的数据。
由于采集到的数据前后部分存在激励信号为零的非工作状态,会影响系统辨识的结果,因此需要去除。使用find函数找到激励信号首尾第一个不为零的数据的索引值,然后根据此索引值去掉输入输出信号首尾对应的部分,得到实验所需的时域数据。
处理后的时域数据绘制如下:
[attach]13808[/attach]由时域的图像可以明显看到,云台在高频下的振幅由明显衰减。

5.5 系统辨识
在MATLAB的命令行窗口输入systemIdentification,打开系统辨识工具箱。
选择 Import data > Time domain data ,打开导入数据对话框,在 input 和 output 选项中键入工作区的输入输出变量名,Starting time 和 Sample time 分别输入 0 和 0.001。其他部分选填。点击 Import 将数据加入System Identification工具,然后关闭对话框。
[attach]13811[/attach]

由于本实验数据平均值为零,带宽在500Hz以内,同时需要辨识所有数据,因此无需对数据做去均值、滤波、分割等预处理。直接选择 Estimate > Transfer Function Models 打开传递函数对话框,设置零极点个数分别为1和2,点击 Estimate ,得到系统传递函数如下:
[attach]13814[/attach]
点击 Model output 和 Frequency resp 可以显示传递函数模型的拟合结果和频率响应图。
[attach]13810[/attach]

[attach]13809[/attach]
由 Model output 图像可知,该传递函数的输出结果拟合度达到88.58%,可以较好的刻画系统的动态特性。

5.6 模型验证
为了明确系统辨识得到的传递函数是否可信,可以采用以下两种方法进行验证。
5.6.1 直接测量不同频率下的幅度比和相位差
在stm32的程序中,通过查找一定时间内的云台角速度的极值找出幅度,通过计算输入输出信号上升沿穿过x轴的时间差除以周期来计算该频率下的相位差。
将不同频率点的幅度和相位数据保存在数组中,用Keil的SAVE命令导出内存数据(hex格式),经过处理(删除标志信息、数据分段、16进制转浮点数)后得到实测的频域数据,绘制bode图如下

[attach]13799[/attach]


5.6.2 FFT处理时域数据
对时域数据做fft变换,然后计算输入输出数据的幅度比和相位差,得到系统的频率响应:
[attach]13798[/attach]
5.6.3 综合对比
对比三种方式得到的频率响应曲线:
[attach]13813[/attach]
由图可见,在低频部分,系统辨识得到的传递函数能够较好的拟合fft变换的结果和实测的频率响应结果,因此可以用该传递函数来刻画yaw轴云台系统。
由bode图可以看出3dB带宽大概为40rad/s,实际意义就是该云台系统能够响应的频率6.4Hz以内。

参考资料:
1. J-Scope介绍及资料下载:https://www.segger.com/products/debug-probes/j-link/tools/j-scope
2. System Identification 官方帮助文档:https://cn.mathworks.com/help/ident/index.html
3. Keil的SAVE命令用法:http://www.keil.com/support/man/docs/uv4/uv4_cm_save.htm
                                   https://wenku.baidu.com/view/f5edb390551810a6f424865b.html
4. 奥本海姆. 《信号与系统(第二版)》. 电子工业出版社
5. 胡寿松. 《自动控制原理(第四版)》. 科学出版社
6. 萧德云.《系统辨识理论及应用》.清华大学出版社


得到系统闭环传递函数后,经过处理可以得到开环传递函数进一步分析系统稳定性,还可以用频率分析法对环路进行整形,从而达到我们想要的性能,具体操作步骤会在后续的文章给大家介绍。敬请期待!
最后,欢迎大家跟帖提出问题和建议。








作者: Extreme    时间: 2017-10-11 23:37
本帖最后由 Extreme 于 2017-10-11 23:46 编辑

消灭零回复
作者: 放弃=给你自由    时间: 2017-10-11 23:39
不错
作者: 黄金剑士    时间: 2017-10-11 23:42
终于看到系统辨识了
作者: Greetrix    时间: 2017-10-11 23:42
哇哇哇,干货!!
作者: shiyouhao    时间: 2017-10-11 23:52
哎,读了个假书
作者: 刘小民    时间: 2017-10-12 00:12
dddddddddddddddddddddddd
作者: 种菜C    时间: 2017-10-12 07:44
不错
作者: 下午茶    时间: 2017-10-12 10:05
这个厉害了,标记标记
作者: linxiting    时间: 2017-10-12 10:13
围观,围观
作者: Mas9uerade    时间: 2017-10-12 12:18
什么时候下一篇
作者: Chen-810    时间: 2017-10-12 13:38
膜拜大佬
作者: siming    时间: 2017-10-12 14:30
有没有Word文档版本
作者: 梦瑶花域    时间: 2017-10-12 16:17
学习学习
作者: Mr. Fong    时间: 2017-10-12 17:03
顶顶顶,学习学习,电控的看一看
作者: 我家隔壁的猪    时间: 2017-10-12 17:08
这个是什么感觉好难
作者: 郭南霄    时间: 2017-10-12 18:34
强势围观,顶
作者: liu啊liu    时间: 2017-10-12 18:39
这电控基础知识,,搞不懂啊,,学习~
作者: Jizefeng0810    时间: 2017-10-12 19:39
上自控?
作者: robomasters    时间: 2017-10-13 09:51
Jizefeng0810 发表于 2017-10-12 19:39
上自控?

大概的目标是感觉大家上了很多课,做了很多东西,但是很多方面不能结合到一起,所以出了这一篇,教大家如何把自控书上的内容用到车上来
作者: Mas9uerade    时间: 2017-10-13 18:03
本帖最后由 Mas9uerade 于 2017-10-13 18:18 编辑

请问系统的带宽与响应速度的对应关系是什么?
作者: 1054448153    时间: 2017-10-13 19:07
#在这里快速回复#666666666666666666666666666666
作者: 1054448153    时间: 2017-10-13 19:08
干货,66666666666666
作者: Extreme    时间: 2017-10-13 19:19
Mas9uerade 发表于 2017-10-13 18:03
请问系统的带宽与响应速度的对应关系是什么?

系统的阶跃响应速度和带宽成正比
作者: hexiaogao    时间: 2017-10-13 23:08
期待有更多的分享
作者: 夕阳下的吉他    时间: 2017-10-13 23:58
谢谢分享~~~~~~~~~~~
作者: yyh2503    时间: 2017-10-14 10:10
谢谢楼主分享
作者: 木 木跶    时间: 2017-10-14 13:41
全是干货,喜欢
作者: liu06xxx    时间: 2017-10-14 19:12
请问小白入门应该先看哪本书?
作者: Extreme    时间: 2017-10-15 00:26
liu06xxx 发表于 2017-10-14 19:12
请问小白入门应该先看哪本书?

信号与系统是最基础的课程,但是内容较多,选择部分内容看就可以了
自动控制原理偏向于应用
作者: zhong158388    时间: 2017-10-15 10:34
厉害了我的疆
作者: 超越    时间: 2017-10-15 17:35
围观,围观
作者: liu06xxx    时间: 2017-10-15 19:35
liu06xxx 发表于 2017-10-14 19:12
请问小白入门应该先看哪本书?

好的
作者: hexiaogao    时间: 2017-10-15 22:27
主流控制用的是经典控制还是现代控制理论?我们只学了经典控制,不够用,请问有什么深入学习的方法没啊
作者: 混江湖的十三爷    时间: 2017-10-16 11:16
给力的帖子,有用,最近正在学自控。
作者: robomasters    时间: 2017-10-16 14:21
hexiaogao 发表于 2017-10-15 22:27
主流控制用的是经典控制还是现代控制理论?我们只学了经典控制,不够用,请问有什么深入学习的方法没啊 ...

经典控制理论够用了
作者: shoufei    时间: 2017-10-16 14:25
厉害呀!
作者: wqd    时间: 2017-10-16 14:39
真心不错,学习了学习啦!
作者: 木 木跶    时间: 2017-10-16 18:25
哈哈,谢谢楼主,收下了
作者: zhangyufei1959    时间: 2017-10-17 10:09
行不行 我急需要  能分享一下吗 谢谢了 大牛
作者: szzz    时间: 2017-10-17 11:30
打卡!!!!!!!!!
作者: ZYQ120625    时间: 2017-10-17 14:41
6666,有pdf版就好了
作者: 飞机    时间: 2017-10-18 17:00
这个厉害了,标记标记
作者: way0045    时间: 2017-10-18 17:55
可惜我还是啥都不会!
作者: zxr673402618    时间: 2017-10-19 09:47
得到了系统的模型之后,下一步应该怎么做?用PID进行零极点配置?还是设计最小拍无纹波控制器?个人认为,相对于系统的物理模型,更重要的是对系统的负载或者扰动进行估计。比如,比赛过程中车轮与地面的摩擦力变化、弹舱由满到空的变化等等。扰动和负载的变化已经对系统的传递函数有了影响,如果不考虑这两个方面可能达不到很好的控制效果吧。通过适当的方法对其进行估计,根据估计量对控制输出进行补偿,或者实现PID参数的实时整定,这样应该更好一些。之前用过模糊PID控制和仿人智能控制,原理上不是进行扰动估计,通过当前系统的状态和一些先验知识来进行PID参数实时整定,效果也不错。以上是我的看法,欢迎楼主指正

作者: 木 木跶    时间: 2017-10-19 13:31
看了,谢谢楼主。第一次看基本的系统文,很棒,哈哈
作者: Extreme    时间: 2017-10-19 14:42
zxr673402618 发表于 2017-10-19 09:47
得到了系统的模型之后,下一步应该怎么做?用PID进行零极点配置?还是设计最小拍无纹波控制器?个人认为, ...

通过系统辨识得到系统模型后可以做的事情很多,例如用来衡量云台的机械结构设计安装是否合理,帮助机械组成员改进云台性能;设计或者调节控制器以满足需求,例如你说的去除扰动、动态调节负载都是可以尝试去做的。
至于你说的对扰动进行估计,是采集数据进行分析得到的还是实时测量然后进行估计?
作者: zxr673402618    时间: 2017-10-19 15:34
Extreme 发表于 2017-10-19 14:42
通过系统辨识得到系统模型后可以做的事情很多,例如用来衡量云台的机械结构设计安装是否合理,帮助机械组 ...

实时测量进行估计,然后进行补偿
作者: crs123    时间: 2017-10-21 08:28
好东西,感谢分享
作者: crs123    时间: 2017-10-21 08:28
好东西,感谢分享.
作者: 行者无疆    时间: 2017-10-21 17:47
666666666666666666666666!啊
作者: 美在不期而遇    时间: 2017-10-26 00:38
看完了,明白了很多东西
作者: 滑稽的麻瓜    时间: 2017-10-26 20:40
机械狗表示看不懂

作者: 张雅达    时间: 2017-10-31 10:07
看不懂,先收藏
作者: xiaoha_abc    时间: 2017-10-31 17:26
干货+1,不过直接建模的方法也可以试一下啦。
作者: 话街    时间: 2017-10-31 19:28
厉害,厉害
作者: xiaoha_abc    时间: 2017-10-31 19:31
其实也可以从简单的方法先讲起,给予系统一个阶跃信号,观察其输出响应。然后分别用一阶近似,二阶近似(Harriott法)去拟合,这种传统的做法。
作者: Aqui te amo    时间: 2017-10-31 19:56
6666666666666666666666666666666666
作者: Extreme    时间: 2017-10-31 21:12
xiaoha_abc 发表于 2017-10-31 19:31
其实也可以从简单的方法先讲起,给予系统一个阶跃信号,观察其输出响应。然后分别用一阶近似,二阶近似(Ha ...

我们之前有考虑过用阶跃响应甚至冲击响应来进行辨识,但是这些方法对时域测量数据的精度要求很高,难以实现。因此最后只用于对辨识结果进行验证。
个人认为阶跃响应拟合局限于对已知模型的辨识,相当于是确定模型中的系数,对于未知模型的系统是无法辨识的。
另外你说的Harriott法我没有Google到有效信息,请问是不是拼写有误?
作者: xiaoha_abc    时间: 2017-11-1 08:16
Extreme 发表于 2017-10-31 21:12
我们之前有考虑过用阶跃响应甚至冲击响应来进行辨识,但是这些方法对时域测量数据的精度要求很高,难以实 ...

[attach]14504[/attach]
以前用过这种方法做直流电机的参数识别,结合matlab一起做的。

作者: 达维安爵士    时间: 2017-11-1 20:25
您好,想问下这句话:由bode图可以看出3dB带宽大概为40rad/s,实际意义就是该云台系统能够响应的频率在12Hz以内,角频率和频率之间的关系不应该是1/2*pi的关系吗?为什么这里只是pi的关系呢?谢谢
作者: robomasters    时间: 2017-11-2 00:14
达维安爵士 发表于 2017-11-1 20:25
您好,想问下这句话:由bode图可以看出3dB带宽大概为40rad/s,实际意义就是该云台系统能够响应的频率在12Hz ...

这段话最后才加上去的,没注意算错了。
感谢指出错误!已修正
作者: SKDZZC    时间: 2017-11-4 15:27
我大概上的是假自控
作者: Executor    时间: 2017-11-4 21:12

作者: 庞随BeckPang    时间: 2017-11-12 21:58
请问为什么巴特斯沃滤波器用了四阶?
作者: Extreme    时间: 2017-11-13 10:35
庞随BeckPang 发表于 2017-11-12 21:58
请问为什么巴特斯沃滤波器用了四阶?

这个没有严格限制的,需要自己根据复杂度和效果来平衡。
测试了多种阶数的,四阶可以取得比较令人满意的效果,所以就选了四阶的
作者: pumpkin    时间: 2017-11-16 10:42
点赞,赞赞赞
作者: Leticia    时间: 2017-11-16 11:14
经验调参,玄学调参。。是我本人了╮( •́ω•̀ )╭
作者: ilyar525    时间: 2017-11-16 22:39
6666666666666
作者: 百事乐乐    时间: 2017-11-18 22:39
可以可以
作者: 九九八十一    时间: 2017-11-21 22:02

#在这里快速回复棒极了!!!!威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武威武#
作者: Yiran    时间: 2017-11-21 23:20
哇,干货!(再次印证matlab的万能)
作者: wmd    时间: 2017-11-22 21:28
围着这个帖子快干了3 4天了 好难啃耶
作者: nfy    时间: 2017-11-25 09:27
66666666666666666666666666666666666
作者: nfy    时间: 2017-11-25 09:29
999999999999666666666
作者: nfy    时间: 2017-11-25 09:32
6666666666666666666666666
作者: 庞随BeckPang    时间: 2017-11-30 20:46
robomasters 发表于 2017-10-12 17:51
大概的目标是感觉大家上了很多课,做了很多东西,但是很多方面不能结合到一起,所以出了这一篇,教大家如 ...

在设计巴特沃斯滤波器的时候,采样频率为什么设置的是8000Hz?不是在MPU6500里改在3600Hz吗?
作者: Extreme    时间: 2017-11-30 22:40
庞随BeckPang 发表于 2017-11-30 20:46
在设计巴特沃斯滤波器的时候,采样频率为什么设置的是8000Hz?不是在MPU6500里改在3600Hz吗? ...

注意看手册,设置MPU6500的陀螺仪带宽为3600Hz时数据采样频率是8kHz
作者: HZ.    时间: 2017-12-22 13:45
666666666666666666
作者: 冷瞳丶    时间: 2018-1-16 20:23
:)
作者: wfilars    时间: 2018-1-23 10:15
Mark

作者: loading......    时间: 2018-1-23 21:31
666666666666666666666666666
作者: Noble six    时间: 2018-3-6 22:52
收藏收藏
作者: qq545031318    时间: 2018-3-8 11:16
66666666666666
作者: qq545031318    时间: 2018-3-9 16:45
66666666666这么厉害
作者: 酱油泡大的    时间: 2018-3-11 10:33
问一下,“频率逐渐增加的激励信号”是什么信号?具体怎么实现?
作者: 酱油泡大的    时间: 2018-3-11 11:17
帖子中得到F之后直接作为目标值写到程序里吗?
作者: Extreme    时间: 2018-3-12 14:48
酱油泡大的 发表于 2018-3-11 11:17
帖子中得到F之后直接作为目标值写到程序里吗?

频率逐渐递增指的是1Hz、2Hz、5Hz……500Hz的正弦波信号,每隔20个周期递增一次。
用matlab得到F之后,存成一个数组导入到单片机程序里面,计算正弦信号
作者: 1578989207    时间: 2018-3-12 21:17
谢谢谢谢谢谢谢谢谢
作者: 酱油泡大的    时间: 2018-3-12 21:41
Extreme 发表于 2018-3-12 14:48
频率逐渐递增指的是1Hz、2Hz、5Hz……500Hz的正弦波信号,每隔20个周期递增一次。
用matlab得到F之后,存 ...

正弦信号的幅值有要求吗?
作者: Extreme    时间: 2018-3-13 10:44
酱油泡大的 发表于 2018-3-12 21:41
正弦信号的幅值有要求吗?

让云台有明显振幅就行了,后面频率高的部分可能需要增大控制信号的幅值。
作者: robotdog    时间: 2018-3-13 12:21
           学  习了
作者: 1054448153    时间: 2018-3-13 16:04
666666666666666666666666666
作者: 酱油泡大的    时间: 2018-3-14 17:58
Extreme 发表于 2018-3-13 10:44
让云台有明显振幅就行了,后面频率高的部分可能需要增大控制信号的幅值。 ...

哦哦学习了学习了
作者: zj907638274    时间: 2018-3-20 09:50
zxr673402618 发表于 2017-10-19 09:47
得到了系统的模型之后,下一步应该怎么做?用PID进行零极点配置?还是设计最小拍无纹波控制器?个人认为, ...

你可以去看看ADRC控制,它的扩张观测器不错
作者: 乔慕宾    时间: 2018-4-10 17:10
5.3步的MATLAB生成的激励信号如何使用啊?
作者: 乔慕宾    时间: 2018-4-10 17:12
乔慕宾 发表于 2018-4-10 17:10
5.3步的MATLAB生成的激励信号如何使用啊?

是用来做第5.4步里的期望角速度吗?
作者: 929213555    时间: 2018-4-18 10:02
66666666666666666666666666666666666666666666666666666666
作者: 929213555    时间: 2018-4-18 10:56
666666666666666666666666666666666666
作者: albert600    时间: 2018-4-28 12:05
没看懂这是什么东西




欢迎光临 RoboMaster (https://bbs.robomaster.com/) Powered by Discuz! X3.2