一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,一级倒立摆控制,PID控制器设计与MATLAB实现

马肤

温馨提示:这篇文章已超过376天没有更新,请注意相关的内容是否还可用!

摘要:本文介绍了一级倒立摆控制系统中PID控制器的设计及其在MATLAB中的实现。通过设计PID控制器的参数,实现对倒立摆的稳定控制。文章详细阐述了PID控制器的原理、设计步骤及MATLAB仿真过程,展示了PID控制器在倒立摆控制系统中的有效性和实用性。

系列文章目录

最优控制介绍

一级倒立摆控制 —— 系统建模(传递函数模型与状态空间方程表示)

一级倒立摆控制 —— 最优控制 线性二次型控制(LQR)及 MATLAB 实现

一级倒立摆控制 —— MPC 控制器设计及 MATLAB 实现

一级倒立摆控制 —— ROS2 仿真

一级倒立摆控制 —— LQR 控制器 GAZEBO 仿真


文章目录

  • 系列文章目录
    • 前言
    • 一、系统结构
    • 二、PID 控制
    • 三、小车的位置会发生什么变化?

      前言

      在本页中,我们将为倒立摆系统设计一个 PID 控制器。在设计过程中,我们将假设一个单输入、单输出设备,其传递函数如下。除此以外,我们将尝试在不考虑小车位置的情况下控制摆的角度。

      摆杆传递函数方程:

      P p e n d ( s ) = Φ ( s ) U ( s ) = m l q s 2 s 4 + b ( I + m l 2 ) q s 3 − ( M + m ) m g l q s 2 − b m g l q s P_{pend}(s)=\dfrac{\Phi(s)}{U(s)}=\dfrac{\dfrac{ml}{q}s^2}{s^4+\dfrac{b(I+ml^2)}{q}s^3-\dfrac{(M+m)mgl}{q}s^2-\dfrac{bmgl}{q}s} Ppend​(s)=U(s)Φ(s)​=s4+qb(I+ml2)​s3−q(M+m)mgl​s2−qbmgl​sqml​s2​

      式中, q = [ ( M + m ) ( I + m l 2 ) − ( m l ) 2 ] q=[(M+m)(I+ml^2)-(ml)^2] q=[(M+m)(I+ml2)−(ml)2]

      更具体地说,当小车受到 1-Nsec 的冲力时,控制器将试图保持摆锤垂直向上。在这些条件下,设计标准是:

      1. 稳定时间小于 5 秒
      2. 摆锤偏离垂直方向的幅度不应超过 0.05 弧度

      有关原始问题设置和上述传递函数的推导,请查阅倒立摆: 系统建模页面。

      一、系统结构

      这个问题的控制器结构与您可能习惯的标准控制问题有些不同。由于我们试图控制摆的位置,而摆的位置在受到初始扰动后应返回垂直方向,因此我们跟踪的参考信号应为零。这种情况通常被称为调节器问题。施加在小车上的外力可视为脉冲干扰。该问题的示意图如下。

      一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,一级倒立摆控制,PID控制器设计与MATLAB实现 第1张

      如果我们先将原理图重新排列如下,您可能会发现分析和设计该系统更加容易。

      一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,一级倒立摆控制,PID控制器设计与MATLAB实现 第2张

      因此,闭环系统从力 F F F 输入到摆角 ϕ \phi ϕ 输出的传递函数 T ( s ) T(s) T(s) 确定如下。

      T ( s ) = Φ ( s ) U ( s ) = P p e n d ( s ) 1 + C ( s ) P p e n d ( s ) \begin{equation} T(s)=\dfrac{\Phi(s)}{U(s)}=\dfrac{P_{pend}(s)}{1+C(s)P_{pend}(s)} \end{equation} T(s)=U(s)Φ(s)​=1+C(s)Ppend​(s)Ppend​(s)​​​

      在开始设计 PID 控制器之前,我们首先需要在 MATLAB 中定义倒立摆传递函数模型。创建一个新的 .m 文件并键入以下命令来创建传递函数模型(有关获取这些命令的详细信息,请参阅主问题)。

      M = 0.5;
      m = 0.2;
      b = 0.1;
      I = 0.006;
      g = 9.8;
      l = 0.3;
      q = (M+m)*(I+m*l^2)-(m*l)^2;
      s = tf('s');
      P_pend = (m*l*s/q)/(s^3 + (b*(I + m*l^2))*s^2/q - ((M + m)*m*g*l)*s/q - b*m*g*l/q);
      

      接下来,我们将定义一个 PID 控制器。

      二、PID 控制

      在 MATLAB 中可以通过将以下代码复制到 .m 文件末尾来模拟闭环传递函数(无论您使用的是传递函数形式还是模型的状态空间表示形式)。具体来说,我们使用 MATLAB 中的 pid 对象定义控制器。然后,我们使用反馈命令生成闭环传递函数 T ( s ) T(s) T(s),如上图所示,其中干扰力 F F F 为输入,摆锤角度与垂直方向的偏差 ϕ \phi ϕ 为输出。

      t=0:0.01:10;
      impulse(T,t)
      title({'Response of Pendulum Position to an Impulse Disturbance';'under PID Control: Kp = 1, Ki = 1, Kd = 1'});
      

      一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,一级倒立摆控制,PID控制器设计与MATLAB实现 第3张

      这个响应仍然不稳定。让我们开始通过增加比例增益来修改响应。增加 K p K_p Kp​ 变量,看看它对响应有什么影响。如果将 .m 文件修改为 K p K_p Kp​ = 100,并在命令窗口中运行,将得到下图所示的响应图。

      Kp = 100;
      Ki = 1;
      Kd = 1;
      C = pid(Kp,Ki,Kd);
      T = feedback(P_pend,C);
      t=0:0.01:10;
      impulse(T,t)
      axis([0, 2.5, -0.2, 0.2]);
      title({'Response of Pendulum Position to an Impulse Disturbance';'under PID Control: Kp = 100, Ki = 1, Kd = 1'});
      

      一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,一级倒立摆控制,PID控制器设计与MATLAB实现 第4张

      在绘制的曲线图上单击右键,从菜单中选择 “特征”,即可确定响应的重要特征。具体来说,响应的稳定时间被确定为 1.64 秒,小于 5 秒的要求。由于稳态误差以足够快的速度趋近于零,因此不需要额外的积分动作。您可以将积分增益常数 K i K_i Ki​ 设为零,以亲自验证是否需要进行积分控制。不过,峰值响应大于 0.05 弧度的要求。回想一下,通常可以通过增加导数控制量来减少过冲。经过反复试验,我们发现导数增益 K d K_d Kd​ = 20 可以提供令人满意的响应。对 m 文件作如下修改并重新运行后,将得到下图所示的响应图

      Kp = 100;
      Ki = 1;
      Kd = 20;
      C = pid(Kp,Ki,Kd);
      T = feedback(P_pend,C);
      t=0:0.01:10;
      impulse(T,t)
      axis([0, 2.5, -0.2, 0.2]);
      title({'Response of Pendulum Position to an Impulse Disturbance';'under PID Control: Kp = 100, Ki = 1, Kd = 20'});
      

      一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,一级倒立摆控制,PID控制器设计与MATLAB实现 第5张

      可以看到,过冲已经减小,摆锤偏离垂直方向的幅度不会超过 0.05 弧度。由于所有给定的设计要求都已满足,因此不需要进一步迭代。

      三、小车的位置会发生什么变化?

      本页开头给出了倒立摆系统的方框图。该图并不完整。代表小车位置 x x x 响应的图块没有包括在内,因为该变量没有被控制。但有趣的是,当摆锤角度 ϕ \phi ϕ 的控制器就位时,小车的位置会发生什么变化。要了解这一点,我们需要考虑整个系统框图,如下图所示。

      一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,一级倒立摆控制,PID控制器设计与MATLAB实现 第6张

      重新排列后,我们得到以下框图。

      一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,一级倒立摆控制,PID控制器设计与MATLAB实现 第7张

      在上图中,块 C ( s ) C(s) C(s) 是为保持摆锤垂直而设计的控制器。因此,从施加到小车的输入力到小车位置输出的闭环传递函数 T 2 ( s ) T_2(s) T2​(s) 如下所示。

      T ( s ) = X ( s ) F ( s ) = P c a r t ( s ) 1 + C ( s ) P p e n d ( s ) \begin{equation} T(s)=\dfrac{X(s)}{F(s)}=\dfrac{P_{cart}(s)}{1+C(s)P_{pend}(s)} \end{equation} T(s)=F(s)X(s)​=1+C(s)Ppend​(s)Pcart​(s)​​​

      请参考倒立摆: 系统建模页面, P c a r t ( s ) P_{cart}(s) Pcart​(s) 的传递函数定义如下。

      P c a r t ( s ) = Φ ( s ) U ( s ) = ( I + m l 2 ) s 2 − m g l q s 4 + b ( I + m l 2 ) q s 3 − ( M + m ) m g l q s 2 − b m g l q s \begin{equation} P_{cart}(s)=\dfrac{\Phi(s)}{U(s)}=\dfrac{\dfrac{(I+ml^2)s^2-mgl}{q}}{s^4+\dfrac{b(I+ml^2)}{q}s^3-\dfrac{(M+m)mgl}{q}s^2-\dfrac{bmgl}{q}s} \end{equation} Pcart​(s)=U(s)Φ(s)​=s4+qb(I+ml2)​s3−q(M+m)mgl​s2−qbmgl​sq(I+ml2)s2−mgl​​​​

      式中, q = [ ( M + m ) ( I + m l 2 ) − ( m l ) 2 ] q=[(M+m)(I+ml^2)-(ml)^2] q=[(M+m)(I+ml2)−(ml)2]

      在您的 m 文件中添加以下命令(假设 P p e n d ( s ) P_{pend}(s) Ppend​(s) 和 C ( s ) C(s) C(s) 仍已定义),将生成小车位置对我们一直在考虑的相同脉冲干扰的响应。

      P_cart = (((I+m*l^2)/q)*s^2 - (m*g*l/q))/(s^4 + (b*(I + m*l^2))*s^3/q - ((M + m)*m*g*l)*s^2/q - b*m*g*l*s/q);
      T2 = feedback(1,P_pend*C)*P_cart;
      t = 0:0.01:5;
      impulse(T2, t);
      title({'Response of Cart Position to an Impulse Disturbance';'under PID Control: Kp = 100, Ki = 1, Kd = 20'});
      

      一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,一级倒立摆控制,PID控制器设计与MATLAB实现 第8张

      可以看到,小车以近似恒定的速度向负方向移动。因此,尽管 PID 控制器能稳定摆锤的角度,但在实际物理系统中实施这种设计并不可行。



0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码