我的战队
【分享帖】官方开源教程 云台传递函数分析和应用
2017.11.2 update:增加部分答疑内容,见文末

在上一篇关于系统辨识的文章里【官方开源教程】系统辨识基础教程,我们引入了频域分析法、系统辨识的基本概念,介绍了MATLAB的System Identification和其他工具的使用。那么这些方法和工具能发挥什么作用呢?本文将以步兵云台为例,展示频域分析法和系统辨识在分析系统和解决问题中的作用。
本文篇幅较长如果对理论验证过程不感兴趣,请直接跳到第4章查看实际应用部分。

1. 摘要
本文以频域分析法和系统辨识为主要工具,针对RoboMaster步兵机器人的yaw轴云台速度环这一闭环系统,分析各环节的传递函数,并验证其相互推导关系。然后提出传递函数在机器人设计中的几个应用方向:通过云台的频率特性判断云台的机械性能,对闭环系统设计补偿器,基于传递函数设计控制器。

2. 系统模型概述
首先还是要贴上这个典型的闭环系统框图,请大家务必牢记心中,后续的所有分析都是基于该框图。

使用速度环控制yaw轴云台,将频率递增的激励信号输入至速度环,采集输入输出和中间变量。由此得到各环节如下:

3.各环节传递函数分析
分别使用fft变换和系统辨识工具分析各环节的传递函数

3.1 C(s)-PID传递函数
速度环使用PI控制器,比例系数P=70,积分系数I=0.2,控制频率为1kHz,运算周期Ts=0.001s
数字式PI控制器输出为:

令t=kTs,转化为连续形式:

由此得到该PID控制器的传递函数为:
系统辨识得到的从误差信号到电流值的传递函数为:
对比fft变换得到的频率响应图,三者结果几乎完全吻合


3.2 G(s)-云台传递函数
针对yaw轴云台分析最简单形式的动力学模型。
假设云台电机输出扭矩正比于电流值(忽略电枢绕组电感),系数为k。
转矩平衡方程:
式中J为电机和负载折合到电机轴上的转动惯量,fm为黏性摩擦系数.
令初始条件为零,对方程两边进行拉式变换,得到云台电机传递函数:

简单分析该一阶传递函数可知,当云台的转动惯量J减小时,系统增益增大,截止频率增大,系统的阶跃响应有更快的上升时间,对应的延迟也越小,系统的稳定性更好。因此在不考虑噪声的情况下,云台的转动惯量越小性能越好。
对采集的电流和实际角速度进行fft变换得到频率响应如下:

由相频特性曲线可以看出该系统相位变化较大,因此该云台系统为非最小相位系统。
在进行系统辨识时,如果按照简化的模型选择一阶传递函数,得到的传递函数为:

该传递函数虽然能较好的反映系统的幅频响应,但是无法模拟出真实系统的相位变化。
因此需要增加极点和零点数量,构成非最小相位系统来进行辨识。调整传递函数阶数,对比fft变换得到的频率特性,最终生成4阶传递函数为:


3.3 Φ(s)-闭环传递函数
辨识目标角速度和实际角速度的关系,得到速度环控制的云台的闭环传递函数为:


由图可以看出系统带宽约为100rad/s,超过带宽之后相位差急剧增大。

3.4 Gk(s)-开环传递函数
开环传递函数指的是主反馈断开时,从输入信号到反馈信号之间的传递函数,反映了系统的增益情况。
由定义可知,本系统的开环传递函数为:
(H(s)为单位反馈)
该表达式的计算的是PID控制器和云台自身的传递函数串联,由此得到物理意义是从误差信号到输出信号的传递函数,即可以由辨识e(t)和y(t)的关系得到:

由开环传递函数和闭环传递函数的转换关系可以得到:

以上推导了开环传递函数的三种计算方式,理论上来说结果应该一致。下面是各种计算结果与fft得到的频率特性曲线对比

由图片可以看出,通过多种方式计算得到的传递函数均能较好的刻画系统的开环特性,验证了理论的正确性。

4. 实际应用
4.1 机械性能对比
在不考虑控制器的情况下,通过辨识电机的电流和角速度可以分析电机和云台的机械性能。

图1是上文进行传递函数分析所使用的步兵的yaw轴云台开环数据,图2是在该云台上加载了350g的配重(约等于100颗17mm弹丸的质量),对比可以看出幅频响应几乎没有变化,但是相位延迟大大增加,穿越频率(在开环系统中用穿越频率这个词不够严谨,这里指的是相频响应超过180°的所对应的频率)只有原来的1/4。由此可以看出云台的质量(更严谨的说是转动惯量)会极大的影响云台的响应。
图3是另一台步兵的云台测试数据,该云台电机更换为扭矩较大的RM6623,而且云台的质量较小,因此幅频特性远大于第一台步兵,相位延迟也较小,因此该云台从理论上来说可以达到更好的控制效果。
综合以上分析,我们可以得到以下结论:
在进行云台的机械结构设计时,要尽量减小云台的质量,并且要调整质量分布来减小转动惯量(例如采用下供弹设计,将弹仓从云台移到其他位置)。
选用扭矩合适的电机,为云台工作提供足够的动力。
对云台进行频谱分析还可以有以下用途:
1.通过振动测试找出云台的异常振动点,查找结构缺陷;
2.开启摩擦轮之后,对云台的振动分析可以判断摩擦轮转速情况,还可以分析云台结构是否存在松动。

4.2 基于闭环传递函数的补偿器设计
对于某些系统来说,可能无法断开主反馈来进行开环辨识,或者对闭环系统的开环特性辨识效果不理想的情况下,可以对闭环系统中原有的控制器进行补偿以提高性能。
注意:此部分内容衔接上一篇文章,因此选用的测试平台与本文其他部分稍有区别。这里的系统闭环传递函数为:


4.2.1 实际系统分析
由于速度环的H(s) = 1,为单位反馈系统,因此原先的PID控制的云台系统简化如下,P(s)为PID控制器,M(s)为云台和电机模型

为了提高性能,我们在PID控制器之前加入补偿器,得到系统框图如下所示:

这里将原来的PID控制器和云台电机模型看做一个整体,当做被控对象G(s),针对G(s)设计一个新的控制器C(s),此即我们所要设计的补偿器。

4.2.2传递函数转换
通过测量系统输入输出得到的是包含反馈的闭环传递函数Φ(s),而sisotool需要根据开环传递函数进行补偿器的设计,因此需要进行一次变换。

可得原系统的开环传递函数为:


4.2.3 sisotool工具使用和环路整形
sisotool(Single Input Single Output Toolbox)是MATLAB提供的单输入单输出系统补偿器的设计工具。
在MATLAB的命令行窗口输入sisotool,打开sisotool工具。
点击 Edit Architecture ,打开系统框架对话框,默认框架即可,选择我们之前计算得到开环传递函数G(s)导入为G,其他保持不变。
导入G之后,界面默认显示内容如下所示:

左侧是框架选择和预览区,中间是开环传递函数bode图编辑区,右上方是根轨迹编辑区,右下方是系统的阶跃响应图。
点击 New Plot 可以根据自己的需求添加图形。例如添加闭环传递函数图、零极点图
点击菜单栏里的 Store 按钮,可以将当前的设计保存下来,以方便后续进行对比和回溯。
控制器的设计一般都是基于开环传递函数的零极点,可以手动增加零极点来调整系统,通过观察伯德图和根轨迹图来确定参数是否合理。
借助MATLAB的强大的自动调整功能,我们可以使用自动的方式来进行控制器设计。点击 Tuning Methods ,选择Loop Shaping打开环路整形的对话框。
设置开环带宽为60rad/s,控制器阶数为3,即可自动生成新的补偿器C。
加入补偿器之后的系统开环和闭环频率响应曲线都有明显变化,点击菜单栏的 Compare 按钮,可以与之前的设计进行对比

我们所关注的是系统闭环的特性,展开闭环频率响应图可以看出,加入补偿器之后的系统带宽有了明显增大,由原来的40rad/s,增加到150rad/s。


4.2.4 补偿器实现
点击sisotool工具内的 Export 按钮,将设计好的新控制器C导出至工作区。
使用tf函数将zpk形式的C转化成标准的tf形式,然后使用双线性变换法将传递函数离散化,最后将其转化成差分方程形式用C语言实现。

4.2.5 对比结果
使用单片机测量方法得到频率响应曲线,对比如下:

由实测图可以看出,系统的实际带宽由原先38rad/s增加至91rad/s。
(注意:此测试平台与本文其他部分所使用的有差异,请不要直接对比实验结果)

4.3 基于开环传递函数的控制器设计
在可以对系统进行开环辨识的情况下,我们一般直接根据系统的开环特性进行控制器的设计。例如拿到一个全新的云台,通过开环辨识获得云台自身的传递函数后,即可在MATLAB设计出控制器,而不需要在实际云台上不断的调试PID参数。
之前进行传递函数分析时选用的是步兵1云台空载的情况,可以看出PI控制器的比例系数设置为70能够取得较好的控制效果,但是在云台上放置350g的配重之后,由于云台自身的延迟增大,此时如果仍然采用之前的控制器,会导致系统非常不稳定,受到外界干扰很容易失去平衡。根据经验应该降低增益才能保证系统稳定,那么该如何科学的判断系统稳定性,如何直接根据系统的特性来设计控制器呢?
对带有负载的yaw轴云台进行开环辨识,得到传递函数:

将该传递函数导入sisotool,通过拖动根轨迹中的极点位置或者打开 Compensator Editor 直接输入增益来调整控制器C(s)的开环增益。

4.3.1 增益70
首先设置增益为70,系统的相位裕度只有10.8°,阶跃响应存在严重振荡,因此系统不够稳定。


4.3.2 增益20
调整增益为20,相位裕度变为72.7°,稳定性过好,导致系统动态响应较慢,观察系统的阶跃响应可以看出上升时间约为0.12s。


4.3.3 增益40
调整增益为40,此时相位裕度为44.6°,接近45°的相位裕度要求。系统的阶跃响应会产生轻微振荡,超调量约为20%,在速度环允许的范围内;阶跃响应存在稳态误差,因此需要加入积分项消除。


4.3.4 调整后的控制器分析
最终调整增益为32,加入积分项,调整积分系数为80得到的系统如下所示:

相位裕度为49.1°,阶跃响应稳态误差被消除,超调量约为20%,上升时间约为0.07s,各项指标均满足要求。


观察系统的闭环传递函数,可以看到为了保证系统稳定性牺牲了带宽,系统的带宽只有55rad/s,远低于空载情况下的100rad/s,这也验证了机械结构对于控制性能的极大影响。

4.3.5实际测试结果
将调整好的参数写入PI控制器,测试阶跃响应,使用J-Scope采集时域数据。

超调量和上升时间均符合预期,在运动时的速度不够稳定,可能是云台上的负载因为惯性而产生晃动导致的。

5. 总结
系统辨识、频谱分析和传递函数目前还没有被广大参赛队伍所使用。在本文中,充分利用了这些工具分析并解决了实际问题。
对云台系统的各个环节进行系统辨识和分析,可以对云台有更加深入的了解,为实际应用提供理论依据。对云台进行振动测试并分析频率特性,可以有效的发现结构缺陷,辅助机械组成员改良机械结构;基于开闭环传递函数的两种设计方法均可以有针对性地设计控制器,科学有效地提高控制器性能。

本文介绍的传递函数分析和控制器设计均没有涉及噪声和扰动对系统的影响,这一部分内容可能会在下个月和大家见面,敬请期待!
最后,希望大家勇于尝试新方法,对自己的步兵进行深入研究,欢迎跟帖提出问题和建议

更新答疑:
由于在不同版本的教材、不同领域内的定义都存在差异,在讨论控制系统时统一几个概念:

  • 截止频率wc:闭环系统的开环幅频响应穿过0dB对应的频率
  • 穿越频率wx:闭环系统的开环相频响应穿过180°对应的频率
  • 带宽频率wb:闭环幅频特性下降到-3dB时对应的频率

1、开、闭环辨识的区别和选择
开环辨识和闭环辨识是两种完全不一样的方法,激励信号的输入位置都不同,例如本文中的开环辨识是直接给电机发送电流信号,而闭环辨是给速度环输入目标角速度。这里使用两种方法进行辨识主要是为了给大家做展示,应用中要根据实际情况选择方法,如果系统切断反馈回路后无法工作就选择只能用闭环辨识。例如要辨识pitch轴云台,就必须要有位置环和速度环来保证云台在一定范围内运动而不失控,在此基础上运用闭环辨识。
2、辨识频率的选择
在确定辨识频率之前需要对系统的频率响应有大致的了解,覆盖尽可能多的有效频带。
选择1Hz作为起始频率主要是因为之前进行过测试,输入频率过低的信号云台跟随效果很差,可能会影响辨识。针对闭环辨识应该尽量把输出幅值高于系统的输入幅值的部分数据采集进来(实际闭环系统有可能是输出始终小于输入),这样可以直接得到系统带宽。开环辨识的输入输出信号的物理意义完全不一样,直接比较大小没有意义,应该从幅度响应快速衰减之前开始辨识。
3、设计控制器时的参考
在设计补偿器或者控制器的时候,首先是调整增益,除了考虑相角裕度和幅值裕度,还需要观察阶跃响应的稳态误差,需要在几个指标之间平衡。本文中的开环系统在加入反馈之后稳态误差较小,幅值裕度影响不大,因此主要考虑相角裕度。
4、采样频率的选择
在运算性能足够、被控对象能够响应的的情况下,采样频率越高,误差越小,控制效果越好。理论上来说采样频率达到截止频率的10倍即可取得较好的控制效果,但是对于我们的传感器和云台来说,可以轻松达到1kHz的控制频率,因此应该选用1kHz。
5、采样周期和控制周期的关系
采样周期可以小于控制周期。但是在离散控制系统中,控制器按照一定的频率进行运算,如果采样周期小于控制周期,例如1ms采样,5ms运算,实际上控制器还是5ms获取一次数据然后进行运算,相当对采样信号重新进行了一次采样,因此实际控制效果还是由控制频率所决定的。

请问这篇文章对你有用吗?
【分享帖】官方开源教程 云台传递函数分析和应用
所有评论
暂无更多
关于作者
robomaster
robomaster
26 关注Ta
2 文章
20 经验值
6 获赞