【深蓝学院】移动机器人运动规划--第6章 模型预测控制(MPC)与运动规划--笔记

0. Outline

在这里插入图片描述

1. Reactive Control(反应式控制)

控制学中的 “Reactive Control” 通常指的是一种控制策略,它依赖于系统对特定事件或变化的即时反应,而不是按照预定的计划或策略行动。这种控制往往是基于当前的传感器输入来做出决策,而不是提前编程的指令。

与 “Reactive Control” 相对的是 “Proactive Control” 或者 “Feedforward Control”,后者是基于对系统将要发生的变化的预测和规划的控制方法。

如果我们提到 “Feedback Control”(反馈控制),则指的是系统输出会被反馈并与期望的参考值相比较,然后根据这种比较的结果来调整输入,以减少输出和参考值之间的误差。反馈控制是一种常见的控制机制,可以是连续的也可以是离散的,用于保证系统的稳定性和性能。

因此,尽管 “Reactive Control” 可以涵盖反馈机制作为对即时变化的响应,但它并不完全等同于 “Feedback Control”。反馈控制更侧重于基于输出和目标之间的比较来调整输入的过程。


在这里插入图片描述
ref[1],理想情况下,Multicopters的控制是由生成的traj
traj的生成,如果基于flat output,得到flat otput z ∗ ( t ) z^*(t) z(t)后,通过flatness transformation得到 x ∗ ( t ) = { p , v , R , ω } , u ∗ ( t ) = { f ( 推力 ) , τ ( 扭矩 ) } x^*(t)=\{p,v,R,\omega\},u^*(t)=\{f(推力),\tau(扭矩)\} x(t)={p,v,R,ω},u(t)={f(推力),τ(扭矩)}

理想情况下,Multicopters会沿着规划出的轨迹进行飞行,根据z轴desire和world z解算出tilt,而tilt和yaw可以计算出R,可算出具体推力,再使用动力学方程 p = p 0 + v 0 t + 1 2 a t 2 p=p_0+v_0t+\frac{1}{2}at^2 p=p0+v0t+21at2等计算出Multicopters pose。

但实际情况是会受到风阻,油门曲线误差等因素的影响,实际运动时实际 p , v p,v pv与理想 p , v p,v pv会存在误差,Reactive Control在计算预期推力 F d e s F_{des} Fdes会考虑 p , v p,v p,v误差,引入比例因子(类似于PID中的P)。

在这里插入图片描述
pros & cons

pros:易实现,考虑了实际误差。

cons:

  1. 复杂的系统求解需要考虑更多,Reactive Control可能不够。
  2. 调参麻烦
  3. 无法解决具有耦合关系的动态性和约束。
  4. 无法使用未来时刻的信息做出决策(如看到红灯提前减速)

2. Optimal Control(最优控制)

在这里插入图片描述
根据几何约束和动力学构建出自行车的动力学模型,汽车和自行车的模型具有相似性,只是自行车为2个轮子,汽车4个。

由初始时刻状态和输入量即可算出末端状态。

还有其他类型的自行车模型,此处仅介绍最简单的一种建模形式。

在这里插入图片描述
以跟随车道线为目标,建立目标函数:
分为两部分:stage cost + terminal cost
两部分形式可以相同也可以不同
stage cost中 e k e_k ek是偏离车道线的误差,加上平滑项,不希望频繁打杆,使控制更加顺滑。
terminal cost这里与stage cost形式类似,权重不同,如果增大terminal cost权重,就更希望车最终到达设定的末状态。

在这里插入图片描述
考虑等式约束(边界条件等)和不等式约束(控制限制等),避障(矩障碍物圆心距离大于障碍物半径)

在这里插入图片描述
最优控制流程。

在这里插入图片描述
开环最优控制存在的问题:

  1. 模型不准确,不适配,误差会累积。
  2. z ∗ ( t ) z^*(t) z(t)无法准确被执行,即执行误差。
  3. 长时间控制问题使问题不可解。
  4. 外部扰动会对系统控制产生影响。

简单理解:reactive control能使用误差信息,但无法处理具有耦合关系的约束等,optimal control处理了约束问题,但无法解决长时间控制问题,且没考虑扰动问题。

MPC结合了reactive control和optimal control的优点。

3. Model Predictive Control (MPC)

3.1 Preliminaries

在这里插入图片描述
ref[2]。

MPC只预测一小段的轨迹,然后只执行一部分,然后根据measurements继续执行预测,控制,测量的循环。

在这里插入图片描述
MPC Formulation,cost function和最优控制类似。

在这里插入图片描述

别名:
Open Loop Optimal Feedback 开环最优反馈
Reactive Scheduling 响应式调度
Receding Horizon Control 滚动时域控制,滚动优化控制。

  1. 考虑未来的信息(相对optimal control而言)
  2. 补偿误差,
  3. 减小问题的规模(每次只求解一小段问题,warm-start 即t和t+1时刻MPC求解只相差了一个time step,t时刻解可作为t+1时刻求解的初值,加快收敛)。

在这里插入图片描述
MPC源自业界,后来才在学界有了理论研究,学习MPC要持有学以致用的心态。

在这里插入图片描述
两个MPC的应用:
ref[3] 四旋翼坏掉一个桨的MPC控制悬停及降落。
ref[4] 轮腿式机器人的步态生成。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MPC的设计:

  1. 预测模型的选择:是求解精读和复杂性的trade-off,ref [5,6](大部分自动驾驶,工业AGV使用左边模型就足够)。
  2. MPC cost funtion设计:不同要求会有不同的参数设计
  3. 预测时长PH:最优控制的预测时长是整段轨迹时长,而MPC只针对一小段轨迹。recursive feasiability:虽然只优化一小段,但是保证问题一定有解,常见实现方法是给PH终点的末状态增加约束。(在ref[8]中有所提及)

3.2 Linear MPC

3.2.1 Unconstrained Case

先讲解简单的无约束MPC:
在这里插入图片描述
线性MPC假设系统模型是线性的,即系统的未来状态可以用当前状态和控制输入的线性函数来表示。由于线性模型的预测较为简单且计算量较小,线性MPC在工业和工程应用中非常流行。

x k x_k xk是系统状态, y k y_k yk是系统输出,一般是系统状态的一部分或者线性组合。

在这里插入图片描述
线性系统cost funtion为二次costs,系数矩阵 P , Q , R P,Q,R P,Q,R均为正定,保证问题有解。

costs可能也是stage cost + terminal cost

在这里插入图片描述

把目标函数中系统未来N个时刻的状态组成的向量 z z z 表示成关于未来的控制输入和初始状态 x 0 x_0 x0 的形式,带入原cost function可进一步整理。

在这里插入图片描述
ref[7]

对整理过后的cost funtion进行优化,简单的思路是求导等于0,解出最优解 z ∗ = − H − 1 F T x 0 z^*=-H^{-1}F^Tx_0 z=H1FTx0,发现线性系统最优解竟然与初始状态 x 0 x_0 x0呈线性关系,所以无约束的线性MPC又称为线性状态反馈,最优解又称为batch solution。

这种linear MPC的推导(把系统状态 x x x和输入 u u u分开写)又叫做condense MPC,如果把 x , u x,u x,u放在一起表示,则可以推导出非稠密的MPC(Non-condensed MPC),ref[7]:
在这里插入图片描述

推导出来的系数矩阵是稀疏的,不过non-condenced MPC会引入额外的系统状态转移约束,在无约束linear MPC中一般不使用,在有约束的情况下可能比dense MPC求解更快。

在这里插入图片描述

condensed-MPC的batch solution存在解析解,但需要对大矩阵 H H H求逆,时间复杂度 O ( n 3 ) O(n^3) O(n3),需要考虑更快的求解方法,引出了接下来要讲的LQR方法。

3.2.2 LQR线性二次调节器(控制器)

在这里插入图片描述
使用了问题的序列化结构。

首先介绍贝尔曼法则Bellman princlple
如果一个问题可分为很多步来实现,该问题的最优解中,那么整个问题在某个状态之后的最优解部分,仍然是剩余的子问题的最优解。

如MPC中整个问题最优解 z ∗ z^* z x ∗ = ( x 0 ∗ , x 1 ∗ , ⋯ x k ∗ , ⋯ , x N ∗ ) x^*=(x_0^*,x_1^*,\cdots x_k^*,\cdots,x_N^*) x=(x0,x1,xk,,xN) u ∗ = ( u 0 ∗ , u 1 ∗ , ⋯ , u k ∗ , ⋯ , u N − 1 ∗ ) u^*=(u_0^*,u_1^*,\cdots,u_k^*,\cdots,u_{N-1}^*) u=(u0,u1,,uk,,uN1)
那么在 x k x_k xk时,有子问题“从 x k x_k xk x N x_N xN的最优解”,该子问题的最优解与 z ∗ z^* z中对应的部分相同,即 x ∗ = ( x k ∗ , ⋯ , x N ∗ ) x^*=(x_k^*,\cdots,x_N^*) x=(xk,,xN) u ∗ = ( u k ∗ , ⋯ , u N − 1 ∗ ) u^*=(u_k^*,\cdots,u_{N-1}^*) u=(uk,,uN1)

在这里插入图片描述
求出的 u N − 1 u_{N-1} uN1仍然只和 x N − 1 x_{N-1} xN1有关。

在这里插入图片描述
最终可推导出代数Riccati方程。
在这里插入图片描述
LQR小结:

  1. LQR比batch solution计算效率高,为线性复杂度。
  2. MPC可以施加约束,而LQR无法施加。
  3. MPC通常用于有限的PH,而LQR的PH趋于无穷。
  4. MPC更通用,LQR只能用于目标函数为二次型的cost funtion。

在这里插入图片描述
考虑系统延迟,未来的状态至于现在状态和过去输入有关,与当前输入无关,考虑延迟不仅仅适用于linear MPC,也适用于其他MPC,这里提一下,仅做了解。

在这里插入图片描述

目标函数式二次型,且约束为线性约束的问题称为二次规划问题QP(可回顾上一章博客3.4.1节对凸优化问题的介绍),上图给出了一些常用的QP求解器。

3.3 Other MPC methods

3.3.1 Explict MPC显式MPC(多用于有约束线性MPC)

在这里插入图片描述

无约束的MPC可以推出闭式解batch solution,而有约束的MPC无法推出,只能使用QP求解器进行在线求解。

显式MPC思想:按照初始状态落在不同的区间内提前算好闭式解,使用时查表。

在这里插入图片描述
对于优化问题,如果是等式约束,可以使用Lagrange乘子法求解,对于不等式约束求极值,使用KKT条件求解。


KKT(Karush-Kuhn-Tucker)条件是数学优化领域的一组非常重要的条件,主要用于非线性规划问题的最优解判定。KKT条件是对线性规划中的单纯形方法和对偶理论在非线性情况下的推广。

在一个有约束的优化问题中,如果目标函数和不等式约束是连续可微的,那么在某些正则性条件下,任何局部最优解都必须满足KKT条件。这些条件包括:

  1. 梯度条件:目标函数的梯度必须可以表示为各个约束函数梯度的线性组合。
  2. 原始可行条件:解必须满足问题中所有的约束。
  3. 对偶可行条件:涉及拉格朗日乘子的不等式必须非负。
  4. 互补松弛条件:拉格朗日乘子与相应的不等式约束的乘积应该为零。

这些条件在求解实际问题时非常有用,特别是在工程设计、经济学和运筹学中。对于某些优化问题,只要找到满足KKT条件的点,就能确定它是问题的局部最优解,有时甚至是全局最优解。KKT条件是非线性规划领域的基石之一,对于理论研究和实际应用都有极其重要的意义。


GPT4分析:

对于给出的优化问题,我们有目标函数 ( J ( z , x ) = 1 2 z 2 J(z, x) = \frac{1}{2} z^2 J(z,x)=21z2) 和约束条件 ( z ≤ 1 + 3 x z \leq 1 + 3x z1+3x)。要列出这个问题的KKT条件,我们首先需要构造拉格朗日函数 ( L ( z , x , λ ) L(z, x, \lambda) L(z,x,λ)),其中 ( λ \lambda λ) 是拉格朗日乘子。

拉格朗日函数为:
L ( z , x , λ ) = J ( z , x ) + λ ( 1 + 3 x − z ) L(z, x, \lambda) = J(z, x) + \lambda (1 + 3x - z) L(z,x,λ)=J(z,x)+λ(1+3xz) L ( z , x , λ ) = 1 2 z 2 + λ ( 1 + 3 x − z ) L(z, x, \lambda) = \frac{1}{2} z^2 + \lambda (1 + 3x - z) L(z,x,λ)=21z2+λ(1+3xz)

接下来我们根据KKT条件列出:

  1. 梯度条件(stationarity): 解必须使拉格朗日函数的梯度为零。对 ( z z z) 和 ( λ \lambda λ) 分别求偏导,我们得到:
    ∂ L ∂ z = z − λ = 0 \frac{\partial L}{\partial z} = z - \lambda = 0 zL=zλ=0 ∂ L ∂ λ = 1 + 3 x − z = 0 \frac{\partial L}{\partial \lambda} = 1 + 3x - z = 0 λL=1+3xz=0
  2. 原始可行性(primal feasibility): 解必须满足原始问题的约束。
    z − ( 1 + 3 x ) ≤ 0 z - (1 + 3x) \leq 0 z(1+3x)0
  3. 对偶可行性(dual feasibility): 拉格朗日乘子对于不等式约束必须非负。
    λ ≥ 0 \lambda \geq 0 λ0
  4. 互补松弛性(complementary slackness): 对于每个乘子和对应约束的乘积为零。
    λ ( z − ( 1 + 3 x ) ) = 0 \lambda (z - (1 + 3x)) = 0 λ(z(1+3x))=0

将第一个梯度条件 ( z − λ = 0 z - \lambda = 0 zλ=0) 代入互补松弛性的条件,我们得到:
λ ( z − ( 1 + 3 x ) ) = λ z − λ ( 1 + 3 x ) = 0 \lambda (z - (1 + 3x)) = \lambda z - \lambda (1 + 3x) = 0 λ(z(1+3x))=λzλ(1+3x)=0
由于 ( z = λ z = \lambda z=λ),这可以简化为:
λ 2 − λ ( 1 + 3 x ) = 0 \lambda^2 - \lambda (1 + 3x) = 0 λ2λ(1+3x)=0 λ ( λ − ( 1 + 3 x ) ) = 0 \lambda (\lambda - (1 + 3x)) = 0 λ(λ(1+3x))=0

这意味着要么 ( λ = 0 \lambda = 0 λ=0),要么 ( λ = 1 + 3 x \lambda = 1 + 3x λ=1+3x)。根据对偶可行性的规则,我们知道 ( λ \lambda λ) 必须非负,因此
( λ = 0 \lambda = 0 λ=0) 或者 ( λ \lambda λ) 是一个非负值。

  1. λ = 0 \lambda=0 λ=0时,z=0
  2. λ > 0 \lambda>0 λ>0时, z = 3 x + 1 > 0 z=3x+1>0 z=3x+1>0

即可得出上图中满足约束时的J的曲线。

可以证明,对于一个严格凸的QP,其多参数优化的解是连续分段线性的。


在这里插入图片描述
Explicit MPC根据状态的区间个数来计算最优解,但问题是区间的个数与有效约束的个数呈指数级增长,存储和查找区间的代价非常高昂。所以Explicit MPC多用于自动化控制,而在Robotics领域很少使用。

3.3.2 Linear Time-Varying MPC and Nonlinear MPC(线性时变MPC和非线性MPC)

3.3.2.1 Linear Time-Varying MPC

在这里插入图片描述
线性时变模型:典型的线性时变系统是火箭动力,随着火箭的上升,消耗的燃料增加,质量减少,系统方程随着时间发生改变。

非线性模型:系统方程无法线性表示。处理方法一般是对非线性模型进行线性化(如一阶Taylor展开,然后对线性化的模型进行处理),由于线性化点不同,不同时刻的系统方程也不同,所以也是时变系统。

在这里插入图片描述
线性化之后进行离散化,得到离散的线性化MPC模型,从而在线求解。

在这里插入图片描述
图为自行车模型,通过状态转移方程可知系统为非线性时变系统。
在这里插入图片描述
上述推导,使用了一阶泰勒展开,以 p x ˙ \dot{p_x} px˙为例,简要推导。
Taylor公式,展开点为 x 0 x_0 x0
f ( x ) = f ( x 0 ) + f ( 1 ) ( x 0 ) 1 ! ( x − x 0 ) + f ( 2 ) ( x 0 ) 2 ! ( x − x 0 ) 2 ⋯ f(x)=f(x_0)+\frac{f^{(1)}(x_0)}{1!}(x-x_0)+\frac{f^{(2)}(x_0)}{2!}(x-x_0)^2\cdots f(x)=f(x0)+1!f(1)(x0)(xx0)+2!f(2)(x0)(xx0)2

取第一阶导进行线性化,忽略高阶导,在 ( v ˉ , ϕ ˉ , δ ˉ ) (\bar{v},\bar{\phi},\bar{\delta}) (vˉ,ϕˉ,δˉ)处进行展开,则
p ( x ) ˙ = v ˉ c o s ( ϕ ˉ ) + ∂ ( p x ˙ ) ∂ v ( v − v ˉ ) + ∂ ( p x ˙ ) ∂ ϕ ( ϕ − ϕ ˉ ) = v ˉ c o s ( ϕ ˉ ) + c o s ( ϕ ˉ ) ( v − v ˉ ) − v ˉ s i n ( ϕ ˉ ) ( ϕ − ϕ ˉ ) = c o s ( ϕ ˉ ) v − v ˉ s i n ( ϕ ˉ ) ( ϕ − ϕ ˉ ) \begin{align*} \dot{p(x)} &=\bar{v}cos(\bar{\phi})+\frac{\partial(\dot{p_x})}{\partial v}(v-\bar{v})+ \frac{\partial(\dot{p_x})}{\partial \phi}(\phi-\bar{\phi}) \notag \\ &=\bar{v}cos(\bar{\phi})+cos(\bar{\phi})(v-\bar{v})-\bar{v}sin(\bar{\phi})(\phi-\bar{\phi})\\ &=cos(\bar{\phi})v-\bar{v}sin(\bar{\phi})(\phi-\bar{\phi}) \end{align*} p(x)˙=vˉcos(ϕˉ)+v(px˙)(vvˉ)+ϕ(px˙)(ϕϕˉ)=vˉcos(ϕˉ)+cos(ϕˉ)(vvˉ)vˉsin(ϕˉ)(ϕϕˉ)=cos(ϕˉ)vvˉsin(ϕˉ)(ϕϕˉ)但是在对 p x ˙ \dot{p_x} px˙进行整理时,我的结果为
p x ˙ = [ 0 0 c o s ( ϕ ˉ ) − v ˉ s i n ( ϕ ˉ ) ] [ p x p y v ϕ ] + [ 0 0 ] [ a δ ] + [ v ˉ ϕ ˉ s i n ( ϕ ˉ ) ] \dot{p_x}= \begin{bmatrix} 0 &0&cos(\bar{\phi})&-\bar{v}sin(\bar{\phi}) \end{bmatrix} \begin{bmatrix} p_x\\p_y\\v\\ \phi \end{bmatrix} + \begin{bmatrix} 0&0 \end{bmatrix} \begin{bmatrix} a\\\delta \end{bmatrix} + \begin{bmatrix} \bar{v}\bar{\phi}sin(\bar{\phi}) \end{bmatrix} px˙=[00cos(ϕˉ)vˉsin(ϕˉ)] pxpyvϕ +[00][aδ]+[vˉϕˉsin(ϕˉ)]
与课程所给的结果有出入,但是整体推导思路应该没错。

在这里插入图片描述
线性化之后,进行离散化。

在这里插入图片描述
回到问题的cost function,由两部分组成:最小化轨迹跟踪误差;对轨迹进行smooth,使变化率不会太大。

有一个模型的技巧,称为Augmented model,把系统的新的状态量 x k + 1 x_{k+1} xk+1和输入 u k + 1 u_{k+1} uk+1当做新状态,把输入量的增量 Δ u k \Delta {u_k} Δuk当做新的输入(有点类似增量式PID的思想,控制比例,积分,微分的增量,而不是绝对量。)

最后,读输入和状态进行约束,交给求解器求解。

在这里插入图片描述
这里比较重要的一点是线性化点如何给定,如果知道了线性化点,那就没有必要进行求解了,输入先有鸡还是先有蛋的问题(The chicken or the egg)

给线性化点有一些工程上的策略:

  1. 根据参考轨迹给出。
  2. warm-start:使用 k − 1 k-1 k1时刻的解( u k − 1 ∗ , x k − 1 ∗ u_{k-1}^*,x_{k-1}^* uk1,xk1)来作为 k k k时刻线性化的点(会不会出现SLAM中的线性化点不同而导致的解零空间的退化问题,那里是因为Jacobian的线性化点不同会导致Jacobian在被marg掉的点处不再发生变化,导致information matrix中多加了信息,有可能改变解的零空间。有类似于EFJ算法来解决这个问题。)
3.3.2.2 Nonlinear MPC

在这里插入图片描述
非线性可以由cost funtion、系统方程、约束带来。

前面讲解了对非线性优化问题进行线性化、离散化求解,也可以直接对非线性优化进行求解,即求解NLP,但是后者难度更大,因为QP问题是凸的,local munimum就是global minimum,而非凸NLP的local minimum不一定是global minimum。

一些NLP求解方法:

  1. SQP
  2. 内点法

求解非线性MPC(即NMPC)有FORCES Pro,可以基于MATLAB代码生成C代码。

3.3.3 Tube MPC(抗扰动)

在这里插入图片描述
非线性MPC难点:

  1. 系统辨识难(通常是对系统参数进行辨识)
  2. 迭代求解的可行性和稳定性无法保证(可能求着求着就无解了)

提出一种方法:Tube MPC。具体思路是:MPC+反应式控制器。MPC使用nominal model(名义模型,标称模型),后面接上一个反应式控制器,使得实际的状态收敛到MPC规划出的名义的管道内(nominal tube)。这里MPC实际上是一个规划器,后面的feedback controller才是控制器,一个辅助反馈控制器,其目的是保持实际状态在忽略干扰计算出的名义轨迹周围的一个不变的“管”内。

所以Tube MPC本身就具有一定的抗干扰能力,常用于鲁棒控制。

在这里插入图片描述

例子:名义模型使用了三积分模型(以jerk作为系统输入),feedback controller使用了PID控制器。
整个控制框架很像串级控制。内外环的反馈均使用了真实的系统测量。

3.3.4 Hybrid MPC(混合MPC)

在这里插入图片描述
主要指系统的状态和约束由“连续” 变为 “连续 + 逻辑”混合。
在这里插入图片描述
汽车就是连续+逻辑的混合系统。

在连续动态系统中混合着逻辑变量或约束的系统称为混合逻辑动态(MLD)系统
这里 y ≤ 0 y \leq 0 y0表示的是反弹的过程,实际 y y y不可能小于0,但用符号来代表不同的运动过程。
简言之, y > 0 y>0 y>0表示下落, y ≤ 0 y\leq 0 y0表示反弹,将这种逻辑约束用含有逻辑变量 δ \delta δ的不等式进行表示
在这里插入图片描述
速度转移方程可如下表示:
在这里插入图片描述

在这里插入图片描述
将逻辑约束转换为混合整数线性不等式,就能使用线性/非线性方法求解。

上图为一个无人机拉重物的例子,物体对无人机的拉力 T T T,在绳子紧绷时等于 m L a m_La mLa,松弛时 T = 0 T=0 T=0
T T T为无人机推力, q q q为无人机相对重物(load)方向, m L m_L mL为重物质量, p L ¨ \ddot{p_L} pL¨为重物位置的二阶导,即加速度, l l l为无人机距离重物距离, l 0 l_0 l0为绳长(假设身子为刚性,无形变)。

第二个式子表示当 l l l小于绳长时,拉力就为0。

3.3.5 MPCC(模型预测轮廓控制)

GPT4:
模型预测轮廓控制(Model Predictive Contouring Control,简称 MPCC)是一种先进的控制策略,它是模型预测控制(Model Predictive Control,MPC)的一个变体,专门用于控制系统在保持特定轨迹或轮廓精度方面的性能。

模型预测控制是一种基于模型的控制算法,能够考虑系统的未来行为,并在每一个控制步骤中解决一个优化问题,以确定当前的最优控制动作。MPC的这个特点使得它非常适合处理多变量系统、受约束的系统和非线性系统。

MPCC特别关注于在给定的轨迹或轮廓上实现高精度跟踪,这在很多工业应用中非常重要,比如机器人路径跟踪、CNC机床加工和汽车路径跟踪等。MPCC不仅考虑系统的动态和可能的约束,而且还将轨迹跟踪误差最小化作为关键的优化目标。它通常可以分为两个主要部分:轨迹规划和轨迹跟踪。

轨迹规划负责生成理想的、可执行的路径或轮廓,而轨迹跟踪则确保控制系统能够尽可能精确地跟随这个路径。MPCC通过在线优化实时控制输入,不仅可以减少轨迹偏差,还可以应对外部扰动,从而保证系统沿着预定轨迹高精度运行。

MPCC的实施通常需要强大的计算能力,因为它需要在实时或准实时条件下解决优化问题。随着计算技术的发展,MPCC已经成为许多高精度和高性能控制应用的首选方法。


在这里插入图片描述

把MPCC应用在无人机的抗扰动鲁棒飞行中(讲师工作ref[8])。
Contribution:

  1. 是精度和跟踪速度的trade-off
  2. 用末端轨迹速度约束来保证可行性(末端速度小于参考轨迹的速度)
  3. 使用tube MPC抗扰动
  4. 使用flight corridor保证飞行的安全性

任务是跟踪一个小球的轨迹。

在这里插入图片描述
把非时变MPC转化为线性时变MPC。

θ \theta θ表示跟踪的小球的位置,输入是无人机的jerk和小球的jerk

在这里插入图片描述
− q ⋅ v θ -q\cdot v_{\theta} qvθ项是最大化跟踪进度(不是很理解),
约束:
第一行:系统线性化,离散化
第二、三行:状态和输入的最值约束
第四行:安全约束,使用flight corridor,但由于优化过程中对处于两个flight corridor间的轨迹不知道属于哪个corridor,不知如何优化,处理方法是:做该点速度方向的法平面,与flight corridor相较,沿着速度方向向外拉,与flight corridor组成的平面就作为安全约束(不是很清楚,需要看论文)。

算法效果如下:
在这里插入图片描述
飞行过程中遭遇打击也能正常飞行。

在这里插入图片描述

在这里插入图片描述

4. Summary

在这里插入图片描述

  1. Reactive Control & Optimal Control
    reactive control能使用误差信息,但无法处理具有耦合关系的约束等,optimal control处理了约束问题,但无法解决长时间控制问题,且没考虑扰动问题。

  2. Model Predictive Control
    与最优控制不同,MPC只预测一小段的轨迹,然后只执行一部分,然后根据measurements继续执行预测,控制,测量的循环。
    MPC pros:1. 能够考虑未来的信息(相对最优控制而言),2. 补偿误差,3. 减小问题的规模。
    MPC design

    1. 预测模型的选择:是求解精读和复杂性的trade-off,ref [5,6]
    2. MPC cost funtion设计:不同要求会有不同的参数设计
    3. 预测时长PH:最优控制的预测时长是整段轨迹时长,而MPC只针对一小段轨迹。recursive feasiability:虽然只优化一小段,但是保证问题一定有解,常见实现方法是给PH终点的末状态增加约束。(在ref[8]中有所提及)
  3. Linear MPC (unconstrained and constrained case)

    • unconstrained case可以推导出closed-form solution:
      1. condensed batch solution,但是求逆较慢, O ( n 3 ) O(n^3) O(n3)
      2. non-condenced MPC,会引入新的约束,不常用。
    • LQR:鉴于condensed batch solution O ( n 3 ) O(n^3) O(n3)的复杂度,针对二次规划问题,提出LQR方法,使用Bellman princlple,最优解的对应部分仍然是子问题的最优解,从后往前一步步推导,直至推导完整个问题的最优解。但仅适用于cost function为二次型情况。

    有约束情况在explicit MPC开始考虑,使用KKT条件添加约束。

  4. MPC with delays
    考虑系统延迟,未来的状态至于现在状态和过去输入有关,与当前输入无关,考虑延迟不仅仅适用于linear MPC,也适用于其他MPC。

  5. Explicit MPC
    针对有约束MPC,无约束的MPC可以推出闭式解batch solution,而有约束的MPC无法推出。

    等式约束一般使用Langrange乘子法构建问题,不等式约束一般使用KKT条件构建问题。

    我们简述了KKT条件:1.梯度条件;2. 原始可行条件;3. 对偶可行条件;4.互补松弛条件。

    并在3.3.1节举例说明。

    对于Explicit MPC:

    1. 显式MPC思想:按照初始状态落在不同的区间内提前算好闭式解,使用时查表。
    2. 缺点:根据状态的区间个数来计算最优解,但问题是区间的个数与有效约束的个数呈指数级增长,存储和查找区间的代价非常高昂。故Explicit MPC仅常用于自动控制领域,robotics领域不常用。
  6. Linear Time-Varying MPC and Nonlinear MPC
    针对非线性系统,可对系统进行线性化近似(一阶泰勒展开),并离散化,转化为线性时变系统求解。

    关于线性化点的给定,给出两个策略:1. 根据参考轨迹给出。2. warm-start,使用 k − 1 k-1 k1时刻的解作为 k k k时刻的线性化点。

  7. Tube MPC
    非线性MPC难点:

    1. 系统辨识难(通常是对系统参数进行辨识)。
    2. 迭代求解的可行性和稳定性无法保证(可能求着求着就无解了)。

    提出 Tube MPC。具体思路是:MPC+反应式控制器。MPC使用nominal model(名义模型,标称模型),通常是做规划器,反应式控制器实施控制,使输出维持在nominal trajectory的tube内,提高预测控制稳定性。

  8. Hybrid MPC
    hybrid MPC对于逻辑量,将其处理为混合整数或互补约束。

  9. Model Predictive Contouring Control
    一种具体算法,用于轮廓控制,具体可参考ref[8],添加了末端速度约束以保证feasiability,使用Tube MPC增加了控制鲁棒性。

5. Assignment

在这里插入图片描述
给出一些拓展学习资料:
ref[9],youtube学习MPC的一个视频。

ref[10]一个MPC课程网站,IMT School for Advanced Studies Lucca(意大利卢卡高级研究学院)一位老师做的。

ref[2]一本讲预测控制的书,前几章包含一些优化的数学知识。

6. Reference

[1] Mellinger, Daniel, and Vijay Kumar. “Minimum snap trajectory generation and control for quadrotors.” 2011 IEEE international conference on robotics and automation. IEEE, 2011.

[2] Borrelli, Francesco, Alberto Bemporad, and Manfred Morari. Predictive control for linear and hybrid systems. Cambridge University Press, 2017.

[3] Nan, Fang, et al. “Nonlinear MPC for Quadrotor Fault-Tolerant Control.” arXiv preprint arXiv:2109.12886 (2021).

[4] Bjelonic, Marko, et al. “Whole-body mpc and online gait sequence generation for wheeled-legged robots.” 2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS). IEEE, 2020.

[5] Kong, Jason, et al. “Kinematic and dynamic vehicle models for autonomous driving control design.” 2015 IEEE intelligent vehicles symposium (IV). IEEE, 2015.

[6] Liniger, Alexander, Alexander Domahidi, and Manfred Morari. “Optimization-based autonomous racing of 1: 43 scale RC cars.” Optimal Control Applications and Methods 36.5 (2015): 628-647.

[7] Wang, Yang, and Stephen Boyd. “Fast model predictive control using online optimization.” IEEE Transactions on control systems technology 18.2 (2009): 267-278.

[8] Ji, Jialin, et al. “CMPCC: Corridor-based model predictive contouring control for aggressive drone flight.” International Symposium on Experimental Robotics. Springer, Cham, 2020.

[9] https://www.youtube.com/watch?v=XaD8Lngfkzk

[10] http://cse.lab.imtlucca.it/~bemporad/mpc_course.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac 上游玩QQ飞车详细教程,IPA砸壳包资源下载安装

最近经过一番折腾终于在 MAC 上成功安装运行了 QQ 飞车,上图: 最后总结下来安装过程其实蛮简单的,但其中有很多卡点和坑所以浪费了很多的时间,特意整理本篇教程供大家参考 大体思路是这样的,先安装 playCover,该软件可…

PostMan使用自带js库base64编码、sha256摘要、环境变量的使用

目录 1、环境变量的使用2、base64编码、sha256摘要、以及脚本的使用3、脚本代码 在请求调试接口的过程中,因为要使用大量相同的参数,使用变量的方式能很大程度上减轻接口调用的工作量 版本说明:Postman for Windows,Version&#…

【Python笔记-设计模式】桥接模式

一、说明 桥接模式是一种结构型设计模式, 主要用于将抽象部分与它的实现部分分离, 从而能在开发时分别使用,使系统更加灵活,易于扩展。 (一) 解决问题 所有 组合类的数量将以几何级数增长 抽象和实现分离:桥接模式可…

数据结构day4

实现创建单向循环链表、创建结点、判空、输出、头插、按位置插入、尾删、按位置删除 loop_list.c #include "loop_list.h" loop_p create_head() {loop_p L(loop_p)malloc(sizeof(loop_list));if(LNULL){printf("空间申请失败\n");return NULL;}L->le…

websocket了解下

websocket请求长啥样 GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ Sec-WebSocket-Version: 13 啥是websocket websocket是http的一种,服务器可以主动向客户端推送信息,…

进程 2月24日学习笔记

1.进程: 程序:存放在外存中的一段数据组成的文件 进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息(根据CPU占用率排序) PID:唯一识…

Linux---权限管理(ACL权限、特殊位和隐藏属性)

目录 1.ACT权限 1.1什么是ACT权限 1.2ACT图解 2.操作步骤 2.1添加测试目录、用户、组,并将用户添加到组 2.2修改目录的所有者和所属组 2.3设定权限 2.4为临时用户分配权限 2.4.1添加临时用户 2.4.2为临时用户分配特定权限 2.4.3查看目录权限,注…

NPM私服搭建(verdaccio)

官网地址:https://verdaccio.org/ 概述 Verdaccio 是一个流行的 Node.js 包管理器的代理工具,它允许您在本地或私有网络上轻松地创建和管理 npm 包仓库。通过 Verdaccio,开发团队可以建立自己的 npm 包仓库,以更好地控制和管理其依…

使用redisMQ-spring-boot-starter实现消息队列和延时队列

简介 redisMQ-spring-boot-starter是一个轻量级的、基于Redis实现的消息队列中间件,它有如下优点: 开箱即用,你几乎不用添加额外的配置支持消息队列、延时队列,并提供精细化配置参数提供消息确认机制支持虚拟空间,不…

C++ 学习之Map容器

C++ Map容器概念 C++的Map容器是一种关联容器,它提供了一种将键和值相关联的方式。它以键值对的形式存储数据,并根据键的顺序自动进行排序。 Map中的键是唯一的,而值可以重复。你可以使用键来访问对应的值,就像使用索引访问数组中的元素一样。 Map容器的特点如下: 按照…

一些可以参考的文档集合16

之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合3_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合4_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合5…

IDEA查询对应功能的快捷键

首先要知道快捷键的key叫什么,然后通过key来找到对应的快捷键 比如下面这个查找删除导入未使用的类 跳转 或者安装对应插件

可视化 RAG 数据 — 用于检索增强生成的 EDA

原文地址:Visualize your RAG Data — EDA for Retrieval-Augmented Generation 2024 年 2 月 8 日 Github:https://github.com/Renumics/rag-demo/blob/main/notebooks/visualize_rag_tutorial.ipynb 为探索Spotlight中的数据,我们使用Pa…

怎么在线生成动态gif?这个网站一定要知道

静态图片是指一张固定的、不具有动态效果的图片。它通常是由像素点组成的,可以是照片、插图、图标等。静态图片只能呈现一种特定的场景或图像,不能展示动态变化。动态图片(是由一系列静态图片组成的,通过快速连续播放这些画面&…

计算机网络-网络层,运输层,应用层

网络层/网际层 网络层的主要任务包括: 提供逻辑上的端到端通信:网络层负责确定数据的传输路径,使数据能够从源主机传输到目标主机,即实现端到端的通信。数据包的路由和转发:网络层根据目标主机的地址信息&#xff0c…

代码随想录刷题39,40天|62.不同路径

62.不同路径 想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]。 此时在回顾一下 dp[i - 1][j] 表示啥,是从(0, 0)的位置到(i - 1, j)有几条路径,dp[i][j - 1]同理。 那么很自然,dp[i][j] …

【MySQL】数据类型(常见类型)-- 详解

一、数据类型分类 二、数值类型 1、tinyint 类型 在 MySQL 中,整型可以指定是有符号的和无符号的,默认是有符号的。 有符号: 插入数据越界测试: 在 MySQL 表中建立属性列时,我们可以发现列名称在前,类型在…

深入探索pdfplumber:从PDF中提取信息到实际项目应用【第94篇—pdfplumbe】

深入探索pdfplumber:从PDF中提取信息到实际项目应用 在数据处理和信息提取的过程中,PDF文档是一种常见的格式。然而,要从PDF中提取信息并进行进一步的分析,我们需要使用适当的工具。本文将介绍如何使用Python库中的pdfplumber库来…

华为OD机试真题-虚拟游戏理财-2023年OD统一考试(C卷)---Python3--开源

题目: 考察内容: for if max 代码: """ 题目分析:投资额*回报率投资回报 要在可接受范围内选择最优的投资方式获得最大回报最多投资2个理财产品输入: 产品数int; 总投资额int; 总风险int 产品投资…

C++入门学习(三十七)函数分文件编写【DEV】

创建.h后级名的头文件创建.cpp后缀名的源文件在头文件中写函数的声明在源文件中写函数的定义 一、选择文件、新建、项目 二、 选择Empty Project 三、 新建源文件New File 四、贴代码 test.cpp #include <iostream> #include "add.h" using namespace std;i…