控制理论是一门研究如何通过输入信号使系统以期望方式运行的学科。
飞机、汽车、火车、电路及火箭等多种系统,都需要一个类似于大脑的核心控制单元或内部架构。
控制理论正是对这些复杂系统的控制架构进行深入研究的领域。
在本文中,我们提供了一个关于如何构建复杂系统架构的基础指南,将探讨如何运用控制理论,并借助Python编程语言来构建一个火箭控制系统。
你将深入了解以下内容:
火箭系统与烘焙蛋糕之间的趣味类比
让我们用一个烤蛋糕的比喻来解释。设想你正在制作一个蛋糕,你的食谱提供了制作蛋糕所需的步骤和材料。
为什么控制系统在编程中
理解控制系统可以帮助你在算法设计和系统思维方面变得更加熟练。
此外,它还允许你在反馈回路中调整过程,这在编程的众多领域中都非常关键。
你主要会在以下软件开发中应用控制理论和控制系统:
如何创建一个火箭控制系统
以烤蛋糕的类比来阐述:
二、简化火箭控制原理:深入理解PID控制器
一个简单的控制系统:PID控制器
每个控制系统都配备有一个核心组件——控制器,以执行其运行指令。在众多控制器中,PID控制器是最为常用的类型之一。它因其简单性和高效性,在简单控制系统中得到了广泛的应用。
在以下代码示例中,我们将采用PID控制器。选择PID控制器的原因在于,它对于处理基础控制任务来说,不仅易于实现,而且效果显著。
在火箭控制系统中,PID控制器承担着通过对比火箭的实际飞行位置与预定轨迹(即反馈环节)来不断调整飞行路径(即处理环节)的任务。
这一机制确保了火箭能够精确地沿着预定轨道飞行,并最终准确抵达目的地。
PID控制器由三个关键部分组成,它们在系统的处理与反馈环节中协同作用:比例增益(Kp)、积分增益(Ki)以及微分增益(Kd)。
设计一个稳定的控制系统。
设计稳定控制系统的过程称为稳定性分析。
方法有很多,但在代码示例中我们将
传递函数的需求:控制火箭和确定组件值
传递揭示了输入信号如何通过数学关系转换为输出信号。
在当前的情境中,理论传递函数代表PID控制器的功能
而物理系统传递函数则描述了系统中物理组件在
通过将这两类传递函数相结合,我们能够深入理解材料和组件值的实际表现,例如:
工程师如何找到物理传递函数方程?
它是用于将卫星送入近地轨道或中地球轨道,还是用于执行月球探测等深空任务?
明确了火箭的具体应用场景之 分析来推导出传递函数的物理方程。
实际上,存在一个专门的工程领域,称为系统识别,其研究重点就是如何确定系统的传递函数。
接下来,让我们探讨如何针对控制系统,找到其物理传递函数的方法。
代码示例:设计一个简单的PID控制器
在接下来的代码示例中,我们将构建一个用于火箭的简易控制系统。
在深入代码细节之前,我们先来讨论一下分贝的概念。
分贝是一种采用对数尺度来衡量声音强度的单位。在控制理论领域,分贝被用来以更直观的方式在图表上表示增益。
范围内看到更多大大小小的
换句话说,通过对数尺度的增益,我们可以清晰地看到输入信号在何种程度上被放大并转化为输出信号。
我还将解释根轨迹、波德图和奈奎斯特图如何
# Step 1: Import librariesimport matplotlib.pyplot as pltimport control as ctrl# Step 2: Define a new rocket transfer function with poles closer to the imaginary axis
num = [10]den = [2, 2, 1]G = ctrl.TransferFunction(num, den)# Step 3: Design a PID controller with new parametersKp = 5Ki = 2Kd = 1C = ctrl.TransferFunction([Kd, Kp, Ki], [1, 0])# Step 4: Applying the PID controller to the rocket transfer functionCL = ctrl.feedback(C * G, 1)# Step 5: Plot Root Locus for Closed-Loop Systemplt.figure(figsize=(10, 6))ctrl.root_locus(C * G, grid=True)plt.title("Root Locus Plot (Closed-Loop)")# Step 6: Plot Bode Plot for Closed-Loop Systemplt.figure(figsize=(10, 6))ctrl.bode_plot(CL, dB=True, Hz=False, deg=True)plt.suptitle("Bode Plot (Closed-Loop)", fnotallow=16)# Step 7: Plot Nyquist Plot for Closed-Loop Systemplt.figure(figsize=(10, 6))ctrl.nyquist_plot(CL)plt.title("Nyquist Plot (Closed-Loop)")plt.show()
import matplotlib.pyplot as pltimport control as ctrl
在这里我们导入两个库:
步:定义火箭系统的传递函数
num = [10]den = [2, 2, 1]G = ctrl.TransferFunction(num, den)
在这段代码中,我们定义了物理系统的传递函数
是我们要用PID控制的传递函数:
<!DOCTYPE html>Black-Scholes Equation$$\frac{\partial V}{\partial t} + \frac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} = rV - rS \frac{\partial V}{\partial S}$$
在本代码示例中,所展示的火箭方程对应的传递函数被极大地简化了。然而,在现实应用场景中,火箭的传递函数并非属于时不变线性系统。实际上,它们往往表现出极高的复杂性,属于典型的非线性系统。
第3步:设计具有新参数的PID控制器
Kp = 5Ki = 2Kd = 1C = ctrl.TransferFunction([Kd, Kp, Ki], [1, 0])
此代码设置具有特定增益的PID控制器并创建传递函数:
第4步:将PID控制器应用于火箭传递函数
CL = ctrl.feedback(C * G, 1)
PID控制器在火箭传递函数中的应用
第5步:增益分析的根轨迹
plt.figure(figsize=(10, 6))ctrl.root_locus(C * G, grid=True)plt.title("Root Locus Plot (Closed-Loop)")
这是一幅根轨迹图,它是工程师们为了研究控制系统稳定性而采用的一种分析工具。
图中所示的十字标记,被称作极点,其在根轨迹图中的位置至关重要。
当极点位于图的左侧时,表明系统处于稳定状态;反之,若极点位于右侧,则意味着系统是不稳定的。
极点越偏向左侧,系统在遭受干扰后恢复至正常状态的速度越快,从而系统的稳定性越高。
然而,极点过度左移可能会导致系统产生过多的振荡,其稳定性取决于极点的具体位置。
第6步:稳定性分析的波德图分析
plt.figure(figsize=(10, 6))ctrl.bode_plot(CL, dB=True, Hz=False, deg=True)plt.suptitle("Bode Plot (Closed-Loop)", fnotallow=16)
波德图的创制旨在辅助工程师深入掌握系统对变化的响应特性,以及其在不同工况下的稳定性能。
此外,波德图亦能揭示系统的稳定状态及其安全裕度
以下,我们将探讨波德图的工作原理
上述图表中的上方图像被称为幅度图,而下方图像则称为相位图。
幅度图用于衡量系统在各个频率下的增益大小。较高的增益值表示系统具有更迅速且强烈的响应,这对于实现精确控制是有益的。
相位图则用于测量系统在各个频率下所引入的相位移。当增益降至零时,我们可以观察到相位移的情况。
在此情形下,我们可以通过绿线确定增益为零的时刻,以及与红线相对应的相位移,其数值大约为63度。
理想情况下,相位移的范围应控制在30到60度之间,这一范围能够在系统的稳定性和响应速度之间取得平衡。
若相位移超过60度,系统将表现出极高的稳定性,但可能会降低系统对变化的响应速度。
综上所述,通过对该图表的分析,我们可以得出结论,该PID控制器是处于稳定状态的。
第7步:用于稳定性分析的奈奎斯特
plt.figure(figsize=(10, 6))ctrl.nyquist_plot(CL)plt.title("Nyquist Plot (Closed-Loop)")
奈奎斯特图是一种辅助工程师迅速评估控制系统稳定性的工具。
火箭控制系统设计的最终阶段
在完成PID控制系统的设计之后,我们可以利用诸如 之类的工具来确定众多组件所需的确切参数。
换句话说,在确定了最佳的PID控制器参数之后,便进入了确定火箭物理组件参数的阶段。
得益于Simulink,我们能够根据火箭的任务需求,获得设计火箭所需的所有这些参数。
通过构建一个稳定的控制系统,并基于PID控制器来控制火箭的物理传递函数,我们能够确定每个组件所需的所有关键参数。
对于线性时不变系统(LTI)的优化,我们拥有多种方法:
利用这些工具,我们可以构建出一个有效的控制系统。
然而,在这一过程中,最好采用 ,以便更快速地确定最佳的PID控制器参数。
在本次研究中,我们以一个极为简化的火箭系统
在现实情况中,我们通常仅使用非线性工具,因为所有的火箭系统本质上都是非线性
以自适应控制为例,控制系统会实时调整自身以应对不断变化的环境条件。
被用于稳定性分析,而非上述三种图形分析。
尽管如此,构建这些控制系统的过程始终保持一致。本文详细阐述了这一过程的工作原理,以及它是如何应用于线性时不变系统的。
刘涛,社区编辑,某大型央企系统上线检测管控负责人。
原文标题: How to Build a Rocket Control System: Basic Control Theory with Python ,作者:Tiago Monteiro