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

系列文章目录

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

文章目录

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

前言

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

摆杆传递函数方程:
一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现
式中,一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现

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

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

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

一、系统结构

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

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

在开始设计 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 对象定义控制器。然后,我们使用反馈命令生成闭环传递函数 一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现,如上图所示,其中干扰力 一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现 为输入,摆锤角度与垂直方向的偏差 一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现 为输出。

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

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

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

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

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

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

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

在上图中,块一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现 是为保持摆锤垂直而设计的控制器。因此,从施加到小车的输入力到小车位置输出的闭环传递函数 一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现 如下所示。

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

请参考倒立摆: 系统建模页面,一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现 的传递函数定义如下。

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

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

在您的 m 文件中添加以下命令(假设 一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现 仍已定义),将生成小车位置对我们一直在考虑的相同脉冲干扰的响应。

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 控制器能稳定摆锤的角度,但在实际物理系统中实施这种设计并不可行。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年12月26日
下一篇 2023年12月26日

相关推荐