Lazy loaded image
学习笔记
【学习笔记006】模型预测控制
字数 11608阅读时长 30 分钟
2026-9-5
2026-9-7

反应式控制

1. 理想情况下,需要多大的推力?
无人机主要受到推力和重力:
其中,m是质量, 是世界坐标系中竖直向上的单位向量。
如果希望无人机产生期望加速度 ,就需要:
例如,悬停时 ,推力只需要竖直向上、大小等于重力。
2. 现实中飞偏了,怎么办?
由于风、模型误差等因素,实际位置和速度会偏离目标。定义:
于是,在理想推力上加入纠偏项:
可以这样理解:
  • :把位置拉回去。 比如无人机比目标位置偏右,就增加向左的推力分量。
  • :纠正速度,抑制振荡。 比如向右飞得太快,就施加向左的修正。
  • 后两项仍然负责抵消重力、提供轨迹要求的加速度。
这里采用的是 PD反馈 + 前馈补偿 是控制增益,决定纠偏的力度;增益过大也可能造成振荡。
3. 推力怎么变成无人机的姿态?
图中假设推力沿无人机自身的 轴。因此,要让推力朝向 ,就需要让机身相应倾斜:
也就是:推力的大小决定“推多大”,推力的方向决定“机身怎么倾斜”。
后面的四元数公式用于计算期望姿态,并结合偏航要求,再交给飞控执行。初学时先理解这个作用即可,不必纠结四元数的展开式。
4. 为什么它简单,但也有局限?
它的优点是结构直观、容易实现,而且能根据实际误差及时纠偏。局限主要有:
  • 参数需要调节:位置和速度的纠偏力度需要匹配。
  • 复杂系统更难设计:例如四足机器人涉及多关节、接触和身体平衡。
  • 普通独立PID不直接处理耦合和约束:例如汽车的车速会影响转弯表现,油门和转向不能完全分开考虑。
  • 缺少对未来的主动规划:即使使用期望加速度作为前馈,也没有显式预测、优化未来一段时间的动作。例如前方即将急转弯,它本身不会据此规划提前减速。
notion image
前馈补偿,就是根据已知的目标和物理模型,预先算出需要施加的控制量,不必等到出现误差才采取动作。
在这架无人机中,控制指令可以分成两部分
前馈部分具体做两件事:
  • 重力补偿 :已知重力会把无人机向下拉,就直接提供相应的向上推力。
  • 加速度前馈 :目标轨迹要求怎样的加速度,就根据牛顿第二定律,提供对应的力。
例如,无人机悬停时,即使位置和速度误差都是零,也仍然需要向上的推力来抵消重力。 前馈补偿会直接给出这部分推力;如果随后一阵风把无人机吹偏,反馈控制再根据误差追加修正。
所以,两者配合的方式是:前馈先给出理论上需要的力,反馈再修正实际运行中的偏差。

最优控制

最优控制(Optimal Control):利用模型预测系统接下来如何运动,再计算一段时间内的控制动作,使系统在满足约束的同时,尽量达到我们设定的目标。
结合前面的内容:反应式控制根据当前误差进行纠偏;这里的最优控制进一步考虑了“现在的动作,会怎样影响后面一段时间”。
用模型预测车辆运动。 想决定怎样控制,首先需要知道“给出一个控制指令后,车辆会怎么走”。
比如简化的“运动学自行车模型”,把车辆左右两侧的轮子分别合并成一个前轮、一个后轮。状态和输入为:
其中, 是后轮位置,v是速度, 是车身朝向;控制量 a 是加速度, 是前轮转角。
模型中的四个关系分别表示:
车沿着当前朝向前进,其速度分解到两个坐标方向上。
加速度改变车速,转向角改变车身朝向。这里 L 是轴距,即前后轮之间的距离。后一式也说明,车辆转向效果与车速有关。
计算机通常按时间步计算,因此使用离散模型:
意思是:已知当前状态和当前动作,就能预测下一时刻的状态。
notion image
代价函数
例如,我们希望车辆既贴近目标轨迹,又不要突然加速或猛打方向盘。
课件把未来 N 步的总代价写成:
这里优化的是一串未来控制动作,而不是只有当前一个动作。
每一步的代价可以写成:
其中:
  • :实际预测状态与目标状态的差距。
  • :相邻两次控制指令的变化。
  • :决定多重视动作平滑;越大,就越不愿意突然改变控制指令。
终端代价
则额外关注最后一步有没有接近目标。它是对终点误差的惩罚,本身并不强制终点误差等于零。
控制动作还必须满足约束。
代价函数决定“什么更好”,约束决定“哪些方案允许采用”。
课件主要考虑三类限制:
  • 运动规律:每一步必须满足车辆模型,车辆不能瞬间移动到任意位置。
  • 能力限制:加速度、转向角和速度必须处于允许范围,例如.
  • 避障限制:车辆不能与障碍物发生碰撞。
把车辆和障碍物简化成圆形时,避障可以写成:
其中, 是车辆的位置, 是障碍物中心, 分别是障碍物和车辆包络圆的半径。它表达的就是:
两个圆的中心距离,至少要等于两个半径之和。
所以,即使直线距离最短,只要中间有障碍物,优化器也必须寻找绕开的方案。
求出一整段控制序列。
把初始状态、模型、代价函数和约束交给求解器,就希望得到:
对车辆来说,这相当于一份按时间排列的操作计划:
第一步采用怎样的加速度和转角,第二步怎样调整,后续什么时候回正……
这里“最优”的含义,取决于我们选择的模型、评价标准和约束。例如,提高平滑项的权重,得到的动作通常会更柔和。
notion image
为什么算好计划后直接执行,仍然可能走偏? 这针对的是开环最优控制:计算一次控制序列,然后按计划执行,期间不根据实际状态重新修正计划。
现实中会遇到:
  • 模型不够准确,预测误差逐渐累积。
  • 执行器存在延迟或偏差,指令不能被完全准确地执行。
  • 风、路面变化等外部扰动。
  • 规划时间太长,优化问题计算量过大。
因此,图中的蓝线是预测的运动轨迹,红线是实际执行出来的轨迹,两者可能逐渐分离。
这就引出了后续常见的 MPC(模型预测控制):每次根据最新状态重新优化,只执行当前算出的第一步,然后再测量、再优化,让预测规划和反馈纠偏结合起来。

Model Predictive Control

MPC(模型预测控制)就是不断重新规划的最优控制:预测未来一小段时间,算出一串控制动作,只执行第一步,然后根据最新状态重新计算。
它把前面讲过的最优控制反馈纠偏结合起来。
1. 它是怎样工作的?
以汽车为例,假设每 0.1 秒更新一次,每次预测未来 2 秒
  1. 获取当前状态:测量或估计汽车的位置、速度、朝向。
  1. 预测并优化:利用车辆模型,计算未来2秒内怎样加速、转向更合适。
  1. 只执行第一步:仅执行接下来0.1秒的控制指令。
  1. 重新规划:0.1秒后获取新状态,再规划此后2秒的动作。
因此,预测窗口会随时间不断向前移动,这就叫滚动时域(Receding Horizon)
例如,汽车实际转弯比预测得少,下一次优化就会从新的实际位置出发,重新调整转向。
2. 公式在表达什么?
目标函数可以理解为:
其中:
  • :模型预测的输出,例如车辆位置。
  • :对应时刻的目标输出。
  • :控制指令的变化。
  • N:预测步数;:对动作平滑程度的重视程度。
优化时还需要遵守:
这两式用来预测状态和输出,g(x)就是观测方程;状态、输入的上下限则限制车速、加速度、转向角等。
其中特别关键的是:
每次都从最新状态重新开始预测,这就是反馈进入MPC的地方。
3. 为什么这样做有用?
  • 能考虑未来:例如发现前方将要急转弯,可以提前减速。
  • 能修正偏差:每次重新获取状态,调整后续计划。
  • 控制单次问题规模:每次只规划有限时间,不必一次算完整个任务。
  • 可利用上次结果加速求解:把上一轮剩余的计划作为新一轮的初始猜测,称为“热启动”。
每次优化算出一段开环动作序列,但通过反复测量和重新优化,整体形成闭环控制。

MPC Design

notion image
预测模型:在简单和准确之间选择。
左边的运动学自行车模型主要描述几何运动关系:给定车速和转角,车辆会怎样移动。它简单、计算快,适合侧滑较小的情况。
右边的动力学自行车模型进一步考虑轮胎受力、车辆惯性、横向运动等,能描述更复杂的车辆行为,但需要更多参数和计算。
对MPC来说,模型既要能预测实际运动,也要让控制器来得及算出指令。
notion image
代价函数:决定车辆“优先做好什么”。
第2页展示了两种不同目标:
  • 上图:尽量贴近参考轨迹。 偏离蓝色虚线越远,受到的惩罚越大。
  • 下图:在赛道边界内尽量向前推进。 车辆可以选择更有利的行驶路线,不必始终贴着参考线。
因此,即使用同一个车辆模型,选择不同的代价函数,也可能得到不同的行驶路线。
notion image
预测时域:决定“向前看多远”。
例如,每步代表0.1秒,预测20步,就是向前看2秒。
预测时间短,计算通常更快,但容易只顾眼前。 第3页中,车辆即将进入急弯,如果预测范围只覆盖弯前路段,它可能还在加速,等看见急弯时,已经来不及充分减速。
预测时间长,能更早考虑后续路况,但计算量通常更大。
 
终端约束:让当前计划结束后,还能继续控制。
“终端”指的是当前预测窗口的末端,不一定是整个任务的终点。
例如,预测将在弯道入口结束,就可以要求预测末端的车速处于适合继续转弯的范围,避免车辆以过高速度到达那里。
这与图中的**递归可行性(recursive feasibility)**有关:
当前能找到满足约束的控制方案;执行第一步之后,下一次仍然能找到满足约束的方案。
合理设计终端约束,配合相应的模型和控制条件,可以保证这种性质。它关注的是:当前计划执行后,后续仍有可行的操作空间。

Linear MPC – Unconstrained Case

重要结论:当模型是线性的、代价函数是二次型,并且没有状态和输入的上下限约束时,MPC可以直接算出最优解;实际执行的控制指令具有 \(u=-Kx\) 的形式。
这些大矩阵主要是在把“未来多步预测”整理成一次计算。可以按下面的顺序理解。
  1. 先把车辆模型写成线性形式。
这就是前面 的一种具体形式:
  • :当前状态对下一时刻的影响。
  • :控制输入对下一时刻的影响。
  • :从状态计算输出。
A、B、C 都是描述系统的已知矩阵。
这里“无约束”主要指不设置车速、加速度等上下限,系统仍然必须遵守运动模型
  1. 连续预测,把未来状态全部用控制输入表示。
notion image
从当前状态 出发:
再向前预测一步:
可以看到:未来状态由当前状态和此前施加的控制共同决定。
把未来状态和控制分别堆叠起来:
第1、3页的大矩阵就可以简写为:
描述控制序列的影响, 描述初始状态的影响。矩阵中的零表示:后面的控制动作不会影响前面已经发生的状态。
  1. 用二次型代价衡量控制效果。
notion image
采用:
这里讨论的是把状态调节到零。三部分分别表示:
代价项
作用
希望过程中的状态接近零
避免使用过大的控制输入
额外重视预测末端的状态
“二次型”可以理解成多个量的加权平方和。例如:
在给定单位和尺度下,这表示更重视位置偏差。
注意,这里惩罚的是 本身的大小;前面课件中的 则用于惩罚控制动作的变化。
notion image
  1. 把状态代入代价函数,直接求最优控制。
代入后,代价函数只剩下控制序列 z 需要优化:
都是由模型和权重整理出来的已知矩阵,不需要先背它们的展开式。
此时 已经测得,所以最后一项是常数,不影响最优控制的选择。类似对一元二次函数求最小值,对 求导并令其为零:
得到:
在课件给出的正定条件下,这是唯一的最小值点。
包含未来整段控制,但MPC只执行第一项 。因此:
这就是“线性状态反馈”:根据当前状态乘上一个增益矩阵,得到当前控制指令。下一时刻再用最新状态重复计算。
notion image
前面的“凝聚形式”(condensed form)只把控制序列作为优化变量。最后一页重新定义了 z,把未来状态也包含进去:
同时保留模型作为等式约束:
两种写法描述的是同一个优化问题,只是计算组织方式不同:
写法
特点
凝聚形式
变量较少,但矩阵通常较密集
非凝聚形式
变量和等式较多,但矩阵中零很多,便于利用稀疏结构求解

MPC and Linear Quadratic Regulator (LQR)

怎样利用控制问题的时间顺序,更高效地求解前面的无约束线性MPC。 核心方法是动态规划,最后得到 Riccati递推
LQR的中文名称是“线性二次调节器”:使用线性模型二次型代价,通常研究如何把状态调节到零。
  1. 为什么要换一种求解方法?
前面把未来所有控制量堆在一起,一次求出:
预测步数越多,矩阵 H 就越大。
动态规划利用了一个特点:控制动作按时间一步一步发生,因此可以从最后一步开始,逐步往前计算。
这里“倒着算”指计算顺序;车辆实际运行仍然按时间向前进行。
要区分两个方向:
① 系统实际运行:从现在走向未来。
时间顺序是 ,所以 最早, 最晚
② 动态规划计算:从末端反推到现在。
  • 先看:只剩最后一步时,应该怎样控制?
  • 再看:还剩两步时,应该怎样控制?
  • 依次反推,直到算出当前的
这里反向计算的是控制规则 。我们只需要知道终端代价的公式,不需要提前知道实际的
算好后,车辆仍然从当前 出发,执行 ,沿时间正常向未来运行。
  1. Bellman最优性原理是什么意思?
课件用 来说明:
如果整段方案最优,那么到达中间状态 B 后,剩下的方案也必须是从该状态出发的最优方案。
否则,只要把后半段换成更好的方案,整段方案就能变得更好,与原先“最优”的说法矛盾。
因此,可以先研究“剩最后一步怎么办”,再研究“剩两步怎么办”,逐渐往前推。
  1. 先解决最后一步。
到第 N 步时,已经没有后续控制动作,只剩终端代价:
表示从该状态开始,剩余的最小代价。这里终端状态不必事先知道,但它对应的代价公式是已知的。
再向前看一步,第 步需要考虑:
为了简洁,这里用 表示
对 u 求导、令导数为零,就得到:
所以,最后一步的最佳动作,也是当前状态乘以一个反馈增益。
注意:课件把负号包含在 K 里面,所以写成 ;前面写 ,只是增益的符号定义不同。
  1. 为什么可以继续往前算?
把刚求出的最优控制 代回去,剩余最小代价仍然是二次型:
形式保持不变,只是权重矩阵更新了。 因此,再往前一步时,可以重复同样的计算。
为了区分各个时刻,将终端权重记作 ,然后递推:
计算顺序是:
最后,MPC当前要执行的动作就是:
这就是有限时域Riccati递推。一般来说,不同时刻的 可以不同。
  1. 它为什么更高效?MPC和LQR有什么关系?
固定状态、输入的维数时,两种计算方式的典型区别是:
方法
计算方式
随预测步数 N 的增长
普通稠密批量求解
处理一个越来越大的矩阵
Riccati递推
重复进行固定规模的矩阵计算
因此,预测步数增加时,Riccati递推通常更有计算优势。
最后一页的“无约束MPC = LQR”,应理解为:对于相同的线性模型、二次代价、预测长度和终端权重,无约束线性MPC中的优化问题,就是一个有限时域LQR问题。 两种方法会给出相同的最优控制序列。
MPC还会在下一次采样时,用最新状态重新求解,并只执行第一步。它并不意味着任意预测长度的MPC,都与通常所说的无限时域LQR具有相同增益;选择合适的稳态Riccati解作为终端权重时,才可以得到这种一致性。
这几页课件讨论的是它们的交集:
如果MPC每次求解的问题恰好采用线性模型、二次代价,而且没有状态和输入限制,那么这一次优化,就是一个有限时域LQR问题,可以用Riccati递推求解。
所以,课件的意思是:某些MPC内部的优化问题,可以按LQR来求解。 它并不是说所有MPC都是LQR,也不是说LQR只是MPC的另一个名字。

有延迟的MPC

指令发出后,要过一段时间才生效。
原来假设当前输入立即参与状态更新:
加入延迟后变成:
其中, 是延迟的采样步数。例如,,表示这一步实际使用的是两步之前发出的指令。图中的小格子就像指令的排队通道。
notion image
MPC怎样处理?先预测旧指令执行完后,系统会到达什么状态。
当前状态已知,排队中的旧指令也已知,因此可以预测:
然后把这个预测状态作为延迟补偿后的规划起点。课件中带求和符号的长公式,就是在累计当前状态和排队中旧指令的影响
例如,延迟两步时:
预测时域也要足够长:课件用 强调至少覆盖延迟,实际还应留出控制生效后的预测时间。

有约束的线性MPC

最优动作还必须在允许范围内。
前面无约束时,可以直接求:
但这个结果可能要求车辆使用过大的加速度或转向角。因此,现在要同时考虑:
这里:
  • z:未来一串控制指令。
  • :当前状态。
  • 不等式:把加速度、转向角、速度等限制统一写在一起。
例如,无约束解可能要求加速度为 ,但车辆只允许最高 ,优化器就需要在允许范围内重新寻找最佳控制序列
二次型目标加上线性约束,并且 H 半正定,就构成凸二次规划问题(QP)

什么是QP

QP 是 Quadratic Programming,中文叫“二次规划”,是一类很重要的数学优化问题。 这里“规划”指的是:在满足限制条件的情况下,找到最好的参数或控制动作。它在控制、机器人、信号处理和机器学习中都很常见。在组会经常听到它,是因为很多工程问题最终都能整理成这种形式。
QP 的特点是:目标函数是二次函数,约束是线性的。
常见写法为:
先不用纠结矩阵展开式:
  • z:我们要选择的量,例如未来的加速度、转向角。
  • 目标函数:评价这个选择有多好。
  • 约束:这个选择必须满足哪些限制。
  • “二次”:目标中可以包含变量的平方、两个变量相乘等项。
举一个只有一个变量的例子:
这里同时表达了两个愿望:
  • :希望 u 接近3。
  • :希望 u 不要太大。
两者折中,无约束时最优值是 u=1.5。但允许范围只有 [-1,1],所以这个QP的最优解是 u=1
这就是优化器在做的事情:综合考虑目标和限制,找到允许范围内最好的选择。
它的重要性主要体现在三个方面:
  1. 很多工程目标天然就是“平方和”。
    1. 例如跟踪误差:
      平方能够避免正负误差相互抵消,还会更重地惩罚大误差。把多个误差、控制输入的平方加权相加,就很容易得到二次目标函数。
      再加上速度、输入等线性限制,问题就能写成QP。
  1. 常见的凸QP具有很好的求解性质。
    1. 当 H 半正定时,目标函数可以想象成一个向上开口的“碗”,配上线性约束,就得到凸QP。
      它的一个关键优点是:局部最优解也是全局最优解,不会出现找到一个小谷底,却错过另一个更低谷底的情况。若 H 正定且最优解存在,最优解还是唯一的。
      不过,并非所有QP都是凸的,还要看目标函数的曲率,也就是矩阵 H 的性质。
  1. 有成熟的求解算法,适合反复计算。
    1. 对MPC来说,优化通常需要每隔几十或几百毫秒重新进行一次。能够把问题写成有结构的凸QP,就可以利用专门算法加快计算。
      更复杂的非线性优化,也常采用“每次构造并求解一个近似QP”的方法,逐步改进结果。
放回你正在学的内容中,MPC是一种控制方法,QP是它每次可能需要求解的数学问题
所以,组会上说“这个问题能不能转成QP”,通常是在问:能不能把它整理成一种结构清楚、具有成熟求解方法的优化问题,从而更可靠、更高效地算出结果。

显示MPC Explicit MPC

显式MPC(Explicit MPC)的核心是:提前算好“不同状态下该怎样控制”,运行时根据当前状态选择公式,直接得到控制指令。
它仍然使用实时状态反馈,只是把大部分优化计算放到了运行之前。
  1. 从“现场解题”变成“提前推导好规则”。
    1. 普通MPC每次都要:
      显式MPC则先离线分析给定范围内的状态,划分区域,并为每个区域求出控制公式。运行时:
      这里不是逐个枚举无限多个状态,而是利用数学方法,求出对整片状态区域都适用的公式。这就是课件中的“多参数二次规划(mpQP)”。
  1. 用一个简单例子说明分区是怎样出现的。
    1. 问题是:
      其中,x 是已知参数,z 是需要选择的量
      目标 希望 z 尽量靠近零,但允许的范围随 x 改变。
      • 时,右边 ,因此可以直接选择最理想的 z=0。
      • 时,右边是负数,z=0 不满足约束。允许范围内最接近零的位置,就是边界 z=1+3x。
      所以提前就能写出:
      例如,测得 ,直接得到 ;测得 x=0,直接得到
      这就是“分段仿射”:不同区域使用不同的“系数乘状态,再加常数”的公式。 图中红线 是区域边界,实线是最优解,虚线是最小代价。
      notion image
      图中的KKT条件是推导最优解的数学条件。这里可以先抓住两种情况:约束允许取零,或者约束迫使最优解落在边界上。
  1. 为什么显式MPC不能普遍替代在线求解?
    1. 多维状态下,每个区域通常对应一个控制公式:
      彩色图展示的是状态空间的分区,每种颜色代表一套适用的控制规则。
      当状态维数、约束数量或预测长度增加时,区域数量可能迅速增长,带来两个问题:
      • 存储量大:需要保存许多区域边界和控制公式。
      • 查找耗时:运行时要判断当前状态究竟落在哪个区域。
      因此,显式MPC特别适合一些规模较小、要求快速响应、运行设备计算能力有限的控制问题;问题规模较大时,在线求解QP往往更实用。

线性时变模型预测控制LTV-MPC和非线性模型预测控制Nonlinear MPC

  • 为什么需要“线性时变模型”?(Linear Time-Varying MPC)
    • 前面使用的模型是:
      A、B固定,意味着一直使用同一套运动关系。但车辆在低速、高速、直行和转弯时,对控制指令的响应会有所不同。
      因此,可以采用:
      每一步允许使用不同的 ,以适应不同工况。这里 是一个已知的偏置项。
      每轮优化前先计算这些系数,求解时把它们视为已知量,模型对待优化变量仍然是线性的或仿射的。
  • 线性化,就是用局部简单关系近似复杂关系。
    • 例如,车辆模型中有:
      其中包含三角函数以及变量之间的乘积,因此是非线性的。
      线性化可以想象成:在曲线的某一点附近,用切线近似曲线。 选定一组已知状态和输入 ,就有:
      其中, 由偏导数构成,描述“状态或输入稍微变化时,系统变化速度会怎样改变”。
      整理后就是:
      notion image
      notion image
      图中的大矩阵,就是把车辆的四条运动方程分别这样处理,再合并起来。离展开点越远,这种近似通常越不准确。
  • 离散化,是把连续变化变成逐步预测。
    • 计算机按采样时刻运行,需要把 转成下一步状态。课件使用最简单的前向欧拉方法:
      因此:
      把这些系数分别记成 ,就得到前面的离散预测模型。其中 是采样周期,I 是单位矩阵。
      线性化处理“关系太复杂”,离散化处理“计算机如何一步一步预测”。
  • 目标仍然是跟踪准确、动作平滑,并满足限制。
    • 代价为:
      前两项要求车辆贴近目标位置,后两项避免突然改变加速度和方向盘转角。
      为了方便优化控制变化量,可以把上一时刻的输入也放进状态中
      这就是“增广模型”的基本意思:额外记住之前用了多大的控制量,方便计算这次应该调整多少。
      当预测模型已经线性化,代价是二次型,速度、加速度和转角限制也是线性的,就可以构成一个约束QP问题
  • 但应该在哪条轨迹附近线性化?
    • 要算最优轨迹,需要先线性化;但要线性化,又需要先有一条用来展开模型的轨迹。
      常见的处理方式是:
    • 根据参考轨迹选取展开点。
    • 把上一轮的最优预测轨迹向前移动,作为这一轮的初始猜测,也就是热启动。
    • 于是形成:
      实际实现中,可以根据计算时间预算决定是否继续重复这个过程。
  • 直接使用非线性模型,就是NMPC。
    • NMPC在原优化问题中保留非线性运动关系,通常形成非线性规划问题(NLP)
      方法
      模型处理方式
      主要计算特点
      LTV MPC
      使用随工况更新的局部线性近似
      配合二次代价和线性约束,可求解QP
      NMPC
      在原问题中保留非线性模型
      通常更难求解,可能存在多个局部最优解
      NMPC也可以在求解过程中使用QP。例如,序列二次规划(SQP)就是不断构造、求解近似QP,再更新结果,逐步逼近原非线性问题的解。

Tube MPC

Tube MPC(管束模型预测控制)的核心是:MPC规划一条理想轨迹,反馈控制器负责纠偏,让实际运动保持在理想轨迹周围的允许范围内。 规划时,还要为这些偏差预留余量。
  1. 为什么需要“管束”?
    1. notion image
      真实无人机会受到风、模型误差等影响,因此实际运动很难始终与预测完全一致。
      第图中:
      notion image
      • 红线:名义轨迹,即用不考虑扰动的模型规划出的轨迹。
      • 蓝线:真实系统的运动轨迹。
      • 灰色管道:围绕名义轨迹的允许误差范围。
      “保持在管内”表示误差受到控制。有持续扰动时,实际状态不一定与名义状态精确重合,但可以保持在一定范围内。
  1. MPC和反馈控制器怎样配合?
    1. 可以把控制指令理解为:
      • :MPC根据名义模型算出的计划动作。
      • :根据实际状态与名义状态的偏差,追加的纠偏动作。
      例如,无人机计划直线飞行,风把它吹向右侧,反馈控制器就增加向左的修正。
      Tube MPC还需要在规划时留出误差空间。 假设允许的横向位置是 [-1,1] 米,且能保证跟踪误差不超过 0.2 米,那么名义轨迹就应限制在:
      这样,即使出现允许范围内的偏差,实际位置仍能满足限制。这叫约束收紧
  1. 图的内外环和大矩阵是什么意思?
    1. notion image
      外环负责规划:优化器利用简单的名义模型,预测无人机的位置、速度和加速度,生成计划。
      内环负责跟踪:图中用PID控制器示意,根据真实系统的反馈调整动作,让无人机跟随计划,并抵抗扰动。
      左边采用的是“三阶积分模型”:
      其中 分别是位置、速度、加速度,j 是加速度的变化率,也叫 jerk
      这个矩阵表达的是:给定当前的位置、速度、加速度,以及接下来施加的 j,就能预测下一步的状态。 是采样周期。
图中的PID只是内环的一种示意。要严格保证实际状态始终留在管内,还需要根据扰动大小、反馈控制能力和约束余量设计管束;仅仅添加一个PID,并不能自动获得这种保证。

Hybrid MPC

Hybrid MPC(混合系统MPC)处理的是:系统既有连续变化的量,又有突然切换的模式。 控制器需要同时考虑“选哪种模式”和“控制量给多大”。
  1. 前两张:什么叫“混合”?
    1. 以汽车为例:
      • 连续量:速度、转矩、油门和刹车开度,可以取一定范围内的实数。
      • 离散模式:倒挡、空挡、1挡、2挡等,只能从有限选项中选择。
      不同挡位下,同样的油门可能产生不同的加速效果。因此,模式切换和连续运动相互影响,需要一起考虑。
      notion image
      图中的 0、1 用来表示开关或逻辑状态,多种模式也可以用多个二进制变量编码。这里“离散”指模式选择,与前面“每隔一段时间采样”是不同的概念。
  1. 怎样把“如果……那么……”交给优化器? 课件采用 MLD(混合逻辑动态)模型,把逻辑判断转换成包含连续变量和整数变量的不等式。
    1. notion image
      例如,小球有两种运动模式:
      第一种按重力改变速度;第二种让速度反向,并保留一部分速度幅值。
      引入一个模式变量:
      再看课件中的一条约束:
      • 时,两端都是零,强制得到自由落体公式。
      • 时,这条约束被放宽,同时由另一条约束强制执行反弹公式。
      M的作用是放松未被选中的那条规则。 它需要根据变量范围合理选择。
      这样,优化器就能用数学约束处理模式切换。课件的小球模型是简化示意,实际碰撞还需要处理触地瞬间等细节。
  1. 无人机吊绳也是一个混合系统。
    1. 吊绳有两种状态:
      • 绷紧:可以传递拉力。
      • 松弛:不传递拉力。
      课件用下面的关系表达:
      其中,T 是绳子拉力, 是两端距离, 是绳长。配合 ,它意味着:
      • 若有拉力 T>0,则必须有 ,绳子绷紧。
      • 若绳子松弛 ,则必须有
      这种关系称为互补关系。图中上方的向量方程则描述重物受力与加速度之间的关系。
联系前面学过的QP:如果目标仍是二次函数、约束经过整理是线性的,但又加入了 模式变量,问题通常就变成 MIQP(混合整数二次规划)。它需要同时选择模式和连续控制量,通常比普通凸QP更难求解。

模型预测轮廓控制

MPCC(模型预测轮廓控制)可以理解为:沿着给定路径运动,同时自己决定推进速度。 这几页进一步加入了安全飞行走廊,用于无人机快速飞行,称为 CMPCC。
  1. 关键变化:路径上的目标点也可以一起优化。
    1. 前面按时间跟踪轨迹时,参考点通常是预先指定的,例如“第2秒应该到达这里”。
      MPCC用参数 表示沿路径走到了哪里
      控制器同时决定无人机怎么运动,以及 应该推进多快。
      这里的 是路径进度,不是偏航角。 遇到急弯或扰动时,可以暂时放慢推进;路况允许时,再加快前进。
  1. 目标函数:既要贴近路径,又要向前推进。
    1. 课件中的代价可以简写为:
      第一项希望无人机靠近路径,第二项鼓励路径进度增加。其中:
      • :预测的无人机位置。
      • :路径参数 的变化率。
      • :决定多重视前进速度。
      因为目标是最小化代价,所以前进奖励前面加负号。 越大,这部分代价越小。
      图中的红色点是预测位置,蓝色点是路径上对应的参考点。优化器会同时调整这两组点的对应关系。
  1. 为什么状态和输入看起来很多?
    1. 状态主要分成两部分:
      • 无人机在 x、y、z 三个方向的位置、速度和加速度。
      • 路径进度 ,以及它的变化率
      输入中的 是三个方向的加速度变化率,即 jerk 用来调整虚拟路径进度的变化。
      这样,控制器既能规划无人机的运动,也能平滑地调整沿路径推进的节奏。若 不是按路径长度定义的, 就不能直接当作无人机的实际速度。
  1. 安全走廊负责限制“可以飞到哪里”。
    1. 表示预测位置必须位于允许的走廊内。可以把每一行不等式理解为一面边界,多个边界围成一个可飞行区域。
      同时还有限制速度、加速度、输入等的约束。预测末端的速度限制,则避免计划以过高速度结束,为后续制动或转弯留出余量。
      走廊来自环境中的可飞区域;前面Tube MPC的“管束”,描述的是实际状态相对名义轨迹的误差范围。
课件所说的QP求解,需要将路径等非线性关系作适当近似;“小于5毫秒”是该实现报告的计算表现。安全性和可行性的严格保证,也需要配合模型、跟踪误差裕量及终端条件来成立。
 
 

义父,请我喝杯蜜雪冰城吧。
notion image
notion image
 
上一篇
【学习笔记007】Fast-Planner
下一篇
【学习笔记005】基于优化的轨迹规划

评论
Loading...