机器人现代控制系统设计——基于bode灵敏度函数、积分设计控制系统

        本篇博文主要介绍下机器人控制系统的一些现代控制理论设计方法,运用控制论来解决控制器的设计问题,主要解决机器人系统(最小相位系统)轨迹跟踪控制问题。

       一般而言,控制系统的设计可以通过MATLAB中控制系统APP进行设计比较方便。

         机器人的现代控制系统设计是一个广泛的领域,其中包括许多不同的方法和技术。在这里,我们重点介绍一种基于Bode灵敏度函数和积分设计的控制系统设计方法,该方法可以应用于机器人的控制系统设计。

该方法的基本思想是,在Bode图上通过灵敏度函数来分析控制系统的稳定性和性能,并使用积分来改善系统的性能。具体步骤如下:

  1. 确定机器人的数学模型,将其表示为传递函数的形式。

  2. 在MATLAB中绘制机器人模型的Bode图,并计算出相应的灵敏度函数。

  3. 分析灵敏度函数的特征,特别是低频段的特征,以确定控制系统的稳定性和性能。

  4. 根据灵敏度函数的特征,设计一个合适的控制器,并在MATLAB中进行仿真和调试。

  5. 根据仿真结果进行调整和优化,以改善控制系统的性能。

以下是一个基于Bode灵敏度函数和积分设计的控制系统设计的MATLAB示例代码:

-------------------------------------------------------------------------------------------------------------------------------------

% 机器人模型
s = tf('s');
G = 1/(s^2 + 2*s + 1);

G =
 
        1
  -------------
  s^2 + 2 s + 1
 
Continuous-time transfer function.

% 设计控制器
C = 100*(s+1)/s;

C =
 
  100 s + 100
  -----------
       s
 
Continuous-time transfer function.

% 计算灵敏度函数
S = sensitivity(G, C);

但是我用自己MATLAB2021b版本的操作这个命令会出现一些问题,可能的原因有:

这个错误提示表明调用了MATLAB中不存在或者参数类型错误的函数。可能的原因包括:

  • 没有正确的调用MATLAB自带的sensitivity函数,或者没有正确设置输入参数。
  • MATLAB版本较旧,不支持该函数。

       可以尝试在MATLAB命令窗口中输入“help sensitivity”来查看该函数的使用方法和说明。

sensitivity函数需要在控制系统工具箱中使用。如果在没有安装控制系统工具箱的MATLAB版本上运行该函数,会报错。

需要使用以下命令检查控制系统工具箱是否已经安装:

ver control

       如果在MATLAB中安装了Control System Toolbox但仍然无法运行sensitivity函数,可能是因为该函数的语法与目前的MATLAB版本不兼容。

如果实在不行的话,那就直接按照灵敏度函数公式写一下:

% 计算灵敏度函数

s = tf('s');

S1 = inv(1 + K1*G1); S2 = inv(1 + K2*G2); S3 = inv(1 + K3*G1);

% 输出灵敏度函数

disp('Sensitivity Function from Input 1 to Output:'); disp(S1); disp('Sensitivity Function from Input 2 to Output:'); disp(S2); disp('Sensitivity Function from Input 3 to Output:'); disp(S3);

多输入多输出系统的灵敏度函数可以这样计算。

% 绘制Bode图和灵敏度函数
figure;
margin(G*C);
hold on;
margin(S);
legend('G*C', 'S');

% 设计积分器
I = 1/s;

% 计算带积分器的控制器
C = C*I;

% 重新计算灵敏度函数
S = sensitivity(G, C);

% 绘制Bode图和灵敏度函数
figure;
margin(G*C);
hold on;
margin(S);
legend('G*C*I', 'S');

----------------------------------------------------------------------------

S1:

S2:

S3:

多输入多输出系统的灵敏度函数曲线:

        首先定义了机器人的数学模型,并设计了一个简单的控制器。然后,我们计算了控制系统的灵敏度函数,并在Bode图上绘制了它。通过分析灵敏度函数的特征,发现系统在低频段存在一些问题,因此需要加入一个积分器来改善性能。最后,我们重新计算了灵敏度函数,并在Bode图上绘制了带积分器的控制系统的响应。

        总的来说,基于Bode灵敏度函数和积分设计的控制系统设计方法可以帮助我们更好地理解控制系统的稳定性和性能,并帮助我们设计出更加优秀的控制器。

其中:

  • 为了抑制扰动信号d对输出y的影响,要求灵敏度函数S越小越好;
  • 为了保证控制系统鲁棒稳定性,要求补灵敏度函数T越小越好;

在频域中,灵敏度函数可以用Bode图进行表示。Bode图显示了系统的幅频特性和相频特性,可以帮助我们直观地理解系统的频率响应以及系统在不同频率下的稳定性。

下面是解读Bode灵敏度函数曲线的一些基本步骤:

  1. 对数坐标轴:Bode图使用对数坐标轴,频率以对数形式显示在x轴上,增益以分贝(dB)形式显示在y轴上。

  2. 增益曲线:灵敏度函数的增益曲线描述了系统的输出对于参数变化的响应。在Bode图上,增益曲线通常以负值(dB)表示,即更高的曲线表示更小的增益。如果增益曲线在低频处下降,则说明系统对于低频信号的响应比高频信号更敏感。

  3. 相位曲线:灵敏度函数的相位曲线描述了系统的输出相对于参数变化的相位延迟。相位曲线通常以度数表示。如果相位曲线的斜率为正,说明系统的响应有相位延迟;如果斜率为负,则说明系统的响应具有相位提前。

  4. 临界频率:在Bode图上,临界频率是增益曲线和相位曲线相交的频率。在临界频率处,系统的相位延迟为-180度,系统的增益下降到0 dB。

  5. 相位裕量和增益裕量:相位裕量和增益裕量是衡量系统稳定性的重要参数。相位裕量定义为系统的相位曲线与-180度相差的度数,通常以度数表示。增益裕量定义为系统的增益曲线与0 dB相差的值,通常以dB为单位。如果相位裕量和增益裕量的值越大,则系统越稳定。

总的来说,Bode图是一种很好的工具,可以帮助我们了解系统的频率响应和稳定性。在分析灵敏度函数时,我们可以结合Bode图进行分析,了解系统对于参数变化的响应和稳定性情况。

---------------------------------------------------------------------------------------------

下面介绍下用margin和bodemag绘制灵敏度函数曲线哪个好,有什么区别?

marginbodemag都是MATLAB的函数,用于绘制系统的频率响应图。它们可以用于绘制灵敏度函数曲线,但是它们的使用方法和输出结果略有不同,下面是它们的区别和分析系统性能的方法:

  1. margin函数

margin函数可以绘制系统的幅频曲线、相频曲线和相位裕度、增益裕度等信息。对于灵敏度函数,我们可以通过将系统的灵敏度函数作为输入信号,来绘制系统的灵敏度曲线。具体步骤如下:

(1)使用tf函数定义系统的传递函数和控制器的传递函数。

(2)计算系统的灵敏度函数,即将系统的传递函数除以1加上控制器的传递函数。

(3)使用margin函数绘制系统的灵敏度曲线,观察曲线的幅频特性和相频特性。

(4)通过分析曲线的增益裕度和相位裕度来判断系统的稳定性和性能。

  1. bodemag函数

bodemag函数可以绘制系统的幅频曲线,对于灵敏度函数,我们也可以使用这个函数来绘制系统的灵敏度曲线。具体步骤如下:

(1)使用tf函数定义系统的传递函数和控制器的传递函数。

(2)计算系统的灵敏度函数,即将系统的传递函数除以1加上控制器的传递函数。

(3)使用bodemag函数绘制系统的灵敏度曲线,观察曲线的幅频特性。

(4)通过分析曲线的带宽、增益峰值等指标来判断系统的性能。

区别:

margin函数会输出系统的相频曲线和相位裕度,而bodemag函数只输出系统的幅频曲线。因此,如果需要同时分析系统的相位裕度和增益裕度,建议使用margin函数。如果只需要分析系统的增益性能,建议使用bodemag函数。

分析系统性能:

对于灵敏度函数,我们通常关注系统的增益裕度和相位裕度两个指标。增益裕度是指系统的增益在整个频率范围内的余量,越大则表示系统越稳定。相位裕度是指系统的相位在整个频率范围内的余量,越大则表示系统越稳定。此外,我们还可以通过观察曲线的带宽、增益峰值等指标来判断系统性能。

        在灵敏度函数中,我们可以将其分解为两个部分:低频和高频。低频部分描述了系统对于低频输入信号的响应,而高频部分描述了系统对于高频输入信号的响应。由于低频和高频部分具有不同的性质,因此我们可以根据它们的表现来判断系统的稳定性和性能。

在灵敏度函数的绘制中,对于一个最小相位系统(minimum-phase system),其灵敏度函数的积分在低频时通常为负,而在高频时则通常为正,这是由于最小相位系统具有较快的相位变化和较小的群延迟。

在频域内,灵敏度函数的积分是相位函数的导数。对于最小相位系统,相位函数具有较快的变化,导致低频部分的积分为负值,而在高频部分则变得平坦,导致积分为正值。这意味着系统的输出对于低频干扰更为敏感,而对于高频干扰则相对不那么敏感。

此外,由于最小相位系统的相位变化速度较快,因此它的群延迟相对较小。这意味着高频部分的相位变化对输出的影响较小,因此系统对高频干扰的灵敏度较低。

对于最小相位系统,其灵敏度函数在低频处为负,即系统对于低频输入信号的响应具有“耗散”或“消耗”能量的特点。这意味着系统可以有效地抑制低频噪声和扰动的影响,从而提高系统的稳定性和鲁棒性。

       而在高频处,灵敏度函数为正,说明系统对于高频输入信号的响应具有“放大”或“增强”能量的特点。这可以提高系统的灵敏度和响应速度,从而使系统更加敏感和精确。

       非最小相位系统和最小相位系统是不同的概念。最小相位系统指的是系统的传递函数和其共轭复数的乘积都没有在系统的零极点中。换句话说,最小相位系统的零点和极点都是实数或者共轭复数成对出现的,且都在左半平面。而非最小相位系统则不符合这个条件。

需要注意的是,最小相位系统的灵敏度函数在低频和高频之和为零,这是由于最小相位系统具有一些特殊的数学性质所导致的。这个性质可以用来证明系统是否为最小相位系统,从而帮助我们进行系统的分析和设计。

        最后,对于一个最小相位系统的灵敏度函数,低频和高频部分的积分之和为0,这表明系统对于所有频率的干扰总体上具有相同的敏感度。

参考文献:

【1】https://ww2.mathworks.cn/help/sldo/ug/what-is-sensitivity-analysis.html

【2】https://zhuanlan.zhihu.com/p/362205097

【3】https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E7%9B%B8%E4%BD%8D%E7%B3%BB%E7%BB%9F/9393081?fr=aladdin

【4】https://baike.baidu.com/item/%E9%9D%9E%E6%9C%80%E5%B0%8F%E7%9B%B8%E4%BD%8D%E7%B3%BB%E7%BB%9F/586929?fr=aladdin

【5】https://www.guyuehome.com/blog/column/id/119

【6】曹忠忠,涂封疆. 参数时变系统的模型参考鲁棒自适应控制[C]//中国自动化学会.第37届中国自动化学会青年学术年会(YAC2022)论文集 2022:136-141.DOI:10.26914/c.cnkihy.2022.053486.

【7】李波,唐永哲,伍国梁.H_∞混合灵敏度方法在大包线飞控系统中的应用[J].计算机测量与控制,2009,17(09):1750-1752.DOI:10.16526/j.cnki.11-4762/tp.2009.09.007.

【8】Yepes, A. G., Freijedo, F. D., Lopez, O., & Doval-Gandoy, J. (2011). Analysis and design of resonant current controllers for voltage-source converters by means of Nyquist diagrams and sensitivity function. IEEE transactions on industrial electronics58(11), 5231-5250.