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

这篇具有很好参考价值的文章主要介绍了一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

最优控制介绍
一级倒立摆控制 —— 系统建模(传递函数模型与状态空间方程表示)
一级倒立摆控制 —— 最优控制 线性二次型控制(LQR)及 MATLAB 实现
一级倒立摆控制 —— MPC 控制器设计及 MATLAB 实现
一级倒立摆控制 —— ROS2 仿真
一级倒立摆控制 —— LQR 控制器 GAZEBO 仿真



前言

在本页中,我们将为倒立摆系统设计一个 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)s3q(M+m)mgls2qbmglsqmls2
式中, 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 弧度

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

一、系统结构

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

一阶倒立摆matlab,经典控制理论与MATLAB实现,matlab,机器人,stm32,PID,控制系统,倒立摆,自动驾驶
如果我们先将原理图重新排列如下,您可能会发现分析和设计该系统更加容易。

一阶倒立摆matlab,经典控制理论与MATLAB实现,matlab,机器人,stm32,PID,控制系统,倒立摆,自动驾驶
因此,闭环系统从力 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'});

一阶倒立摆matlab,经典控制理论与MATLAB实现,matlab,机器人,stm32,PID,控制系统,倒立摆,自动驾驶
这个响应仍然不稳定。让我们开始通过增加比例增益来修改响应。增加 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'});

一阶倒立摆matlab,经典控制理论与MATLAB实现,matlab,机器人,stm32,PID,控制系统,倒立摆,自动驾驶
在绘制的曲线图上单击右键,从菜单中选择 “特征”,即可确定响应的重要特征。具体来说,响应的稳定时间被确定为 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'});

一阶倒立摆matlab,经典控制理论与MATLAB实现,matlab,机器人,stm32,PID,控制系统,倒立摆,自动驾驶

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

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

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

一阶倒立摆matlab,经典控制理论与MATLAB实现,matlab,机器人,stm32,PID,控制系统,倒立摆,自动驾驶

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

一阶倒立摆matlab,经典控制理论与MATLAB实现,matlab,机器人,stm32,PID,控制系统,倒立摆,自动驾驶

在上图中,块 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)s3q(M+m)mgls2qbmglsq(I+ml2)s2mgl

式中, 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'});

一阶倒立摆matlab,经典控制理论与MATLAB实现,matlab,机器人,stm32,PID,控制系统,倒立摆,自动驾驶

可以看到,小车以近似恒定的速度向负方向移动。因此,尽管 PID 控制器能稳定摆锤的角度,但在实际物理系统中实施这种设计并不可行。文章来源地址https://www.toymoban.com/news/detail-773359.html


到了这里,关于一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Matlab】简单PID 控制器设计(控制系统工具箱)

    这里展示如何设计一个简单的PID控制器。 传递函数如下: s y s = 1 ( s + 1 ) 3 sys=frac{1}{(s+1)^3} sys = ( s + 1 ) 3 1 ​ 首先,创建模型并选用PI控制器: 生成结果如下: (交叉频率约为0.52 rad/s,相位裕度为60) 检查受控系统的闭环阶跃响应: 为了缩短响应时间,可以设置比自动选择

    2024年02月06日
    浏览(35)
  • 【抗扰PID控制】干扰抑制PID控制器研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、Simulink、文

    2024年02月11日
    浏览(39)
  • 现代控制理论课程实验三:一阶倒立摆的LQR控制器设计

    1、理解并掌握线性状态反馈控制的原理和方法; 2、理解并掌握LQR控制器设计方法; 3、练习控制性能比较与评估的方法。 实验设备 倒立摆实验台 实验软件 MATLAB软件 倒立摆系统的各量含义与关系如下表和下图。 根据牛顿定律建立系统垂直和水平方向的动力学方程,计及

    2024年02月05日
    浏览(66)
  • 【GUI】使用PID控制器进行台式过程控制实验,以保持热敏电阻的温度(Matlab代码实现)

    目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、操作说明 本实验是温度控制的反馈控制应用。特别是,本实验讲解: 手动和自动控制的区别 生成动态数据的 步进测试 拟合动态数据以构建简单的一阶加死区时间 (FOPDT) 模型 从标准调整规则 获取 PID 控制的 参数

    2024年02月15日
    浏览(36)
  • 基于Matlab自抗扰控制器及其PID控制(附上完整源码+数据)

    自抗扰控制器(Active Disturbance Rejection Control, ADRC)是一种新型的控制策略,它具有强大的抗干扰能力和良好的控制性能。与传统的PID控制器相比,ADRC能够更好地抑制系统的干扰,提高控制系统的稳定性和鲁棒性。 在ADRC中,核心思想是引入一个扰动观测器(Disturbance Observer,

    2024年02月16日
    浏览(37)
  • 基于FPGA的PID控制器设计

    PID控制应该算是应用非常广泛的控制算法了。常见的比如控制环境温度,控制无人机飞行高度速度等。PID我们将其分成三个参数,如下: P-比例控制,基本作用就是控制对象以线性的方式增加,在一个常量比例下,动态输出,缺点是会产生一个稳态误差。 I-积分控制,基本作

    2024年02月03日
    浏览(48)
  • 基于simulink的PID控制器设计

    目录 1、PID算法的基本理论 1.1 PID 控制的基本概念 1.2 基本公式 1.3 PID控制系统原理图 2、在simulink中搭建PID控制器模型及调参  3、调参 PID 控制器是一种比例、积分、微分并联控制器。它是最广泛应用的一种控制器。在 PID 控制器中,它的数学模型由比例、积分、微分三部分

    2024年02月03日
    浏览(45)
  • 模糊PID控制器的实现

    本文讨论有关模糊PID相关的问题。模糊PID是一种将PID控制和模糊算法结合起来的控制算法,其实质上是将模糊算法用在了PID的参数整定上,以此来满足需要动态调整PID参数的系统的要求。 (1)传统的控制方法有时无法满足控制精度的要求,而且抗干扰的能力较弱,模糊控制可以

    2023年04月16日
    浏览(33)
  • 基于ROS实现的机器人运动PID控制器

    下面是一个基于ROS实现的机器人运动PID控制器的例子: 首先,需要定义机器人的运动控制器节点,例如: 其中, cmd_vel_pub 是一个发布器,用于发布机器人的运动控制指令; odom_sub 是一个订阅器,用于接收机器人的里程计信息。 然后,需要实现一个PID控制器的类,例如: 其

    2024年02月13日
    浏览(36)
  • FPGA实现PID控制器——基于Quartus prime 18.0

    目录  1. PID控制器和离散化PID控制器 1.1 PID控制器 1.1.1 P控制器 1.1.2 稳态误差和I控制器 1.1.3 超调和D控制器 1.2 离散式PID控制器——位置式PID控制器 2.PID控制系统Simulink仿真 3.Verilog代码编写和Modelsim仿真 3.1 误差计算模块和PID算法模块编写 3.1.1 误差计算模块 3.1.2 PID算法模块 3

    2024年02月03日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包