22 KiB
自动控制理论AI+数智平台
交互式控制系统分析与设计工具 | 时域·频域·根轨迹·算例演示·AI问答
项目简介
自动控制理论AI+数智平台是一个基于 Gradio 构建的现代化自动控制原理学习平台,集成了系统分析工具、完整混动模型算例演示,和AI智能问答功能。本项目为西北工业大学2025年校级本科生建设项目成果。
平台旨在为自动控制理论课程提供交互式、数智化的学习环境,使学生能够直观理解控制系统的时域响应、频域特性、根轨迹分析等核心概念,并通过完整的混合动力系统算例演示,将理论知识与工程实践相结合。
核心功能
本平台提供五大核心功能模块,涵盖经典控制理论分析与现代控制系统设计:
1. 时域分析 (Time Domain Analysis)
时域分析是研究控制系统在时间域内对输入信号响应特性的方法,是自动控制理论的基础分析方法之一。
主要功能:
- 阶跃响应分析:观察系统对单位阶跃输入的响应,这是控制系统分析中最常用的测试信号
- 脉冲响应分析:观察系统对单位脉冲(δ函数)输入的响应,用于分析系统的固有特性
- 性能指标计算:自动计算并显示系统的关键时域性能指标
计算的性能指标:
| 指标 | 符号 | 定义 | 物理意义 |
|---|---|---|---|
| 上升时间 | t_r |
响应从稳态值的10%上升到90%所需时间 | 反映系统响应速度 |
| 峰值时间 | t_p |
响应达到第一个峰值的时间 | 反映系统阻尼特性 |
| 超调量 | \sigma\% |
峰值超过稳态值的百分比 | 反映系统振荡程度 |
| 调节时间 | t_s |
响应进入并保持在稳态值±2%区间的时间 | 反映系统 settling 速度 |
| 稳态值 | y(\infty) |
时间趋于无穷时系统的输出值 | 反映系统最终行为 |
二阶系统标准形式:
二阶系统是自动控制理论中最重要的系统类型,其标准传递函数为:
G(s) = \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2}
其中:
\omega_n— 自然频率(rad/s),表示系统无阻尼时的固有振荡频率\zeta— 阻尼比,表示系统阻尼程度的相对量
阻尼比与系统响应关系:
| 阻尼比范围 | 系统类型 | 响应特性 |
|---|---|---|
\zeta = 0 |
无阻尼 | 持续等幅振荡 |
0 < \zeta < 1 |
欠阻尼 | 振荡衰减,响应快速 |
\zeta = 1 |
临界阻尼 | 最快无振荡响应 |
\zeta > 1 |
过阻尼 | 无振荡,但响应较慢 |
稳态误差分析:
稳态误差是系统长期运行后实际输出与期望输出之间的差值,是评价系统控制精度的重要指标。对于单位反馈系统:
e_{ss} = \lim_{t\to\infty} e(t) = \lim_{s\to0} \frac{R(s)}{1+G(s)H(s)}
2. 频域分析 (Frequency Domain Analysis)
频域分析通过研究系统对不同频率正弦信号的响应特性来分析系统性能,是经典控制理论的核心方法之一。
主要功能:
- Bode 图绘制:同时显示幅频特性曲线和相频特性曲线
- Nyquist 图绘制:以极坐标形式展示系统频率响应
- 稳定裕度计算:定量评估系统的相对稳定性
Bode 图(波特图):
Bode 图包含两个子图:
- 幅频特性图:显示增益(单位:dB)随频率变化的关系
- 相频特性图:显示相位(单位:度)随频率变化的关系
对数频率特性的优点:
- 可以将频率范围压缩,便于观察宽频带内的特性
- 幅值相乘转化为对数相加,简化串联系统计算
- 渐近线近似作图简便实用
Nyquist 稳定判据:
Nyquist 图是基于复变函数理论的稳定性判据。对于闭环系统:
T(s) = \frac{G(s)}{1 + G(s)}
稳定性条件:当 \omega 从 -\infty 变化到 +\infty 时,G(j\omega)H(j\omega) 轨迹顺时针包围 (-1, j0) 点 P 圈,其中 P 为开环不稳定极点数。
稳定裕度(Stability Margins):
| 裕度类型 | 定义 | 计算公式 | 经验要求 |
|---|---|---|---|
| 增益裕度 GM | 相角为 -180° 时,闭环增益还能增大多少 |
$GM = \frac{1}{ | G(j\omega_g) |
| 相位裕度 PM | 增益为1(0dB)时,相位还能滞后多少 | PM = 180° + \angle G(j\omega_c) |
PM > 45° |
稳定性判断准则:
GM > 0dB 且PM > 0°→ 系统稳定GM < 0dB 或PM < 0°→ 系统不稳定
频域指标与时域性能的关系:
| 频域指标 | 时域对应 | 经验公式 |
|---|---|---|
带宽 \omega_b |
上升时间 t_r |
t_r \approx \frac{1.8}{\omega_b} |
| 相位裕度 PM | 超调量 \sigma\% |
\sigma\% \approx 100 \times e^{-\pi PM/(90-PM)} |
| 增益裕度 GM | 稳定余量 | GM 越大,系统对不确定性越不敏感 |
3. 根轨迹分析 (Root Locus Analysis)
根轨迹法是一种图解方法,用于分析系统闭环极点随增益 K 变化的轨迹,是控制系统设计的核心工具。
主要功能:
- 完整根轨迹绘制:自动绘制开环增益从0到无穷变化时的闭环极点轨迹
- 增益调节:通过滑块精确调节增益 K,实时观察极点位置变化
- 极点跟踪:显示当前增益下闭环极点的精确位置
- 动态坐标:自动调整坐标系范围,聚焦关键区域
根轨迹的基本规则:
-
起点与终点:
- 起点(K=0):开环传递函数的极点(
n个) - 终点(K→∞):开环传递函数的零点(
m个),剩余n-m个趋向无穷
- 起点(K=0):开环传递函数的极点(
-
渐近线:
- 当
K \to \infty时,根轨迹趋向n-m条渐近线 - 渐近线与实轴的夹角:
\phi_a = \frac{(2k+1)180°}{n-m}
- 当
-
分离点与会合点:
- 根轨迹在实轴上相邻两分支之间的某点分离或会合
- 分离点坐标可通过求解
\frac{dK}{ds} = 0得到
-
与虚轴的交点:
- 根轨迹与虚轴的交点对应的增益和频率可通过劳斯判据确定
s平面稳定性区域:
| 极点位置 | 系统状态 | 物理意义 |
|---|---|---|
| 左半平面(Re(s) < 0) | 稳定 | 响应最终衰减 |
| 虚轴(Re(s) = 0) | 临界稳定 | 持续振荡 |
| 右半平面(Re(s) > 0) | 不稳定 | 响应发散 |
阻尼比等值线:
在 s 平面上,阻尼比 \zeta 等于常数的曲线是通过原点的射线。对于二阶系统:
\zeta = \cos(\theta)
其中 \theta 是该射线与负实轴的夹角。阻尼比越大,射线越接近负实轴,系统响应越平稳但越缓慢。
4. 算例演示 (Case Demo)
算例演示模块是本平台的特色功能,通过完整的串联式混合动力系统模型,展示控制系统设计在实际工程中的应用。
模块架构(四阶段设计):
阶段零:模型训练
├── GPR模型训练/加载(高斯过程回归)
└── NN模型训练(知识蒸馏)
阶段一:发动机控制器设计
├── PID控制器
└── MPC控制器(模型预测控制)
阶段二:电机控制器设计
├── PID控制器
└── MPC控制器(模型预测控制)
阶段三:能量管理策略设计
├── 规则型能量管理(基于SOC滞环)
└── 完整混动系统仿真
发动机模型(Engine Model):
基于高斯过程回归(GPR)和神经网络(NN)代理模型的涡轴发动机动态仿真:
- 输入变量:高度
H(m)、马赫数 $Ma$、转速N(RPM) - 输出变量:燃油流量
W_f(kg/h)、输出功率P(kW)
发动机动态特性:
\tau_f \frac{dW_f}{dt} + W_f = W_{f,cmd}
T \frac{dN}{dt} = K(W_f - W_{f,eq}(N))
其中 \tau_f 是燃油执行机构时间常数,K 是转子惯性增益。
电机模型(Motor Model):
永磁同步电机(PMSM)离散时间动力学模型:
- d/q轴电流控制:
i_d = 0控制(MTPA) - 转矩方程:
T_e = 1.5n_p[\psi_f + (L_d - L_q)i_d]i_q - 机械方程:
J\frac{d\omega}{dt} = T_e - T_L - B\omega
电池模型(Battery Model):
等效电路模型,包含:
- 开路电压 OCV:与 SOC 相关的非线性查表
- 内阻:
R_{in} = 0.15 \Omega - SOC 更新:安时积分法
SOC_{k+1} = SOC_k - \frac{I_k \cdot \Delta t}{C_{capacity}}
能量管理策略(EMS):
基于规则的功率跟随策略,配合 SOC 滞环控制:
| SOC 区间 | 工作模式 | 控制策略 |
|---|---|---|
SOC < SOC_{low} |
充电模式 | 发动机输出固定功率 P_{charge} |
SOC > SOC_{high} |
功率跟随 | 发动机输出 = 电机需求 + 储备功率 + SOC补偿 |
| 滞环区间内 | 保持 | 维持前一模式 |
MPC控制器(模型预测控制):
滚动时域优化控制器,核心思想:
- 预测模型:利用系统线性化模型预测未来 H 步状态
- 优化目标:
\min \sum_{k=1}^{H} [\|w_k - w_{ref}\|^2_{Q} + \|\Delta u_k\|^2_{R}] - 约束处理:执行机构限幅、超调量硬约束
本平台使用纯 Python 实现的投影梯度下降求解器,替代传统的 SLSQP / GEKKO 方案,避免 Fortran ABI 兼容性问题。
PID控制器(增量式):
增量式 PID 控制器公式:
\Delta u(k) = k_p[e(k) - e(k-1)] + k_i e(k) + k_d[e(k) - 2e(k-1) + e(k-2)]
特点:
- 计算增量而非绝对量,避免积分饱和
- 支持输入/输出量程归一化,便于参数调节
5. AI 智能问答 (Q&A)
AI 问答模块集成了 DeepSeek API,提供24小时在线的自动控制理论学习助手。
主要功能:
- 专业教学助手:精通自动控制原理的 AI 教授
- 流式响应:实时逐字显示 AI 回复,支持多轮对话
- LaTeX 公式渲染:完美支持数学公式显示
- 上下文记忆:支持多轮连续对话,理解对话上下文
支持的 API:
| API 提供商 | 模型选择 | 特点 |
|---|---|---|
| DeepSeek | deepseek-chat / deepseek-coder | 国内访问,中文优化 |
提问技巧:
✅ 推荐的问题类型:
- 概念解释:"请解释传递函数的定义和物理意义"
- 公式推导:"如何推导二阶系统的超调量公式?"
- 例题讲解:"如何用劳斯判据判断这个系统的稳定性?"
- 参数分析:"PID控制器中三个参数分别如何影响系统响应?"
❌ 应避免的问题:
- 过于宽泛:"帮我做作业"(建议具体描述问题)
- 缺乏上下文:"这个对吗?"(请提供具体系统参数)
系统要求
运行环境
| 项目 | 要求 |
|---|---|
| Python 版本 | 3.10+ |
| 操作系统 | Windows / Linux / macOS |
| 内存 | 建议 8GB 以上 |
| 显卡 | 可选(用于 GPR 训练加速,CPU 模式也可运行) |
浏览器要求
推荐使用以下浏览器的最新版本以获得最佳体验:
- Google Chrome 90+
- Microsoft Edge 90+
- Mozilla Firefox 88+
- Apple Safari 14+
快速开始
方式一:使用 pip 安装(推荐)
1. 克隆项目
git clone <your-repo-url>
cd AutoControlCourse
2. 创建虚拟环境(推荐)
# 使用 venv
python -m venv my_gradio_env
source my_gradio_env/bin/activate # Linux/macOS
# 或
my_gradio_env\Scripts\activate # Windows
# 或使用 conda
conda create -n autocontrol python=3.10
conda activate autocontrol
3. 安装依赖
pip install -r requirements.txt
4. 配置 API 密钥
编辑 config.py 文件中的 API 配置区域:
# ==================== API 配置 ====================
API_KEY = "your-api-key-here" # 填入您的 DeepSeek API 密钥
API_BASE_URL = "https://api.deepseek.com/v1"
API_MODEL = "deepseek-chat"
API_TYPE = "deepseek"
# ==================================================
获取 DeepSeek API 密钥:
- 访问 https://platform.deepseek.com/api_keys
- 注册并登录账号
- 点击"创建新密钥"
- 复制生成的密钥并填入配置
5. 运行应用
python app.py
6. 访问应用
浏览器将自动打开,或手动访问:
http://localhost:7860
方式二:使用 Docker(可选)
# 构建镜像
docker build -t autocontrol-course .
# 运行容器
docker run -p 7860:7860 \
-e API_KEY="your-api-key" \
autocontrol-course
项目结构
AutoControlCourse/
├── app.py # Gradio 主入口,事件绑定与界面布局
├── ui_components.py # 各功能标签页的 UI 组件定义
├── analysis_functions.py # 时域/频域/根轨迹分析核心计算函数
├── case_demo_functions.py # 算例演示模块(混动模型四阶段仿真)
├── chatbot.py # AI 智能问答(DeepSeek API 集成)
├── user_stats.py # 在线人数统计与数据持久化
├── config.py # 全局配置(API密钥、服务器端口等)
├── requirements.txt # Python 依赖列表
│
├── Model/ # 混动模型核心代码
│ ├── src/
│ │ ├── lightweight_model.py # NN代理模型(MLP,用于替代GPR)
│ │ ├── engine_gpr_class.py # GPR高斯过程回归模型
│ │ ├── distill_gpr_to_nn.py # 知识蒸馏脚本(GPR→NN)
│ │ ├── engine_dynamic_sim.py # 涡轴发动机动态仿真
│ │ ├── motor_sim.py # PMSM永磁同步电机仿真
│ │ ├── battery_sim.py # 电池等效电路仿真
│ │ ├── mpc_controller.py # MPC模型预测控制器
│ │ ├── increPID.py # 增量式PID控制器
│ │ └── series_hybrid_sim.py # 串联混动系统总成
│ └── data/
│ ├── Cleaned_Engine_Data_Full.csv # 发动机标定数据
│ ├── engine_gpr_model.pth # GPR模型权重
│ └── engine_nn_proxy.pth # NN代理模型权重
│
└── assets/ # 静态资源
├── styles.css # 自定义CSS样式
└── knowledge_cards_html.py # 各模块知识卡片HTML内容
技术栈
前端框架
- Gradio 4.44.1:快速构建机器学习 Web 界面的 Python 库
- Custom CSS:现代化样式定制,支持响应式布局
核心计算库
| 库名 | 版本 | 用途 |
|---|---|---|
| NumPy | 1.26.4 | 数值计算基础库 |
| python-control | 0.9.4 | 控制系统分析工具箱 |
| Matplotlib | 3.9.4 | 图表绑制 |
| PyTorch | 2.4.1 | 神经网络推理(CPU模式) |
AI 集成
| 库名 | 用途 |
|---|---|
| aiohttp | 异步HTTP请求,流式响应 |
| DeepSeek API | AI问答后端服务 |
其他依赖
| 库名 | 用途 |
|---|---|
| pandas | 数据处理(发动机CSV数据读取) |
| scikit-learn | 数据归一化预处理 |
| psutil | 系统资源监控(CPU/内存/显存) |
算例演示模块详解
阶段零:模型训练
GPR 模型训练/加载:
高斯过程回归是一种非参数概率模型,适合小样本、高维插值。
# 运行模式
mode = "load" # 加载已有模型(推荐)
mode = "train" # 从头训练(需要 botorch/gpytorch)
NN 模型训练(知识蒸馏):
将 GPR 模型的知识蒸馏到轻量级 MLP 中,用于实时控制仿真。
关键参数:
- 训练轮数 (Epochs):越多越精确,推荐 3000
- 学习率 (LR):推荐 1e-3 ~ 5e-3
- 隐藏层宽度:推荐 64(平衡精度与速度)
阶段一:发动机控制器设计
PID 控制参数:
- Kp(比例增益):增大可加快响应,但过大导致振荡
- Ki(积分增益):消除稳态误差,过大导致超调
- Kd(微分增益):抑制振荡,改善动态特性
MPC 控制参数:
- 预测时域 (Horizon):前看步数,越长越激进
- 功率跟踪权重 W_power:越高则功率跟踪越紧
- 控制增量权重 W_dcost:越高则控制变化越平缓
- 超调限制:5% 硬约束
阶段二:电机控制器设计
仿真设置:
- 仿真时长:5~60秒可调
- 仿真步长:0.02s / 0.05s / 0.1s
- 目标转速:500~5000 RPM
- 负载转矩:10~400 Nm
负载扰动测试: 在仿真60%时刻自动施加150%负载扰动,检验控制器抗扰能力。
阶段三:能量管理策略设计
SOC 滞环控制参数:
| 参数 | 含义 | 推荐值 |
|---|---|---|
| SOC目标值 | 功率跟随模式下的补偿基准 | 60% |
| SOC下限阈值 | 低于此值进入充电模式 | 30% |
| SOC上限阈值 | 高于此值退出充电模式 | 70% |
功率规则参数:
| 参数 | 含义 | 推荐值 |
|---|---|---|
| 发动机最小功率 | 最低运转功率 | 20 kW |
| 发动机最大功率 | 峰值输出功率 | 300 kW |
| 充电模式功率 | 充电时发动机输出 | 200 kW |
| SOC补偿增益 | SOC偏差修正力度 | 50 kW/ΔSOC |
界面特色
现代化设计
- 渐变色标题:紫色渐变视觉效果
- 卡片式布局:分组清晰,层次分明
- 可滚动知识卡片:长文档不占用过多屏幕空间
- 可折叠章节:按需展开,节省视线
响应式交互
- 实时更新:参数改变即时反映在图表上
- 流式对话:AI 回复逐字显示
- 标签页联动:切换标签自动加载数据
- 平滑动画:按钮悬停、卡片滚动效果
知识可视化
- 嵌入式公式:页面内直接显示 LaTeX 公式
- 表格对比:性能指标、稳定准则表格化
- 颜色编码:稳定/不稳定用绿/红色标识
- 图标辅助:Emoji 增强视觉识别
高级配置
调整图表样式
在 analysis_functions.py 中的 matplotlib 绑图代码里修改:
# 修改图表大小
fig, ax = plt.subplots(figsize=(12, 6))
# 修改颜色主题
ax.plot(x, y, color='#667eea', linewidth=2)
# 修改网格样式
ax.grid(True, alpha=0.3, linestyle='--')
自定义系统提示词
修改 chatbot.py 中的 system_prompt:
system_prompt = """
你是一位精通自动控制原理的专家教授。
请用清晰、准确、专业的中文来回答问题。
重要规则:
1. 当需要表达数学公式时,必须使用 LaTeX 格式
2. 行内公式使用 $公式$ 或 \\(公式\\)
3. 独立公式使用 $$公式$$ 或 \\[公式\\]
"""
自定义工况模板
修改 case_demo_functions.py 中的 _profile_points 函数:
def _profile_points(profile_name):
if profile_name == "我的自定义工况":
return [
(0., 1500., 50.), # (时间, 目标转速, 负载转矩)
(10., 3000., 200.),
(30., 2800., 150.),
(50., 1800., 60.)
]
# ... 其他工况
常见问题
Q1: 运行时提示 "psutil 未安装"
不影响主要功能,仅系统资源监控不可用。忽略此提示或执行:
pip install psutil
Q2: 算例演示提示 "engine_nn_proxy.pth not found"
需要先完成阶段零的 NN 模型训练(约2~5分钟)。
Q3: GPR 训练失败,提示缺少 botorch/gpytorch
GPR 训练需要额外依赖。安装方法:
pip install botorch gpytorch scikit-learn
或直接选择 "load" 模式加载已有模型。
Q4: AI 问答返回 "API_KEY 未配置"
请在 config.py 中填入有效的 DeepSeek API 密钥。
Q5: 图表显示中文乱码
本平台图表使用英文标签以避免中文显示问题。如需修改,编辑 analysis_functions.py 中的 plt.title()、plt.xlabel() 等。
参考资料
经典教材
- 胡寿松.《自动控制原理》(第七版). 科学出版社, 2019.
- Katsuhiko Ogata. Modern Control Engineering (5th Edition). Prentice Hall, 2010.
- Richard C. Dorf, Robert H. Bishop. Modern Control Systems (14th Edition). Pearson, 2021.
- John Doyle, Bruce Francis, Allen Tannenbaum. Feedback Control Theory. Macmillan, 1992.
在线资源
贡献指南
欢迎提交 Issue 和 Pull Request!
贡献方向
- 🐛 修复 Bug
- ✨ 添加新功能(如状态空间分析模块)
- 📝 改进文档
- 🎨 优化界面设计
- 🧪 添加测试用例
开发环境设置
# 克隆仓库
git clone <your-repo-url>
cd AutoControlCourse
# 创建开发分支
git checkout -b feature/your-feature-name
# 安装开发依赖
pip install -r requirements.txt
pip install pytest black flake8
# 代码格式化
black .
# 运行测试
pytest
更新日志
详细更新日志请参阅 CHANGELOG.md。
许可证
本项目采用 MIT 许可证。详见 LICENSE 文件。
致谢
- Gradio:提供优秀的 Web 界面框架
- python-control:强大的控制系统分析库
- DeepSeek:高质量的 AI 服务
- 所有贡献者和使用者
联系方式
- 项目负责人:魏鹏飞
- 电子邮件:pengfeiwei@nwpu.edu.cn
- 机构:西北工业大学
- 项目地址:https://github.com/your-repo
⭐ 如果这个项目对您的学习有帮助,请给它一个 Star!
最后更新:2026年4月7日