尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于Koopman算子与EDMD的四旋翼无人机数据驱动建模与控制

基于Koopman算子与EDMD的四旋翼无人机数据驱动建模与控制 简介本资源是一套面向计算机科学、电子工程及数学等相关专业学生的四旋翼无人机数据驱动控制教学与实践方案聚焦Koopman算子理论与扩展动态模式分解EDMD在非线性系统线性化建模中的应用解决传统控制方法难以处理强非线性飞行动力学的问题适用于课程设计、综合实验及毕业课题等中高级实践场景。压缩包共90个文件含41个核心Matlab函数如main.m、edmd/get_EDMD.m、mpc/sim_MPC.m、11幅结果可视化图png/fig格式涵盖特征值分布、MPC跟踪轨迹与状态响应、3个实验数据集mat格式及完整工具函数库vee_map、hat_map、RMSE评估等整体大小为49.66MB。已有110人学习下载资源采用模块化代码架构参数高度可调注释详尽并附带多版本兼容说明支持Matlab 2014–2024a、PID基准对比脚本与三维仿真接口便于读者复现EDMD建模、MPC控制器设计及闭环性能评估全流程。1. 项目概述当传统模型遇上数据驱动的升维魔法如果你玩过四旋翼无人机或者研究过它的控制大概率会对那套基于牛顿-欧拉方程推导出来的非线性动力学模型又爱又恨。爱的是它物理意义清晰为我们理解无人机如何飞行奠定了坚实的理论基础恨的是这套模型非线性强、耦合度高尤其是在进行快速机动或应对强扰动时基于线性化模型设计的控制器比如经典的PID常常显得力不从心需要工程师投入大量精力进行参数整定和增益调度。有没有一种方法能让我们跳出繁琐的模型线性化直接从飞行数据中“学习”出一个更适合控制的模型呢这就是“数据驱动控制”的核心魅力而Koopman算子理论配合EDMD算法为我们提供了一条极具潜力的技术路径。简单来说这个项目要做的事情就是利用Koopman算子理论将四旋翼无人机原本复杂的非线性动力学在一个可能是无限维的线性空间中重新进行描述。EDMD算法则是从实际采集的无人机状态数据中估算出这个线性空间即Koopman子空间及其上线性演化的工具。最终我们基于这个数据驱动得到的线性模型来设计控制器如线性二次型调节器LQR并在Matlab/Simulink环境中进行仿真验证。它特别适合那些对先进控制理论感兴趣希望将理论应用于实际机器人系统但又苦于复杂系统建模的研究者、工程师和高年级学生。通过这个方案你不仅能掌握一套前沿的数据驱动建模方法还能获得一套可直接运行、修改和拓展的Matlab代码框架为你的无人机或其它非线性系统控制研究提供一个高起点的工具箱。2. 核心思路从非线性“弯道”到线性“高速路”要理解Koopman算子与EDMD我们可以先忘掉那些复杂的数学定义用一个更形象的比喻来思考。想象一下你正在一条蜿蜒崎岖的山路上开车这就是非线性系统。作为司机你需要不断转动方向盘来应对每一个弯道控制非常复杂。现在假设有一位“魔法师”Koopman算子他能将这条三维的崎岖山路投影到一个更高维度的空间中。在这个新空间里那条扭曲的山路变成了一条笔直向前的无限延伸的高速公路线性系统。更重要的是这位魔法师的魔法是普适的——只要你的车还在遵循物理规律行驶他就能完成这个变换。2.1 Koopman算子的直观理解Koopman算子的核心思想在于它不再盯着系统状态本身比如无人机的位置、姿态角这个“观测视角”太狭窄了。它转而观察一系列关于系统状态的“观测函数”。这些观测函数可以是状态本身也可以是状态的任何非线性函数组合比如位置平方、姿态角的正弦值、甚至更复杂的多项式。Koopman算子的美妙之处在于在这个由观测函数张成的可能是无限维的函数空间中系统的动力学演化是线性的。这就好比无论山路多弯在“魔法师”构建的包含位置、速度、加速度、曲率等多种信息的高维视角下车辆的“运动趋势”总是沿着一个线性方向前进。对于我们的四旋翼无人机其状态通常包括位置(x, y, z)、速度(vx, vy, vz)、姿态角滚转φ、俯仰θ、偏航ψ及角速度(p, q, r)。这是一个典型的非线性系统。Koopman理论告诉我们存在一组可能是无限个观测函数g(x)使得系统的演化满足(U g)(x_k) g(F(x_k)) g(x_{k1})其中U就是Koopman算子一个线性算子F是原系统的非线性演化。我们的目标就是找到这个U在一个有限维子空间上的近似表示。2.2 EDMD从数据中“学习”线性模型既然Koopman算子所在的理想空间可能是无限维的工程上无法直接处理。扩展动态模式分解算法就是来解决这个问题的。它的核心思路是选择字典函数我们人为地选择一组有限的、非线性基函数如多项式、径向基函数、神经网络等作为我们观测函数的近似基底。这相当于我们决定了要在哪个有限的“高维视角”下去观察系统。数据驱动拟合利用从系统采集到的时间序列数据{x_1, x_2, ..., x_m}EDMD通过最小二乘回归直接拟合出在这些基函数张成的子空间上最能描述系统一步前向预测的线性矩阵。这个矩阵就是Koopman算子在所选有限维子空间上的近似。整个过程完全由数据驱动无需知道系统精确的F(x)。对于无人机我们只需要让它飞起来或在仿真中运行记录下状态随时间变化的数据然后喂给EDMD算法它就能吐出一个线性模型。这个模型描述了在我们选定的“观测视角”下系统状态是如何线性演进的。2.3 为何选择此路径优势与考量相比于传统的基于物理模型线性化的方法这条技术路径有几个显著优势全局线性化潜力传统方法通常在某个平衡点如悬停状态附近进行线性化得到的线性模型只在平衡点邻域有效。Koopman方法通过引入非线性观测函数有可能在更大的状态范围内捕获系统的非线性特性从而获得一个“全局性”更好的线性近似模型。免模型特性控制器设计完全基于数据驱动的线性模型降低了对精确物理参数的依赖对于模型不确定性强或难以精确建模的系统如存在复杂气动效应、负载变化尤其有吸引力。与控制理论无缝衔接得到线性模型后成熟且强大的线性控制系统设计工具如LQR、LQG、MPC就可以直接应用简化了控制器设计流程。当然硬币都有两面。这种方法的关键挑战和考量在于字典函数的选择字典函数的选择更像一门艺术直接影响线性近似的精度和模型维度。选得太简单如只包含原始状态可能无法有效捕捉非线性选得太复杂如高阶多项式会导致维度爆炸“维数灾难”和过拟合。数据质量与数量模型的优劣直接依赖于训练数据的质量。数据需要覆盖期望的操作范围并且要包含足够的激励以激发系统的动态特性。计算复杂度EDMD需要求解一个可能规模较大的最小二乘问题在线计算或模型更新时需考虑实时性。注意Koopman EDMD方法得到的模型是“线性”的但这是在高维观测空间中的线性。当我们把这个线性控制律映射回原始状态空间时它实际上对应着原始非线性系统的一个非线性控制器。这是理解其效力的关键。3. 四旋翼无人机动力学与数据准备在启动EDMD算法之前我们必须明确我们的对象——四旋翼无人机——以及如何为它准备“学习资料”数据。3.1 四旋翼无人机状态空间定义我们采用一种广泛使用的模型。定义系统状态向量x为12维x [x, y, z, vx, vy, vz, φ, θ, ψ, p, q, r]^T其中(x, y, z)在地面惯性坐标系下的位置。(vx, vy, vz)在地面惯性坐标系下的线速度。(φ, θ, ψ)机身坐标系相对于地面坐标系的滚转、俯仰、偏航角通常采用Z-Y-X欧拉角。(p, q, r)在机身坐标系下的滚转、俯仰、偏航角速度。控制输入u通常为4维与四个电机的转速平方成正比u [U1, U2, U3, U4]^T其中U1为总升力U2, U3, U4分别对应产生滚转、俯仰、偏航力矩的输入量。其非线性动力学方程非常经典这里不赘述细节但要知道它包含了重力、陀螺效应、力矩方程等强非线性项。我们的EDMD将完全绕过对这些方程的显式依赖。3.2 仿真数据生成策略由于在真实无人机上大量采集涵盖各种动态的数据存在风险和成本我们通常先在高保真仿真环境中生成训练数据。在Matlab/Simulink中我们可以利用如Simscape Multibody或基于微分方程搭建的模型进行开环或闭环仿真。数据采集的关键在于激励信号的设计。为了让EDMD学习到丰富的动态特性我们需要让无人机在状态空间中进行充分的“探索”。常用的激励信号包括扫频正弦信号对不同的控制通道注入不同频率的正弦信号以激发不同频段的动态。幅值变化的阶跃信号用于激发非线性响应。随机信号如高斯白噪声或伪随机二进制序列能宽频带激励系统。特定机动轨迹如“8”字飞行、快速爬升、滚转机动等针对性地覆盖特定操作区域。3.3 数据预处理与格式采集到的原始数据需要处理成EDMD算法要求的格式。假设我们以固定采样周期Ts采集了m个时间点的数据。数据矩阵X将每个时刻的状态向量x_k作为一列组成矩阵X [x_1, x_2, ..., x_m]维度为(n, m)其中n12是状态维度。数据矩阵YY [x_2, x_3, ..., x_{m1}]即X中每个状态的后继状态。Y的维度也是(n, m)实际上我们只有m-1对数据这里为表述方便假设X和Y的列已正确对齐。输入数据U可选但推荐如果同时记录了控制输入则U [u_1, u_2, ..., u_m]。在控制仿真的背景下包含输入数据对于学习控制依赖关系至关重要。实操心得仿真时建议加入适度的过程噪声和观测噪声以使生成的模型更具鲁棒性。数据量m通常需要远大于预期观测空间的维度以确保最小二乘问题的良好条件数。一个实用的起点是采集数万到数十万组数据点。4. EDMD算法实现与Koopman模型辨识有了数据我们就可以在Matlab中实现EDMD算法从数据中“提炼”出Koopman线性模型。这是整个项目的核心计算环节。4.1 字典函数的选择与构建字典函数Ψ(x)的选择是EDMD成功与否的首要因素。对于四旋翼无人机一个常用且有效的起点是多项式字典。我们可以从状态向量的单项式、交叉项中选取。例如我们可以选择包含所有状态分量、它们的平方项以及两两之间的乘积项直到二阶。对于一个12维状态x其二阶多项式字典的维度会迅速增长到12 12 C(12,2) 12 12 66 90维如果包含常数项和所有一、二阶项。这已经是一个相当大的维度。在Matlab中我们可以编写一个函数来构建字典function Psi_X build_poly_dict(X, order) % X: n x m 数据矩阵 % order: 多项式阶数例如 2 [n, m] size(X); Psi_X []; for i 1:m x X(:, i); psi []; % 常数项可选对于增量模型可能不需要 % psi [1]; % 一阶项 psi [psi; x]; if order 2 % 二阶项包括平方项和交叉项 for j 1:n for k j:n % 从j开始避免重复如 x1*x2 和 x2*x1 psi [psi; x(j)*x(k)]; end end end % 可以继续扩展更高阶... Psi_X [Psi_X, psi]; end end对于包含控制输入的情况字典函数需要扩展为Ψ(x, u)同时包含状态和输入的基函数。4.2 EDMD核心算法步骤假设我们已构建好字典函数并得到了提升后的数据矩阵Psi_X [Ψ(x_1), Ψ(x_2), ..., Ψ(x_m)]维度为(N, m)其中N是字典维度。Psi_Y [Ψ(x_2), Ψ(x_3), ..., Ψ(x_{m1})]维度同样为(N, m)。EDMD的目标是找到一个矩阵K即Koopman算子的有限维近似使得Psi_Y ≈ K * Psi_X。这通过求解一个最小二乘问题实现K Psi_Y * pinv(Psi_X)在Matlab中更数值稳定的方式是使用斜杠运算符或lscov函数% 方法1使用斜杠运算符推荐MATLAB会自动处理 K Psi_Y / Psi_X; % 求解 K * Psi_X Psi_Y 的最小二乘解 % 方法2显式使用伪逆 % K Psi_Y * pinv(Psi_X); % 方法3考虑正则化以应对病态问题当数据不足或字典维度太高时 % lambda 1e-6; % 正则化系数 % K Psi_Y * Psi_X / (Psi_X * Psi_X lambda * eye(N));得到的K矩阵是一个N x N的矩阵它描述了在提升的观测函数空间中系统状态的线性演化Ψ(x_{k1}) ≈ K * Ψ(x_k)。4.3 提取状态空间模型然而控制器设计通常需要基于原始状态x或其增量的线性模型。由于我们的字典Ψ(x)中包含了原始状态x通常作为前n个分量我们可以从庞大的K矩阵中提取出与原始状态相关的部分。定义选择矩阵C使得x C * Ψ(x)。通常如果字典的前n个元素就是原始状态x那么C [eye(n), zeros(n, N-n)]。那么对于原始状态的预测可以写为x_{k1} ≈ C * Ψ(x_{k1}) ≈ C * K * Ψ(x_k)但这仍然依赖于整个高维的Ψ(x_k)。为了得到一个标准的线性状态空间模型我们需要进行近似。一种常见且实用的方法是采用线性近似即假设状态演化主要与原始状态线性相关忽略高次项对线性部分的影响。我们可以通过计算K矩阵左上角n x n的子块来获得一个近似的状态矩阵A_koop。更严谨的一种方法是利用EDMD的结果来辨识一个包含控制输入的线性模型。如果我们使用了包含输入的字典Ψ(x, u)并且将u也作为字典的一部分例如Ψ(x, u) [x; u; 其他非线性项]那么我们可以从K矩阵中提取出状态矩阵A和输入矩阵B。假设字典排列为Ψ(x, u) [x; u; φ(x,u)]其中φ是纯非线性部分。那么K矩阵可以分块为K [A, B, K_phi; ... ]其中A是n x n矩阵B是n x nu矩阵nu是输入维度。这样我们就得到了一个数据驱动的线性近似模型x_{k1} ≈ A * x_k B * u_k这个A和B矩阵就是EDMD为我们从数据中学习到的、用于控制器设计的核心模型。注意事项从高维K矩阵中提取A和B时必须严格对应字典的排列顺序。提取的A, B矩阵可能并不精确满足x_{k1} A x_k B u_k因为EDMD的最小二乘拟合是在整个提升空间上进行的。但这个近似模型对于控制器设计通常是有效的其精度需要通过仿真来验证。5. 基于Koopman模型的控制器设计与Matlab仿真获得线性模型(A, B)后我们就进入熟悉的领域——线性控制器设计。这里我们以经典的离散时间线性二次型调节器为例进行设计并在Simulink中构建闭环仿真进行验证。5.1 离散时间LQR设计假设我们通过EDMD得到了离散时间状态空间模型x_{k1} A * x_k B * u_k我们的目标是设计一个控制律u_k -K_lqr * x_k使得如下代价函数最小化J Σ (x_k^T Q x_k u_k^T R u_k)求和从 k0 到无穷。在Matlab中使用dlqr函数可以方便地求解% 假设已获得 A, B 矩阵 % 定义权重矩阵 Q 和 R Q diag([10, 10, 20, ...]); % 位置误差权重可以设大一些姿态角权重次之角速度权重较小 R diag([0.1, 0.1, 0.1, 0.1]); % 控制输入权重防止控制量过大 % 计算LQR增益矩阵 K_lqr [K_lqr, S, e] dlqr(A, B, Q, R); % K_lqr 即为所求的状态反馈增益矩阵 % S 是Riccati方程的解e是闭环系统极点权重矩阵Q和R的选择需要根据性能需求进行调节。基本原则是对希望快速收敛或误差小的状态赋予较大的Q权重对希望限制幅值或能耗的控制输入赋予较大的R权重。通常需要经过多次仿真调试。5.2 Simulink仿真环境搭建为了验证数据驱动模型和控制器的有效性我们需要建立一个闭环仿真环境。一个典型的Simulink模型结构包含以下几个部分“真实”无人机模型使用基于非线性动力学方程搭建的详细模型作为被控对象的“真实”仿真。这可以是Simulink Function模块、S-Function或基于普通模块搭建的方程。Koopman-LQR控制器一个MATLAB Function模块或Embedded MATLAB Function模块其内部实现控制律u -K_lqr * x。输入为从“真实”模型反馈回来的状态x输出为控制量u。参考指令生成用于产生期望的轨迹或设定点例如阶跃信号、正弦信号或更复杂的轨迹。状态观测器可选如果状态不可直接测量需要设计观测器如卡尔曼滤波器。在本项目中为简化起见我们通常假设全状态反馈。数据记录与性能评估使用Scope和To Workspace模块记录位置、姿态、控制输入等信号用于后续绘制曲线和计算性能指标如超调量、调节时间、稳态误差。5.3 仿真对比实验设计为了体现Koopman数据驱动方法的优势一个有力的验证是与基于传统线性化模型设计的控制器进行对比。对比对象在相同的平衡点通常是悬停状态对非线性模型进行雅可比线性化得到线性模型(A_lin, B_lin)。基于此模型使用相同的LQR设计方法相同的Q, R权重计算增益矩阵K_lin。实验场景悬停镇定让无人机从一个小偏移状态如位置或姿态角偏移回归到原点。比较两种控制器的收敛速度、超调量和控制能量。轨迹跟踪让无人机跟踪一个简单的轨迹如垂直爬升或水平圆周运动。比较两者的跟踪误差。鲁棒性测试在仿真模型中引入参数不确定性如质量、转动惯量变化或外部扰动如常值风扰观察两种控制器的性能保持能力。通过对比可以直观地看到基于EDMD数据驱动模型设计的控制器由于模型蕴含了更丰富的非线性动态信息往往在大范围机动或存在模型失配时表现出更好的性能。实操心得在Simulink仿真中务必注意离散控制器与连续被控对象之间的接口。如果“真实”模型是连续时间的而LQR控制器是基于离散模型设计的则需要一个零阶保持器将离散控制量转换为连续信号同时以固定采样周期对连续状态进行采样。确保仿真步长与控制器采样周期协调一致。6. 关键参数调优与性能分析项目实施过程中多个环节的参数选择直接影响最终性能。这里梳理出几个关键调优点及其分析思路。6.1 字典函数复杂度与模型维度的权衡字典函数是精度和计算负担的平衡点。简单字典如仅线性项模型维度低计算快但可能无法捕捉非线性导致模型在大范围运动时精度骤降。相当于用一条直线去拟合曲线只在原点附近有效。复杂字典如高阶多项式、径向基函数理论上拟合能力更强但会导致维度N急剧上升。这不仅增加EDMD计算量涉及大规模矩阵求逆更可能引发过拟合——模型完美拟合训练数据但对新数据的预测能力很差。同时高维K矩阵提取出的A, B矩阵可能数值条件很差。调优建议采用增量式策略。从二阶多项式字典开始观察仿真性能。如果在大机动时跟踪误差大可以考虑引入特定非线性项如姿态角的正弦/余弦sin(φ),cos(θ)这对无人机动力学是物理相关的。尝试三阶多项式但要有选择地添加项而不是全部组合以避免维数灾难。使用随机傅里叶特征或神经网络作为字典这类方法表达能力更强且维度可控但实现更复杂。一个实用的评估方法是将数据集分为训练集和测试集。用训练集学习K矩阵然后在测试集上计算状态预测误差。选择在测试集上误差最小的字典复杂度。6.2 训练数据覆盖范围与激励设计数据质量决定模型上限。训练数据必须覆盖控制器期望工作的整个状态空间区域。问题如果训练数据只包含悬停附近的小扰动那么学到的模型只在悬停点附近有效。一旦进行大角度机动模型预测将严重失真控制器性能恶化。解决方案设计激励信号时应有意识地让无人机在仿真中“遍历”预期的飞行包线。例如让滚转、俯仰角在[-30°, 30°]范围内变化位置在[-5m, 5m]范围内变化。激励信号的幅值和频率应足够丰富以激发所有重要的动态模式。6.3 LQR权重矩阵的整定即使有了一个好的模型控制器性能还取决于Q和R的选取。这是一个多目标优化问题。Q矩阵惩罚状态误差。对角线元素对应各个状态。通常位置误差的权重应设得较高因为位置控制是首要目标。姿态角权重次之角速度权重可以较低。如果希望无人机更“敏捷”可以降低位置权重提高角速度权重。R矩阵惩罚控制量。增大R会使控制动作更温和减少能耗和电机磨损但可能降低响应速度。整定流程通常是一个试错过程初始猜测根据状态量纲和期望的相对重要性给出Q和R的对角线初始值。仿真观察运行仿真观察阶跃响应或跟踪误差。迭代调整如果响应太慢按比例减小R或增大Q中对应状态的权重如果超调大或振荡则增大R或减小Q中对应高速变化状态如角速度的权重。自动化工具可以使用Matlab的tunable模块或编写脚本进行参数扫描但工程师的直觉和经验仍然不可或缺。7. 常见问题、调试技巧与扩展方向在实际实现过程中你几乎一定会遇到下面这些问题。这里记录了我的排查思路和解决建议。7.1 EDMD学习到的模型不稳定现象提取出的A矩阵特征值不在单位圆内离散系统导致开环模型本身不稳定。可能原因与排查数据噪声过大或数据不一致检查数据质量。确保X和Y矩阵严格按时间顺序对齐。对数据进行低通滤波平滑处理。字典函数选择不当过于复杂的字典在数据量不足时极易导致过拟合学习出荒谬的动态。尝试简化字典。数值问题矩阵Psi_X条件数太差导致伪逆求解不稳定。尝试对数据进行归一化例如将所有状态缩放到[-1, 1]区间。在求解最小二乘问题时加入正则化项Tikhonov正则化即使用K Psi_Y * Psi_X / (Psi_X * Psi_X lambda * eye(N))其中lambda是一个小的正数如1e-6。采样周期不合适采样太快Ts太小连续动态的离散化会使得A矩阵接近单位阵且容易受到噪声主导采样太慢会丢失动态信息。可以尝试调整仿真采样周期。7.2 控制器性能不如传统线性化方法现象在悬停点附近的小扰动测试中Koopman-LQR的控制效果甚至比基于雅可比线性化的LQR还要差。可能原因与排查数据未覆盖工作点训练数据如果主要来自大机动可能反而“学不好”平衡点附近精细的动态。确保训练数据包含足够多的平衡点附近数据。提取A, B矩阵的方式有误确认从K矩阵中提取A和B的子块索引完全正确与字典排列顺序严格对应。一个验证方法是用学习到的(A, B)模型对训练数据做一步预测计算预测误差看是否比原始非线性模型仿真误差小。LQR权重未调优两种方法使用了相同的Q, R吗基于不同模型设计的控制器其“最优”权重可能不同。需要针对Koopman模型重新调节Q和R。7.3 仿真运行缓慢或内存不足现象在构建字典或计算pinv(Psi_X)时Matlab卡死或报内存错误。解决方案降低字典维度这是最有效的方法。重新评估字典的必要性。使用批量数据处理如果数据量m极大不要一次性构建完整的Psi_X矩阵。可以考虑使用增量式EDMD或随机梯度类方法。利用稀疏性对于多项式字典高维时矩阵可能很大但不一定稠密。探索使用稀疏矩阵存储格式。更高效的求解使用(Psi_X * Psi_X) \ (Psi_X * Psi_Y)代替pinv有时数值性能更好。或者使用lscov函数。7.4 项目扩展方向一旦基础框架跑通你可以从多个方向进行深化在线学习与自适应控制实现一个简单的在线EDMD算法让无人机在飞行过程中持续收集数据并更新K矩阵从而适应模型变化如负载改变。结合模型预测控制将Koopman线性模型作为MPC的内部预测模型。由于是线性模型在线优化计算负担远小于非线性MPC同时又能通过滚动优化处理约束性能可能优于LQR。输出反馈与观测器设计假设只能测量部分状态如仅用IMU和视觉没有精确位置信息可以基于Koopman模型设计降维观测器或卡尔曼滤波器。探索更先进的字典学习用神经网络如自动编码器来学习最优的字典函数Ψ(x)这是当前Koopman算子研究的前沿方向之一有望自动找到更紧凑、更有效的提升空间。在我自己的实现过程中最大的体会是数据驱动方法给了我们一个强大的工具但它并没有免除我们对被控对象物理理解的必要性。字典函数的选择、激励信号的设计、乃至对结果模型的解释都离不开对四旋翼无人机基本动力学的把握。EDMD更像是一个“放大镜”帮助我们从一个新的、线性的视角去观察和理解非线性系统但握住放大镜的手以及选择观察何处依然依赖于工程师的智慧。从一行行代码调试到看到无人机基于数据学习到的模型平稳完成一个曾经需要精心调参才能实现的机动这个过程所带来的成就感正是控制工程研究的乐趣所在。本文还有配套的精品资源点击获取
返回列表