鱼鹰型倾斜旋翼飞机控制系统(源码+图析)【独一无二】
(a)是V-22鱼鹰型倾斜旋翼飞机示意图。V-22既是一种普通飞机,又是一种直升机。当飞机起飞和着陆时,其发动机位置可以如图示那样,使V-22像直升机那样垂直起降;而在起飞后,它又可以将发动机旋转90”,切换到水平位置,像普通飞机一样飞行。在直升机模式下,飞机的高度控制系统如图(b)所示。0)概略绘出当控制器增益K,变化时的系统根轨迹图,确定使系统稳定的K,值范围:
(2)当K,=280时,求系统对单位阶跃输入r(t)=1(t)的实际输出h(t),并确定系统的超调量和调节时间
(A=2%)
代码设计思路分析
该代码围绕鱼鹰自动控制系统的动态响应进行设计,利用传递函数、阶跃响应和反馈控制分析闭环系统的性能指标,主要包括以下功能:
- 定义一个二阶线性系统的传递函数
P(s)
表示被控系统。 - 定义控制器
C(s)
,并分析开环系统和闭环系统的动态性能。 - 分析系统的主要性能指标 超调量 和 调节时间。
- 判断闭环系统是否满足设计规范(调节时间小于 2 秒)。
- 通过模拟阶跃响应,绘制系统响应曲线。
代码结构和设计逻辑
1. 系统传递函数的定义
numerator = [1] # 分子
denominator = [1, 1.8, 1] # 分母
P_s = ctrl.TransferFunction(numerator, denominator)
设计思路:
-
背景:鱼鹰自动控制系统的核心部分为一个被控对象,该对象通常通过传递函数描述其动态行为。
-
实现:
- 被控系统通过传递函数形式定义,即:
P(s) = 1 / (s² + 1.8s + 1)。 - 分子的多项式系数存于
numerator
,分母对应二阶系统多项式的系数存于denominator
。
- 被控系统通过传递函数形式定义,即:
-
意义:
- 1:分子为 1,系统为标准二阶系统;
- 1.8:分母中的一阶项系数,与系统阻尼比和极点位置直接相关;
- 1:分母中的常数项,代表系统固有的特性。
2. 控制器的设计
K = 280 # 增益
C_s = ctrl.TransferFunction([K], [1])
设计思路:
-
背景:为了对系统进行控制,引入比例控制器,控制器函数为:C(s) = K。
-
实现:
- 控制器
C(s)
定义为一个比例增益,增益值为K = 280
,此处使用一个简单的比例控制器。
- 控制器
-
意义:
- 增益 K 的大小直接影响闭环系统的稳定性、响应速度和超调量。
- 随着增益值增加,系统表现出更快的响应,但可能增加系统的超调量和振荡。
3. 开环与闭环系统的建立
open_loop = C_s * P_s
# 代码略.....至少10行
# 代码略.....至少10行
设计思路:
-
背景:实际系统中,我们通常使用反馈控制系统,以提高系统的动态性能和跟踪能力。
-
实现:
open_loop
:定义开环传递函数,描述控制器和被控系统的串联组合;
G_open(s) = C(s) * P(s) = (K) / (s² + 1.8s + 1)。closed_loop
:通过反馈控制器引入反馈环路,描述闭环控制系统的整体动态特性:
T(s) = C(s) * P(s) / (1 + C(s) * P(s))。- 使用
ctrl.feedback
函数实现闭环系统的传递函数。
-
意义:闭环控制系统针对外部输入信号的动态响应是后续分析的重点。
4. 性能指标的分析
info = ctrl.step_info(closed_loop)
overshoot = info["Overshoot"]
settling_time = info["SettlingTime"]
设计思路:
-
背景:
- 动态系统的性能通常通过超调量、调节时间等指标衡量。
- 控制系统中常需要保证调节时间足够短,同时超调量不能过高。
-
实现:
- 使用
ctrl.step_info
函数计算闭环系统的性能指标:- 超调量(Overshoot):响应首次超过稳态值的最大百分比;
- 调节时间(Settling Time):系统响应进入并保持在稳态误差范围(通常定义为 ±2%)内所需的时间。
- 使用
-
意义:
- 超调量反映系统的稳定性,过大的超调量可能导致系统剧烈振荡;
- 调节时间用于衡量响应速度,是实际系统设计的关键指标。
5. 判断性能要求
is_settling_time_ok = settling_time < 2
# 代码略.....至少10行
# 代码略.....至少10行
else:
print(f"第二问 - 调节时间为 {settling_time:.2f} 秒")
设计思路:
-
背景:在系统设计中,要求调节时间(Settling Time)小于 2秒,否则视为不满足控制目标。
-
实现:
- 比较实际调节时间与目标要求
2秒
,通过布尔变量is_settling_time_ok
判断是否满足规范; - 输出结果,以便设计者依据反馈修改系统参数(如增益)。
- 比较实际调节时间与目标要求
-
意义:
- 判断是否满足调节时间要求,属于控制系统设计中的基本校验步骤。
6. 阶跃响应的绘制
time = np.linspace(0, 10, 1000)
# 代码略.....至少10行
# 代码略.....至少10行
plt.ylabel("响应幅值")
plt.grid()
plt.legend()
plt.show()
设计思路:
-
背景:
- 阶跃响应是控制系统分析中的常见测试,它能直观反映系统动态行为(稳定性、响应速度、超调等)。
-
实现:
- 生成时间序列
time = np.linspace(0, 10, 1000)
,代表仿真时间; - 使用
ctrl.step_response
计算阶跃输入下的响应数据response
; - 使用
matplotlib
绘制响应曲线,并添加期望值的水平参考线(响应幅值 1)。
- 生成时间序列
-
意义:
- 阶跃响应图能直接解释系统是否稳定,是否快速达到并保持在期望值附近。