说明文档更新
This commit is contained in:
@@ -1,218 +1,516 @@
|
||||
# 🎛️ 自动控制原理AI+数智平台
|
||||
# 自动控制理论AI+数智平台
|
||||
|
||||
> 交互式控制系统分析与设计工具 | 时域·频域·根轨迹·算例演示·AI问答
|
||||
|
||||
一个基于 Gradio 构建的现代化自动控制原理学习平台,集成了系统分析工具、完整混动模型算例演示与 AI 智能问答功能。
|
||||
[](https://www.python.org/)
|
||||
[](https://gradio.app/)
|
||||
[](LICENSE)
|
||||
|
||||
## ✨ 核心功能
|
||||
## 项目简介
|
||||
|
||||
### 📊 1. 时域分析 (Time Domain Analysis)
|
||||
自动控制理论AI+数智平台是一个基于 Gradio 构建的现代化自动控制原理学习平台,集成了系统分析工具、完整混动模型算例演示,和AI智能问答功能。本项目为西北工业大学2025年校级本科生建设项目成果。
|
||||
|
||||
- **阶跃响应分析**:观察系统对单位阶跃输入的响应
|
||||
- **脉冲响应分析**:观察系统对单位脉冲输入的响应
|
||||
- **性能指标计算**:
|
||||
- 上升时间 (Rise Time)
|
||||
- 峰值时间 (Peak Time)
|
||||
- 超调量 (Overshoot)
|
||||
- 调节时间 (Settling Time)
|
||||
- 稳态值 (Steady State Value)
|
||||
平台旨在为自动控制理论课程提供交互式、数智化的学习环境,使学生能够直观理解控制系统的时域响应、频域特性、根轨迹分析等核心概念,并通过完整的混合动力系统算例演示,将理论知识与工程实践相结合。
|
||||
|
||||
**知识要点**:
|
||||
- 二阶系统标准形式
|
||||
- 阻尼比与自然频率参数说明
|
||||
- 时域性能指标公式
|
||||
- 稳态误差分析
|
||||
---
|
||||
|
||||
### 🌊 2. 频域分析 (Frequency Domain Analysis)
|
||||
## 核心功能
|
||||
|
||||
- **Bode 图绘制**:幅频特性和相频特性
|
||||
- **Nyquist 图绘制**:极坐标频率响应
|
||||
- **稳定裕度计算**:
|
||||
- 增益裕度 (Gain Margin, GM)
|
||||
- 相位裕度 (Phase Margin, PM)
|
||||
- 增益交越频率
|
||||
- 相角交越频率
|
||||
- **稳定性评估**:自动判断系统稳定性
|
||||
本平台提供五大核心功能模块,涵盖经典控制理论分析与现代控制系统设计:
|
||||
|
||||
**知识要点**:
|
||||
- 增益裕度与相位裕度定义
|
||||
- 稳定性判断准则
|
||||
- 频域指标与时域性能的关系
|
||||
- Bode 图读数技巧
|
||||
### 1. 时域分析 (Time Domain Analysis)
|
||||
|
||||
### 🎯 3. 根轨迹分析 (Root Locus Analysis)
|
||||
时域分析是研究控制系统在时间域内对输入信号响应特性的方法,是自动控制理论的基础分析方法之一。
|
||||
|
||||
- **根轨迹绘制**:自动绘制完整根轨迹图
|
||||
- **增益调节**:对数滑块精确调节增益 K
|
||||
- **极点跟踪**:实时显示当前增益下的闭环极点位置
|
||||
- **动态视角**:自动调整坐标范围,聚焦关键区域
|
||||
**主要功能:**
|
||||
- **阶跃响应分析**:观察系统对单位阶跃输入的响应,这是控制系统分析中最常用的测试信号
|
||||
- **脉冲响应分析**:观察系统对单位脉冲(δ函数)输入的响应,用于分析系统的固有特性
|
||||
- **性能指标计算**:自动计算并显示系统的关键时域性能指标
|
||||
|
||||
**知识要点**:
|
||||
- 根轨迹法基本原理
|
||||
- 幅值条件与相角条件
|
||||
- 根轨迹的基本性质(起点、终点、渐近线、分离点)
|
||||
- s 平面稳定性区域
|
||||
- 阻尼比等值线
|
||||
**计算的性能指标:**
|
||||
| 指标 | 符号 | 定义 | 物理意义 |
|
||||
|------|------|------|----------|
|
||||
| 上升时间 | $t_r$ | 响应从稳态值的10%上升到90%所需时间 | 反映系统响应速度 |
|
||||
| 峰值时间 | $t_p$ | 响应达到第一个峰值的时间 | 反映系统阻尼特性 |
|
||||
| 超调量 | $\sigma\%$ | 峰值超过稳态值的百分比 | 反映系统振荡程度 |
|
||||
| 调节时间 | $t_s$ | 响应进入并保持在稳态值±2%区间的时间 | 反映系统 settling 速度 |
|
||||
| 稳态值 | $y(\infty)$ | 时间趋于无穷时系统的输出值 | 反映系统最终行为 |
|
||||
|
||||
### 🧪 4. 算例演示 (Case Demo)
|
||||
**二阶系统标准形式:**
|
||||
|
||||
- **完整混动模型**:调用 `Model/src/series_hybrid_sim.py` 进行系统级仿真
|
||||
- **参数化工况**:支持工况模板、仿真时长、步长、SOC、初始发动机功率与缩放系数
|
||||
- **图文结果**:输出三联图(转速响应/功率分配/电气状态)与关键数据表
|
||||
- **教学解读**:自动生成指标摘要(最大转速误差、SOC变化、平均功率与燃油流量)
|
||||
二阶系统是自动控制理论中最重要的系统类型,其标准传递函数为:
|
||||
|
||||
### 🤖 5. AI 智能问答 (Q&A)
|
||||
$$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)随频率变化的关系
|
||||
- **相频特性图**:显示相位(单位:度)随频率变化的关系
|
||||
|
||||
对数频率特性的优点:
|
||||
1. 可以将频率范围压缩,便于观察宽频带内的特性
|
||||
2. 幅值相乘转化为对数相加,简化串联系统计算
|
||||
3. 渐近线近似作图简便实用
|
||||
|
||||
**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)|}$ | $GM > 1.0$(即 $GM_{dB} > 0$) |
|
||||
| 相位裕度 PM | 增益为1(0dB)时,相位还能滞后多少 | $PM = 180° + \angle G(j\omega_c)$ | $PM > 45°$ |
|
||||
|
||||
**稳定性判断准则:**
|
||||
- $GM > 0$ dB 且 $PM > 0°$ → **系统稳定**
|
||||
- $GM < 0$ dB 或 $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,实时观察极点位置变化
|
||||
- **极点跟踪**:显示当前增益下闭环极点的精确位置
|
||||
- **动态坐标**:自动调整坐标系范围,聚焦关键区域
|
||||
|
||||
**根轨迹的基本规则:**
|
||||
|
||||
1. **起点与终点**:
|
||||
- 起点(K=0):开环传递函数的极点($n$ 个)
|
||||
- 终点(K→∞):开环传递函数的零点($m$ 个),剩余 $n-m$ 个趋向无穷
|
||||
|
||||
2. **渐近线**:
|
||||
- 当 $K \to \infty$ 时,根轨迹趋向 $n-m$ 条渐近线
|
||||
- 渐近线与实轴的夹角:$\phi_a = \frac{(2k+1)180°}{n-m}$
|
||||
|
||||
3. **分离点与会合点**:
|
||||
- 根轨迹在实轴上相邻两分支之间的某点分离或会合
|
||||
- 分离点坐标可通过求解 $\frac{dK}{ds} = 0$ 得到
|
||||
|
||||
4. **与虚轴的交点**:
|
||||
- 根轨迹与虚轴的交点对应的增益和频率可通过劳斯判据确定
|
||||
|
||||
**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控制器(模型预测控制):**
|
||||
|
||||
滚动时域优化控制器,核心思想:
|
||||
|
||||
1. **预测模型**:利用系统线性化模型预测未来 H 步状态
|
||||
2. **优化目标**:$\min \sum_{k=1}^{H} [\|w_k - w_{ref}\|^2_{Q} + \|\Delta u_k\|^2_{R}]$
|
||||
3. **约束处理**:执行机构限幅、超调量硬约束
|
||||
|
||||
本平台使用纯 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 回复过程
|
||||
- **流式响应**:实时逐字显示 AI 回复,支持多轮对话
|
||||
- **LaTeX 公式渲染**:完美支持数学公式显示
|
||||
- **上下文记忆**:支持多轮对话
|
||||
- **上下文记忆**:支持多轮连续对话,理解对话上下文
|
||||
|
||||
**支持的 API**:
|
||||
- DeepSeek API
|
||||
**支持的 API:**
|
||||
| API 提供商 | 模型选择 | 特点 |
|
||||
|------------|----------|------|
|
||||
| DeepSeek | deepseek-chat / deepseek-coder | 国内访问,中文优化 |
|
||||
|
||||
## 🚀 快速开始
|
||||
**提问技巧:**
|
||||
|
||||
### 环境要求
|
||||
✅ **推荐的问题类型:**
|
||||
- 概念解释:"请解释传递函数的定义和物理意义"
|
||||
- 公式推导:"如何推导二阶系统的超调量公式?"
|
||||
- 例题讲解:"如何用劳斯判据判断这个系统的稳定性?"
|
||||
- 参数分析:"PID控制器中三个参数分别如何影响系统响应?"
|
||||
|
||||
- Python 3.10+
|
||||
- pip 包管理器
|
||||
❌ **应避免的问题:**
|
||||
- 过于宽泛:"帮我做作业"(建议具体描述问题)
|
||||
- 缺乏上下文:"这个对吗?"(请提供具体系统参数)
|
||||
|
||||
### 安装步骤
|
||||
---
|
||||
|
||||
1. **克隆项目**
|
||||
## 系统要求
|
||||
|
||||
### 运行环境
|
||||
|
||||
| 项目 | 要求 |
|
||||
|------|------|
|
||||
| Python 版本 | 3.10+ |
|
||||
| 操作系统 | Windows / Linux / macOS |
|
||||
| 内存 | 建议 8GB 以上 |
|
||||
| 显卡 | 可选(用于 GPR 训练加速,CPU 模式也可运行) |
|
||||
|
||||
### 浏览器要求
|
||||
|
||||
推荐使用以下浏览器的最新版本以获得最佳体验:
|
||||
- Google Chrome 90+
|
||||
- Microsoft Edge 90+
|
||||
- Mozilla Firefox 88+
|
||||
- Apple Safari 14+
|
||||
|
||||
---
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 方式一:使用 pip 安装(推荐)
|
||||
|
||||
**1. 克隆项目**
|
||||
|
||||
```bash
|
||||
git clone <your-repo-url>
|
||||
cd AutoControl
|
||||
cd AutoControlCourse
|
||||
```
|
||||
|
||||
2. **安装依赖**
|
||||
**2. 创建虚拟环境(推荐)**
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
# 使用 venv
|
||||
python -m venv my_gradio_env
|
||||
source my_gradio_env/bin/activate # Linux/macOS
|
||||
# 或
|
||||
my_gradio_env\Scripts\activate # Windows
|
||||
|
||||
或使用 conda:
|
||||
|
||||
```bash
|
||||
# 或使用 conda
|
||||
conda create -n autocontrol python=3.10
|
||||
conda activate autocontrol
|
||||
```
|
||||
|
||||
**3. 安装依赖**
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
3. **配置 API 密钥**
|
||||
**4. 配置 API 密钥**
|
||||
|
||||
编辑 `config.py` 文件中的配置区域:
|
||||
编辑 `config.py` 文件中的 API 配置区域:
|
||||
|
||||
```python
|
||||
# ==================== API 配置 ====================
|
||||
API_KEY = "your-api-key-here" # 填入您的 DeepSeek API 密钥
|
||||
API_BASE_URL = "https://api.deepseek.com/v1"
|
||||
API_MODEL = "deepseek-chat"
|
||||
API_TYPE = "deepseek" # 或 "gemini"
|
||||
API_TYPE = "deepseek"
|
||||
# ==================================================
|
||||
```
|
||||
|
||||
**获取 DeepSeek API 密钥**:
|
||||
- 访问 https://platform.deepseek.com/api_keys
|
||||
- 注册并创建 API 密钥
|
||||
- 复制密钥到配置文件
|
||||
**获取 DeepSeek API 密钥:**
|
||||
1. 访问 https://platform.deepseek.com/api_keys
|
||||
2. 注册并登录账号
|
||||
3. 点击"创建新密钥"
|
||||
4. 复制生成的密钥并填入配置
|
||||
|
||||
4. **运行应用**
|
||||
**5. 运行应用**
|
||||
|
||||
```bash
|
||||
python app.py
|
||||
```
|
||||
|
||||
或使用 conda 环境:
|
||||
**6. 访问应用**
|
||||
|
||||
```bash
|
||||
conda run -n autocontrol python app.py
|
||||
```
|
||||
|
||||
5. **访问应用**
|
||||
|
||||
浏览器自动打开,或手动访问:
|
||||
浏览器将自动打开,或手动访问:
|
||||
```
|
||||
http://localhost:7860
|
||||
```
|
||||
|
||||
## 📖 使用指南
|
||||
### 方式二:使用 Docker(可选)
|
||||
|
||||
### 输入系统传递函数
|
||||
```bash
|
||||
# 构建镜像
|
||||
docker build -t autocontrol-course .
|
||||
|
||||
在任意标签页的输入框中输入传递函数的分子和分母系数:
|
||||
|
||||
**示例 1:一阶系统**
|
||||
```
|
||||
分子: 1
|
||||
分母: 1,1
|
||||
传递函数: G(s) = 1/(s+1)
|
||||
# 运行容器
|
||||
docker run -p 7860:7860 \
|
||||
-e API_KEY="your-api-key" \
|
||||
autocontrol-course
|
||||
```
|
||||
|
||||
**示例 2:二阶系统**
|
||||
---
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
分子: 4
|
||||
分母: 1,2,4
|
||||
传递函数: G(s) = 4/(s²+2s+4)
|
||||
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内容
|
||||
```
|
||||
|
||||
**示例 3:三阶系统**
|
||||
```
|
||||
分子: 1
|
||||
分母: 1,6,11,6
|
||||
传递函数: G(s) = 1/(s³+6s²+11s+6)
|
||||
---
|
||||
|
||||
## 技术栈
|
||||
|
||||
### 前端框架
|
||||
- **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 模型训练/加载:**
|
||||
|
||||
高斯过程回归是一种非参数概率模型,适合小样本、高维插值。
|
||||
|
||||
```python
|
||||
# 运行模式
|
||||
mode = "load" # 加载已有模型(推荐)
|
||||
mode = "train" # 从头训练(需要 botorch/gpytorch)
|
||||
```
|
||||
|
||||
**输入格式**:
|
||||
- 系数从最高次项到常数项
|
||||
- 用逗号分隔(支持中文或英文逗号)
|
||||
- 支持小数和负数
|
||||
- 例如:`1, 2.5, -3, 4` 表示 s³ + 2.5s² - 3s + 4
|
||||
**NN 模型训练(知识蒸馏):**
|
||||
|
||||
### 调节系统增益
|
||||
将 GPR 模型的知识蒸馏到轻量级 MLP 中,用于实时控制仿真。
|
||||
|
||||
频域分析和根轨迹分析都支持增益调节:
|
||||
关键参数:
|
||||
- **训练轮数 (Epochs)**:越多越精确,推荐 3000
|
||||
- **学习率 (LR)**:推荐 1e-3 ~ 5e-3
|
||||
- **隐藏层宽度**:推荐 64(平衡精度与速度)
|
||||
|
||||
- **对数滑块**:log₁₀(K) 范围 -1 到 3
|
||||
- -1 对应 K = 0.1
|
||||
- 0 对应 K = 1
|
||||
- 1 对应 K = 10
|
||||
- 2 对应 K = 100
|
||||
- 3 对应 K = 1000
|
||||
### 阶段一:发动机控制器设计
|
||||
|
||||
- **实时显示**:下方数字框显示实际增益值
|
||||
- **松开更新**:滑块松开后才更新图表,避免卡顿
|
||||
**PID 控制参数:**
|
||||
- **Kp(比例增益)**:增大可加快响应,但过大导致振荡
|
||||
- **Ki(积分增益)**:消除稳态误差,过大导致超调
|
||||
- **Kd(微分增益)**:抑制振荡,改善动态特性
|
||||
|
||||
### AI 问答技巧
|
||||
**MPC 控制参数:**
|
||||
- **预测时域 (Horizon)**:前看步数,越长越激进
|
||||
- **功率跟踪权重 W_power**:越高则功率跟踪越紧
|
||||
- **控制增量权重 W_dcost**:越高则控制变化越平缓
|
||||
- **超调限制**:5% 硬约束
|
||||
|
||||
**高效提问方式**:
|
||||
### 阶段二:电机控制器设计
|
||||
|
||||
✅ **好的问题**:
|
||||
- "请解释 PID 控制器的三个参数如何影响系统性能?"
|
||||
- "如何根据 Bode 图判断系统的稳定裕度?"
|
||||
- "为什么阻尼比为 0.707 时系统响应最佳?"
|
||||
- "推导二阶系统的超调量公式"
|
||||
**仿真设置:**
|
||||
- 仿真时长:5~60秒可调
|
||||
- 仿真步长:0.02s / 0.05s / 0.1s
|
||||
- 目标转速:500~5000 RPM
|
||||
- 负载转矩:10~400 Nm
|
||||
|
||||
❌ **避免的问题**:
|
||||
- "帮我做作业"(太模糊)
|
||||
- "这个对吗?"(缺少上下文)
|
||||
- "答案是什么?"(没有提供问题描述)
|
||||
**负载扰动测试:**
|
||||
在仿真60%时刻自动施加150%负载扰动,检验控制器抗扰能力。
|
||||
|
||||
**公式显示**:
|
||||
AI 回复中的数学公式会自动渲染,支持以下格式:
|
||||
- 行内公式:`$公式$` 或 `\(公式\)`
|
||||
- 块级公式:`$$公式$$` 或 `\[公式\]`
|
||||
### 阶段三:能量管理策略设计
|
||||
|
||||
## 🎨 界面特色
|
||||
**SOC 滞环控制参数:**
|
||||
|
||||
| 参数 | 含义 | 推荐值 |
|
||||
|------|------|--------|
|
||||
| SOC目标值 | 功率跟随模式下的补偿基准 | 60% |
|
||||
| SOC下限阈值 | 低于此值进入充电模式 | 30% |
|
||||
| SOC上限阈值 | 高于此值退出充电模式 | 70% |
|
||||
|
||||
**功率规则参数:**
|
||||
|
||||
| 参数 | 含义 | 推荐值 |
|
||||
|------|------|--------|
|
||||
| 发动机最小功率 | 最低运转功率 | 20 kW |
|
||||
| 发动机最大功率 | 峰值输出功率 | 300 kW |
|
||||
| 充电模式功率 | 充电时发动机输出 | 200 kW |
|
||||
| SOC补偿增益 | SOC偏差修正力度 | 50 kW/ΔSOC |
|
||||
|
||||
---
|
||||
|
||||
## 界面特色
|
||||
|
||||
### 现代化设计
|
||||
|
||||
- **渐变色标题**:紫色渐变视觉效果
|
||||
- **卡片式布局**:分组清晰,层次分明
|
||||
- **可滚动知识卡片**:长文档不占据过多空间
|
||||
- **可折叠章节**:按需展开知识点
|
||||
- **可滚动知识卡片**:长文档不占用过多屏幕空间
|
||||
- **可折叠章节**:按需展开,节省视线
|
||||
|
||||
### 响应式交互
|
||||
|
||||
@@ -226,64 +524,15 @@ AI 回复中的数学公式会自动渲染,支持以下格式:
|
||||
- **嵌入式公式**:页面内直接显示 LaTeX 公式
|
||||
- **表格对比**:性能指标、稳定准则表格化
|
||||
- **颜色编码**:稳定/不稳定用绿/红色标识
|
||||
- **图标辅助**:emoji 增强视觉识别
|
||||
- **图标辅助**:Emoji 增强视觉识别
|
||||
|
||||
## 🛠️ 技术栈
|
||||
---
|
||||
|
||||
### 前端框架
|
||||
- **Gradio 4.x**:快速构建机器学习 Web 界面
|
||||
- **Custom CSS**:现代化样式定制
|
||||
|
||||
### 计算库
|
||||
- **NumPy**:数值计算
|
||||
- **python-control**:控制系统分析
|
||||
- **Matplotlib**:图表绘制
|
||||
|
||||
### AI 集成
|
||||
- **aiohttp**:异步 HTTP 请求
|
||||
- **DeepSeek API**:智能问答后端
|
||||
- **流式响应**:提升用户体验
|
||||
|
||||
## 📁 项目结构
|
||||
|
||||
```text
|
||||
AutoControlCourse/
|
||||
├── app.py # Gradio 入口与事件绑定
|
||||
├── ui_components.py # 各标签页 UI 组件
|
||||
├── analysis_functions.py # 时域/频域/根轨迹计算
|
||||
├── case_demo_functions.py # 算例演示模块(调用 Model)
|
||||
├── chatbot.py # AI 问答
|
||||
├── user_stats.py # 在线人数统计
|
||||
├── config.py # API 与运行配置
|
||||
├── Model/
|
||||
│ ├── src/ # 混动模型核心代码
|
||||
│ └── data/ # 运行所需模型权重与数据
|
||||
└── requirements.txt # 依赖列表
|
||||
```
|
||||
|
||||
## 🔧 高级配置
|
||||
|
||||
### 算例演示说明
|
||||
|
||||
- 仿真时长是模型时间,不等于程序实际等待时间
|
||||
- 电池功率符号定义:正值放电,负值充电
|
||||
- 若参数超限,程序会在安全范围内自动裁剪
|
||||
|
||||
### 自定义系统提示词
|
||||
|
||||
修改 `chat_with_ai` 函数中的 `system_prompt`:
|
||||
|
||||
```python
|
||||
system_prompt = """
|
||||
你是一位[角色定义]。
|
||||
请用[语言风格]来回答有关[领域]的问题。
|
||||
[其他要求...]
|
||||
"""
|
||||
```
|
||||
## 高级配置
|
||||
|
||||
### 调整图表样式
|
||||
|
||||
在 `matplotlib` 绘图代码中修改:
|
||||
在 `analysis_functions.py` 中的 matplotlib 绑图代码里修改:
|
||||
|
||||
```python
|
||||
# 修改图表大小
|
||||
@@ -296,48 +545,156 @@ ax.plot(x, y, color='#667eea', linewidth=2)
|
||||
ax.grid(True, alpha=0.3, linestyle='--')
|
||||
```
|
||||
|
||||
## 📚 参考资料
|
||||
### 自定义系统提示词
|
||||
|
||||
修改 `chatbot.py` 中的 `system_prompt`:
|
||||
|
||||
```python
|
||||
system_prompt = """
|
||||
你是一位精通自动控制原理的专家教授。
|
||||
请用清晰、准确、专业的中文来回答问题。
|
||||
重要规则:
|
||||
1. 当需要表达数学公式时,必须使用 LaTeX 格式
|
||||
2. 行内公式使用 $公式$ 或 \\(公式\\)
|
||||
3. 独立公式使用 $$公式$$ 或 \\[公式\\]
|
||||
"""
|
||||
```
|
||||
|
||||
### 自定义工况模板
|
||||
|
||||
修改 `case_demo_functions.py` 中的 `_profile_points` 函数:
|
||||
|
||||
```python
|
||||
def _profile_points(profile_name):
|
||||
if profile_name == "我的自定义工况":
|
||||
return [
|
||||
(0., 1500., 50.), # (时间, 目标转速, 负载转矩)
|
||||
(10., 3000., 200.),
|
||||
(30., 2800., 150.),
|
||||
(50., 1800., 60.)
|
||||
]
|
||||
# ... 其他工况
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 运行时提示 "psutil 未安装"
|
||||
|
||||
不影响主要功能,仅系统资源监控不可用。忽略此提示或执行:
|
||||
|
||||
```bash
|
||||
pip install psutil
|
||||
```
|
||||
|
||||
### Q2: 算例演示提示 "engine_nn_proxy.pth not found"
|
||||
|
||||
需要先完成**阶段零**的 NN 模型训练(约2~5分钟)。
|
||||
|
||||
### Q3: GPR 训练失败,提示缺少 botorch/gpytorch
|
||||
|
||||
GPR 训练需要额外依赖。安装方法:
|
||||
|
||||
```bash
|
||||
pip install botorch gpytorch scikit-learn
|
||||
```
|
||||
|
||||
或直接选择 "load" 模式加载已有模型。
|
||||
|
||||
### Q4: AI 问答返回 "API_KEY 未配置"
|
||||
|
||||
请在 `config.py` 中填入有效的 DeepSeek API 密钥。
|
||||
|
||||
### Q5: 图表显示中文乱码
|
||||
|
||||
本平台图表使用英文标签以避免中文显示问题。如需修改,编辑 `analysis_functions.py` 中的 `plt.title()`、`plt.xlabel()` 等。
|
||||
|
||||
---
|
||||
|
||||
## 参考资料
|
||||
|
||||
### 经典教材
|
||||
- 《自动控制原理》- 胡寿松
|
||||
- 《现代控制工程》- Katsuhiko Ogata
|
||||
- 《反馈控制理论》- John Doyle
|
||||
|
||||
1. 胡寿松.《自动控制原理》(第七版). 科学出版社, 2019.
|
||||
2. Katsuhiko Ogata. *Modern Control Engineering* (5th Edition). Prentice Hall, 2010.
|
||||
3. Richard C. Dorf, Robert H. Bishop. *Modern Control Systems* (14th Edition). Pearson, 2021.
|
||||
4. John Doyle, Bruce Francis, Allen Tannenbaum. *Feedback Control Theory*. Macmillan, 1992.
|
||||
|
||||
### 在线资源
|
||||
|
||||
- [python-control 官方文档](https://python-control.readthedocs.io/)
|
||||
- [DeepSeek API 文档](https://platform.deepseek.com/docs)
|
||||
- [Gradio 官方文档](https://www.gradio.app/docs)
|
||||
- [Gradio 官方文档](https://gradio.app/docs)
|
||||
- [PyTorch 文档](https://pytorch.org/docs/)
|
||||
|
||||
## 🤝 贡献指南
|
||||
---
|
||||
|
||||
## 贡献指南
|
||||
|
||||
欢迎提交 Issue 和 Pull Request!
|
||||
|
||||
### 贡献方向
|
||||
|
||||
- 🐛 修复 Bug
|
||||
- ✨ 添加新功能(如状态空间分析)
|
||||
- ✨ 添加新功能(如状态空间分析模块)
|
||||
- 📝 改进文档
|
||||
- 🎨 优化界面设计
|
||||
- 🧪 添加测试用例
|
||||
|
||||
## 📄 许可证
|
||||
### 开发环境设置
|
||||
|
||||
```bash
|
||||
# 克隆仓库
|
||||
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](CHANGELOG.md)。
|
||||
|
||||
---
|
||||
|
||||
## 许可证
|
||||
|
||||
本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。
|
||||
|
||||
## 🙏 致谢
|
||||
---
|
||||
|
||||
## 致谢
|
||||
|
||||
- **Gradio**:提供优秀的 Web 界面框架
|
||||
- **python-control**:强大的控制系统分析库
|
||||
- **DeepSeek**:高质量的 AI 服务
|
||||
- 所有贡献者和使用者
|
||||
|
||||
## 📞 联系方式
|
||||
---
|
||||
|
||||
- 项目地址:[GitHub Repository URL]
|
||||
- 问题反馈:[Issues URL]
|
||||
- 邮箱:[your-email@example.com]
|
||||
## 联系方式
|
||||
|
||||
- **项目负责人**:魏鹏飞
|
||||
- **电子邮件**:pengfeiwei@nwpu.edu.cn
|
||||
- **机构**:西北工业大学
|
||||
- **项目地址**:https://github.com/your-repo
|
||||
|
||||
---
|
||||
|
||||
**⭐ 如果这个项目对您有帮助,请给它一个 Star!**
|
||||
**⭐ 如果这个项目对您的学习有帮助,请给它一个 Star!**
|
||||
|
||||
最后更新:2026年4月7日
|
||||
|
||||
Reference in New Issue
Block a user