☰
速度形式LPV-MPC助力AUV定位:原理、Matlab实现与调参指南
2026/10/31 9:32:06 网站建设 项目流程

简介:一份面向自动化、电子信息工程与数学专业学生的Matlab学习资源,聚焦自主水下航行器(AUV)定位控制中的速度形式LPV-MPC方法。压缩包共14个文件,整体仅13KB,以8个Matlab程序为主体,配套Python辅助脚本、Markdown说明文档、3个备份文件与可直接运行的案例数据,覆盖参数化建模、预测模型构建、求解器调用、结果输出等完整环节。代码采用参数化编程,注释详细,参数便于调整,可在Matlab 2014、2019a、2024a等版本运行;通过主程序与各功能模块配合,可直观理解LPV-MPC如何结合线性参数变化与模型预测控制,应对水下环境的时变特性与多变量约束。整体轻量紧凑,便于快速上机复现与二次开发。已有72人学习,特别适合用于课程设计、期末大作业或毕业设计中AUV控制算法的实现、调试与仿真验证。

1. 自主水下航行器的 LPV-MPC 定位控制:速度形式好在哪,资源里有什么

自主水下航行器的定位控制,难的往往不是误差算不准,而是速度一变,水动力参数就跟着漂——这正是速度形式 LPV-MPC 更值得做的原因:它不硬扛非线性,而是把动力学拆成随调度变量变化的线性模型,再交给 MPC 滚动优化处理约束。这套资源是完整可跑的 Matlab 实现,Main_file.m 作主入口,predA/predB/predQ 组装预测矩阵,solver_RK.m 做动力学积分,附可直接运行的案例数据,兼容 2014、2019a、2024a。

对课程设计和毕业设计来说,最大价值是参数完全开放,改一个系数就能看到效果变化;想快速验证 LPV-MPC 的人也能直接当起点用。

2. LPV-MPC 内部拆解:调度变量、预测矩阵与四个核心 .m 文件

拿到手先别急着点 Run。控制器部分和仿真部分是分开的,搞混了后面调参很容易翻车。拆开看才能知道每个变量到底在影响什么,我把最核心的三块展开讲。

2.1 AUV 速度形式建模:为什么合速度是天然的调度变量

AUV 的六自由度动力学方程可以写成 M·ν̇ + C(ν)ν + D(ν)ν = τ,其中 ν = [u, v, w, p, q, r]T 是速度向量,非线性主要藏在科氏力矩阵 C(ν) 和阻尼矩阵 D(ν) 里,这两项都随速度的绝对值或二次项变化。位置形式的问题在于,把位置误差直接写进状态后,模型矩阵会在不同工况间剧烈跳变,MPC 优化器容易被这种不连续带偏。速度形式则绕开了这一层:状态直接取 ν,把合速度 ρ = √(u²+v²+w²) 当作调度变量,LPV 模型变成 A(ρ)、B(ρ) 的仿射组合。本质上就是把非线性“藏”进调度变量里,而不是在某个工作点强行泰勒展开后再祈祷误差不大。

包内 Naminow_AUV.m 就是这套模型的实现,Naminow 是资源里用的 AUV 模型名。质量矩阵、科氏力矩阵、阻尼矩阵都做成了参数结构体的一部分,方便整体替换成自己的模型。

% Naminow_AUV.m —— AUV 被控对象动力学(速度形式) % 状态 x = [u; v; w; r],输入 tau = [推进力; 艏摇力矩] % 调度变量取合速度 rho,水动力阻尼随 rho 变化 function dx = Naminow_AUV(x, tau, param) u = x(1); v = x(2); w = x(3); r = x(4); rho = sqrt(u^2 + v^2 + w^2); % 合速度,天然调度变量 M = param.M; % 质量 + 附加质量矩阵 C = param.C(rho); % 科氏力与向心力矩阵 D = param.D(rho); % 线性 + 二次阻尼矩阵 dx = M \ (tau - C * x - D * x); % 显式求解状态导数 end

这里有两个关键点。第一,rho 必须由当前实测速度计算,而不是由上一时刻的输入推算,否则 LPV 模型的调度信息滞后一拍,控制效果会明显下降。第二,代码里用 ρ 作为调度变量的写法,意味着 SS.m 在每个采样点会重新计算 C、D 矩阵,再返回线性化的 A、B 给 MPC,这是速度形式区别于位置形式的工程落点——合速度直接从状态里算出来,可测、可用,不像某些调度变量还要靠观测器去估。

2.2 预测时域和控制时域:Np、Nc 与代价函数 Q/R 怎么搭配

MPC 的“预测”落到数学上,就是把未来 Np 步的状态写成一个大的块状矩阵方程。给定当前状态 x(k) 和未来控制序列,预测模型可以整理成 X_pred = A_pred·x(k) + B_pred·U。predA.m 干的就是前半件事:构造 A_pred。假设系统矩阵是 n×n,A_pred 是 (n·Np)×n 的块矩阵,每一块对应 A 的 i 次幂。

% predA.m —— 扩展预测状态矩阵 % A: n×n 系统矩阵,由 SS.m 在每个采样点生成 % Np: 预测时域,默认 20,调大后优化看得更远但计算量上升 function A_pred = predA(A, Np) n = size(A, 1); A_pred = zeros(n * Np, n); for i = 1:Np A_pred((i-1)*n + 1 : i*n, :) = A^i; end end

这个函数的价值不在算法,在维度管理。写 MPC 最容易出问题的是矩阵维度对不上:A_pred 少算一行,后面 quadprog 的约束矩阵维度就会崩。把 A_pred 单独抽成一个函数后,改 Np 只动一个入口参数,维度由 size(A,1) 自动适配。

predB.m 负责另一半:把控制序列映射到状态影响,块结构和 A_pred 对应,每个块需要乘上 A 的 (Np-i) 次幂再右乘 B,行数和控制时域 Nc 直接相关。Nc 一般比 Np 小很多,比如 Np=20、Nc=5,后面 15 步控制量保持恒定,这是 MPC 控制时域的标准做法,能在性能和控制自由度之间取得平衡。

代价函数部分,predQ.m 把权重矩阵扩展成块对角结构,目标函数是 J = X_pred'·Q_pred·X_pred + U'·R_pred·U。

% predQ.m —— 代价权重矩阵块对角扩展 % Q: n×n 状态权重,对角元素典型取值 [5, 1, 1, 10] % R: nu×nu 控制量权重,典型取 0.01*eye(nu) function Q_pred = predQ(Q, Np) Q_pred = kron(eye(Np), Q); % 如需远端少罚、近端多罚,可改为: % Q_pred = kron(diag(0.95.^(0:Np-1)), Q); end

Q 矩阵对角线上的四个权重分别对应 u、v、w、r 四个状态。定位控制场景里,轴向速度 u 和艏摇角速度 r 的权重通常给得最大;R 矩阵给太大控制动作迟钝,给太小控制量会在约束边界上反复撞击。我的习惯是先把 Q 对角比设成 5:1:1:10,R 取 0.01,跑通闭环后再根据振荡程度调整。

2.3 predA / predB / predQ / solver_RK:四个文件把优化问题拆成了什么

整套控制器的工作流是:SS.m 根据当前速度生成 A、B,predA、predB 把它扩展成预测矩阵,predQ 把权重扩展成块对角,然后二次规划求解出最优控制序列,最后 solver_RK.m 用四阶龙格库塔对被控对象积分一步,得到下一时刻状态。务必分清:solver_RK.m 是仿真被控对象的,不是优化器的一部分。把仿真积分器和 MPC 预测器混在一起,是调参无效最常见的根源。

文件作用属于哪一层
SS.m由当前状态和参数生成 A(ρ)、B(ρ)模型层
predA.m构造状态预测矩阵 A_pred优化层
predB.m构造输入预测矩阵 B_pred优化层
predQ.m构造块对角权重矩阵优化层
solver_RK.m四阶 RK 积分仿真被控对象仿真层
Main_file.m串联以上全部模块的主脚本调度层

还有一个细节容易被忽略:压缩包里有一批 .zbak 结尾的备份文件,比如 predA.m.zbak、predQ.m.zbak。这些是作者调试时的旧版本,不影响运行,但别批量改名成 .m 丢进工作目录,否则会和正式文件重复定义,Matlab 报错报得让人摸不着头脑。把文件关系理清之后再回头看 Main_file.m 里的层层调用,基本就能对应上每个环节了。

3. 跑通程序到调参:Matlab 环境、Main_file.m 与参数修改路径

先讲运行环境。资源在设计时明确覆盖了 2014、2019a 和 2024a 三个版本跨度,但实际跑起来之前要做两步准备:把解压目录加进搜索路径,同时清掉目录里干扰运行的备份文件和附带资料压缩包。

% 添加路径:把整个工程目录及子目录加入搜索路径 addpath(genpath('D:\AUV_LPV_MPC')); % 用 which 验证路径是否生效,能看到完整路径即成功 which Main_file.m

这一步有几个细节。路径里尽量不要带中文字符,Matlab 在中文路径下调用 quadprog 偶尔会出现缓存错乱。解压目录别放在 OneDrive、坚果云这类同步盘里,文件锁会影响读写。2014 版用户还要检查一下 .m 文件编码,UTF-8 带 BOM 的注释在 2014 里会显示乱码,但不影响执行。另外,解压后目录里那些 .zbak 备份文件,以及附带的 zip 资料压缩包,都先移到工程外,避免后续误操作。

注意:如果运行目录里同时存在 predA.m 和 predA.m.zbak,务必保留 .m 后缀的原文件,不要为了“清理”把备份改名覆盖正式文件。

3.1 主入口 Main_file.m:初始化、滚动优化、模型积分

主入口的编排方式遵循 MPC 脚本的标准三段式:参数初始化、滚动时域优化、模型积分。下面这个骨架就是 Main_file.m 的执行主线,先通读再对照实际文件。

%% Main_file.m 执行主线(逻辑骨架,真实文件以包内代码为准) % 1) 参数初始化 param.m = 116; % AUV 质量(含附加质量折算) param.Iz = 13.5; % 艏摇转动惯量 param.dt = 0.1; % 采样周期,秒 Np = 20; Nc = 5; % 预测时域、控制时域 % 2) 初始状态与状态空间 x0 = [0; 0; 0; 0]; % 初始速度 [u; v; w; r] x_now = x0; [A, B] = SS(x_now, param); % 由当前速度生成 LPV 矩阵 % 3) 滚动时域主循环 for k = 1:T_end / param.dt [A, B] = SS(x_now, param); % 先更新调度变量与系统矩阵 Ap = predA(A, Np); % 扩展状态矩阵 Bp = predB(A, B, Np, Nc); % 扩展输入矩阵 Qp = predQ(Q, Np); Rp = predQ(R, Nc); H = Bp' * Qp * Bp + Rp; % 二次规划目标函数 Hessian tau_opt = quadprog(H, f, [], [], [], [], lb, ub, [], options); tau_cmd = tau_opt(1); % 滚动策略:只取第一个控制量 x_now = solver_RK(@Naminow_AUV, x_now, tau_cmd, param.dt); end

注意循环里的顺序:先更新调度变量和系统矩阵,再求解控制量,最后积分。有人习惯先积分再更新调度变量,结果模型比控制器慢半拍,低速时看不出来,一旦有扰动曲线就开始抖。quadprog 是 Matlab 自带的二次规划求解器,target function 的 Hessian 由预测矩阵和权重矩阵组合而成,lb/ub 是对推进力和艏摇力矩的幅值约束,options 里可以设置求解算法和关闭迭代输出。

3.2 参数化改参:预测时域、权重矩阵与推力配置的具体位置

这套代码说是“参数化编程”不夸张:模型系数、控制器参数、仿真参数全部集中在文件头部,而不是散落在各函数深处。改参数主要动两个地方——Main_file.m 的参数区,以及 SS.m / Naminow_AUV.m 被 param 结构体引用的模型系数。

参数默认参考值位置调整影响
Np20Main_file.m越大预见越远,计算量上升
Nc5Main_file.m越大控制自由度越高,动作更激进
Q(1,1)5参数区轴向速度 u 的权重
Q(4,4)10参数区艏摇角速度 r 的权重
R(1,1)0.01参数区控制量权重,太小导致振荡
dt0.1 s参数区采样周期,影响离散化精度
param.m116Naminow_AUV.m质量/附加质量,改变响应速度
% 参数修改示例:让航向保持更硬、控制动作更平滑 Np = 30; % 预测时域加大到 30 Nc = 3; % 控制时域减少,降低自由度 Q = diag([5, 1, 1, 10]); % 状态权重矩阵 R = 0.05 * eye(2); % 控制量权重调大,抑制振荡 param.dt = 0.05; % 采样周期减半,离散模型更接近连续系统

改完参数后建议每次只动一个变量。这里没有玄学,但预测控制器的参数耦合很强,Np 和 R 一起改出了问题,很难判断是谁的责任。先固定其他项把 Np 从 20 调到 30,观察调节时间变化;再单独调 R,观察控制量曲线。参数化编程的好处就在这:每个变量都能单独验证,不用猜。

4. 排障避坑:从“能跑”到“跑得对”的五个常见问题

程序能跑通只是第一步,曲线对不对才是真正要命的地方。以下五条是拆这类 MPC 代码时实际遇到的问题,按现象、原因、解决三步写,可以直接对号入座。

4.1 现象:解算出来的控制量跳变严重

现象:推进力曲线像锯齿,每个采样点都在上下限之间来回撞,AUV 速度响应却迟迟不收敛。

原因:九成是权重矩阵配置失衡,R 太小、Nc 太大。R 小意味着优化器几乎不在乎控制代价,只关心状态误差,于是最优解会利用每一个控制自由度去猛打误差;Nc 大又给了它更多自由度去折腾。另一个常见原因是控制量没做增量约束,MPC 只约束了 tau 的幅值,没约束 Δtau,相邻两步控制量可以跳变。

解决:先把 R 提高一个数量级,比如从 0.01 调到 0.1,看振荡幅值是否下降;再把 Nc 从 5 降到 3,限制优化器在近端做太频繁的修正。如果还抖,就手动给 Δtau 加一条硬约束:|tau(k) - tau(k-1)| ≤ 上限,在 Main_file.m 的 quadprog 调用处通过 Aineq/bineq 加一行即可。这个操作和单纯调权重性质不同,它是硬约束,优先级最高,能保证控制量连续变化。

4.2 现象:滚动时域中途报错,quadprog 退出码异常

现象:程序跑到第几十步突然报错,提示 “matrix is singular to working precision”,或者 quadprog 返回非零退出码,控制量输出变成 NaN。

原因:核心原因是预测矩阵条件数过大。速度接近零时,调度变量 ρ 变得很小,阻尼矩阵接近奇异,A 矩阵里某些元素趋近于零,逆运算数值不稳定。另一个意想不到的原因是目录里混入了 .zbak 备份文件被误改或误载,导致重复定义,变量被覆盖成错误维度。

解决:先在参数区把最小速度限幅加上,例如 ρ = max(sqrt(u²+v²+w²), 0.1),保证调度变量不会出现零值。再用 rcond(A) 检查系统矩阵条件数,小于 1e-12 就说明数值已经不可信,需要回头检查阻尼系数的量级。最后,把 predA.m.zbak、predQ.m.zbak 这些备份移到别的目录,不要在运行目录里保留 .zbak 结尾的旧版本。这个坑最容易被忽略,属于查了半天发现是文件混了的典型案例。

4.3 现象:运行结果与文档曲线对不上

现象:复现出来的速度响应曲线和文档里的图整体趋势一致,但收敛时间差 2 到 3 秒,或者超调量明显偏大。

原因:最常出在调度变量的更新时刻上。速度形式的 LPV-MPC,ρ 是每一步开始时用当前实测速度算的,如果代码里用的是上一时刻的 x 生成 A、B,模型的调度信息就滞后了一个采样周期。低速时这个滞后不明显,合速度超过 1 m/s 后,滞后效应会被阻尼项的二次项放大。另一个原因是 RK4 积分步长和 MPC 采样周期不一致,solver_RK.m 内部如果细分了多个内步,而 Main_file.m 把 dt 当成唯一时间刻度传入,相当于被控对象响应被算慢了一拍。

解决:把调度变量更新行移到循环最前面,确保 SS.m 用的是当前 x。用 tic/toc 统计单个采样周期耗时,确认 MPC 求解能在采样周期内完成。最后核对 solver_RK.m 的入参,让它按固定内步积分,而不是把 dt 当成唯一时间刻度。这两处对上了,复现曲线一般就能贴合。

4.4 现象:低版本 Matlab 打不开数据文件

现象:Matlab 2014 里用 load 读案例数据时提示 “Unable to read MAT-file”,或者读出来是乱码结构体。

原因:案例数据如果是高版本 Matlab 用 v7.3(HDF5)格式保存的,2014 版默认读不了。这个兼容问题在跨版本资源里经常出现,资源说明虽然写了适配 2014、2019a、2024a,但数据文件本身的二进制格式还是得单独处理。

解决:在 2019a 或 2024a 里把数据读出后,另存成 v7 格式:

% 用高版本读取后另存为低版本兼容格式 data = load('case_data.mat'); save('case_data_v7.mat', '-v7', '-struct', 'data');

之后在 2014 里 load case_data_v7.mat 就不会报错。如果附带的数据里有 .csv 或 .txt 版本,直接用 readtable 或 csvread 读,绕开版本问题更省事。

4.5 现象:压缩包里 LPVMPC1.py 后缀的文件不知道怎么办

现象:解压后看到一个 LPVMPC1.py 文件,用 Python 打开发现全是 Matlab 语法,根本跑不了。

原因:这类资源共享时,偶尔会有人为了防止平台自动识别 .m 文件而把扩展名改掉。LPVMPC1.py 实际是 Matlab 脚本,不是 Python 程序,压缩包里多个 .m 文件都正常,唯独这个被改了后缀。

解决:用任意文本编辑器看文件头,如果第一行是 % 开头的注释,复制一份改成 LPVMPC1.m,放进运行目录即可。不要在 Python 环境里强行运行。改完后用 which LPVMPC1.m 确认 Matlab 能找到文件,再决定是否加入主流程。这是资源落地时最常见的“小惊吓”,处理方式很直接。

5. 迁移到自己的课题:替换 AUV 模型、扩展到路径跟踪与速度形式边界

跑通案例、调过参数,接下来就是把这套 LPV-MPC 用在自己的课题上。替换模型不是改一个函数那么简单,对速度形式来说,需要同时动三个地方:被控对象、状态空间 SS.m、以及 predA/predB 依赖的维度。

5.1 替换核心模型:从 Naminow_AUV.m 到你自己的动力学方程

操作步骤:第一步,把动力学方程写成 M·ν̇ + C(ν)ν + D(ν)ν = τ 的形式,确认状态向量和输入向量各是几维;第二步,替换 Naminow_AUV.m 里 M、C、D 的具体数值;第三步,改 SS.m,让它从新模型系数生成 A(ρ)、B(ρ);第四步,检查 Main_file.m 里初始状态 x0 的维度。

% 自定义模型替换示例:三自由度模型 [u; v; r] % 相比四自由度少了垂荡 w,适合只做水平面控制的场合 function dx = my_auv_model(x, tau, param) u = x(1); v = x(2); r = x(3); rho = sqrt(u^2 + v^2); % 水平面合速度 M = param.M; % 3×3 质量矩阵 C = param.C(rho); % 3×3 科氏力矩阵 D = param.D(rho); % 3×3 阻尼矩阵 dx = M \ (tau - C * x - D * x); end

常见翻车点:换了模型后忘记同步更新 SS.m 的矩阵维数。原来 n=4 的 A 矩阵是 4×4,新模型 n=3 必须改成 3×3。predA.m 用的是 size(A,1) 自动适配,问题不大;但 Main_file.m 里 x0 长度、Q 矩阵维度、R 矩阵维度都要跟着改,少一个都会在 quadprog 阶段报维度不匹配。

5.2 从定点保持到路径跟踪:加一条参考轨迹需要改什么

定位控制的目标是让状态收敛到固定点,路径跟踪则是跟着随时间变化的参考轨迹走。改动的核心在代价函数:把原来只惩罚状态误差的 x'Qx,扩展成 (x - x_ref)'Q(x - x_ref),x_ref 换成随时间变化的参考状态。

实现上两种常见做法。第一种是把参考轨迹直接当时间序列放进预测时域,每一步把未来 Np 步的参考值取出来,跟预测状态逐个求差;第二种是做误差状态重定义,把模型写成误差动力学形式,对误差状态执行 LPV-MPC,控制量由前馈加反馈合成。这套代码适合用第一种,改动最小:

% 在代价函数中加入参考轨迹偏差项 X_ref = get_reference_trajectory(t_k, Np); % 未来 Np 步参考状态 cost = (X_pred - X_ref)' * Q_pred * (X_pred - X_ref);

参考轨迹生成器是新增模块,最简单的形式是对路径点做线性插值,速度给常量。路径跟踪场景下,Q 矩阵的配置和定点保持有明显区别:速度误差权重可以适当降低,横向偏差对应状态量的权重调高,否则曲率大的地方会明显切弯道。建议先在直线路径上验证,再上曲线路径。

5.3 速度形式的边界:调度变量范围、线性化区间与实时性取舍

速度形式不是万能药,三个边界条件要心里有数。

第一个是调度变量范围。LPV 模型只在设计覆盖的 ρ 区间内可信,比如案例里 ρ 取值范围如果是 0 到 2 m/s,硬要跑 4 m/s 的工况,阻尼矩阵的二次项早就超出仿射近似能力,控制效果会断崖式下降。修改模型时,务必把参考试验的合速度范围标在注释里。

第二个是线性化区间。LPV-MPC 在每个采样点把系统当作线性模型处理,状态增量不能太大。如果采样周期 dt 过长,比如 0.5 s 以上,两步之间速度变化可能已经跨出线性区间,预测就会失真。一般保持 dt 在 0.05 到 0.1 s,并让 RK4 内部步长更细。

第三个是实时性。MPC 每一步要解一个 QP,Np=20、n=4 时规模不大,Matlab 里几十毫秒能解完;但 Np 拉到 50、模型换到六自由度、再加控制增量约束,单步求解时间可能超过采样周期,程序越跑越慢。这时候要么减小 Np,要么把 H 矩阵改用稀疏存储,并换 quadprog 算法:

% 用稀疏矩阵和更快的算法选项缓解大时域下的计算压力 options = optimoptions('quadprog', 'Algorithm', 'interior-point-convex', ... 'Display', 'off'); tau_opt = quadprog(sparse(H), f, Aineq, bineq, [], [], lb, ub, [], options);

H 矩阵用 sparse() 转换后,在大 Np 场景下能省不少内存和求解时间。这一步在仿真里看不出多大差别,但如果你要把控制器部署到半实物仿真或嵌入式环境,实时性就是生死线。

6. 快速验证 LPV-MPC 控制效果:慢速斜航试验与曲线对齐技巧

跑通案例、改了参数,怎么确认控制器是真的变好了,而不是曲线碰巧好看?我的习惯是固定做一套“慢速斜航试验 + 预测-实际曲线对齐”的验证流程,十分钟能暴露问题,比盯着结果图猜靠谱得多。

慢速斜航试验的做法:给 AUV 一个恒定的推进力输入,比如总推力的 20%,不给航向指令,让系统在直航状态下慢慢稳定;速度稳定后记录稳态速度和艏摇状态。这个工况接近 LPV 模型低速区的设计点,又能把阻尼项、科氏力项的系数误差暴露出来——如果阻尼给大了,仿真稳定速度会比实际偏小;给小了,偏大。

曲线对齐检查是第二步。把 MPC 内部预测出来的第一步状态和 solver_RK.m 仿出来的实际状态画在同一张图上:

% 预测轨迹与实际仿真轨迹对比 figure; plot(t_sim, x_sim(1,:), '-o', 'LineWidth', 1.2); hold on; plot(t_sim, x_pred(1,:), '--x', 'LineWidth', 1.2); hold off; grid on; legend('实际(RK4 仿真)', 'MPC 预测', 'Location', 'best'); xlabel('时间 (s)'); ylabel('轴向速度 u (m/s)');

两者如果在前 3 到 5 步内就开始分叉,说明模型矩阵 A(ρ)、B(ρ) 和真实被控对象存在明显偏差,这时候调 Q/R 没用,要回头查 Naminow_AUV.m 里的阻尼系数和附加质量。如果前几步贴合、后面逐渐发散,那是预测时域内线性化误差累积的正常表现,可以接受,也正好用来判断 Np 是否需要加大。

这套验证流程看起来基础,但真的救过我一次。有一回我把一个六自由度模型的阻尼系数从资料库里直接抄过来跑,单看闭环稳定曲线完全正常,结果慢速斜航一测,稳态速度差了快 15%,曲线对齐图上前三步就开始分叉——最后发现是垂荡方向阻尼少乘了一个面积系数。从那以后,我每接到一个新的 AUV 模型,都强制先跑一遍慢速斜航加曲线对齐,确认模型可信再谈控制器调参。

这套 LPV-MPC 案例包自带 Naminow_AUV 模型和可直接运行的仿真入口,拿到手先按第三章的路径跑通、改一遍参数,再做一次上面的验证,基本就能放心往自己的课题上迁移。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询