【深蓝学院】移动机器人运动规划--第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.rhkb.cn/news/263153.html

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

相关文章

神经网络基础——激活函数的选择、参数初始化

一、神经网络 1、神经网络 人工神经网络(Artificial Neural Network,即ANN)也简称为神经网络(NN)是一种模仿生物神经网络结构 和功能的计算模型。 2、基本部分 输入层:输入 x 输出层:输出 y 隐…

华清远见作业第四十二天——Qt(第四天)

思维导图&#xff1a; 编程&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTextToSpeech> //语音播报类 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public Q…

Rust核心:【所有权】相关知识点

rust在内存资源管理上采用了&#xff08;先进优秀&#xff1f;算吗&#xff09;但特立独行的设计思路&#xff1a;所有权。这是rust的核心&#xff0c;贯穿在整个rust语言的方方面面&#xff0c;并以此为基点来重新思考和重构软件开发体系。 涉及到的概念点&#xff1a;借用&am…

基于协同过滤算法的体育商品推荐系统

摘要 本文深入探讨了基于协同过滤算法的体育商品推荐系统的构建方法及其在电子商务中的重要性。首先&#xff0c;介绍了协同过滤算法的基本原理&#xff0c;包括用户-商品矩阵、相似度度量和推荐生成。其次&#xff0c;探讨了协同过滤算法在体育商品推荐中的两种主要应用方式&a…

【Java程序设计】【C00276】基于Springboot的就业信息管理系统(有论文)

基于Springboot的就业信息管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的就业信息管理系统 本系统分为前台功能模块、管理员功能模块、学生功能模块、企业功能模块以及导师功能模块。 前台功能模块&…

C语言-指针详解速成

1.指针是什么 C语言指针是一种特殊的变量&#xff0c;用于存储内存地址。它可以指向其他变量或者其他数据结构&#xff0c;通过指针可以直接访问或修改存储在指定地址的值。指针可以帮助我们在程序中动态地分配和释放内存&#xff0c;以及进行复杂的数据操作。在C语言中&#…

【尚硅谷】MybatisPlus 学习笔记(下)

目录 六、插件 6.1、分页插件 6.1.1、添加配置类 6.1.2、测试 6.2、xml自定义分页 6.2.1、UserMapper中定义接口方法 6.2.2、UserMapper.xml中编写SQL 6.2.3、测试 6.3、乐观锁 6.3.1、场景 6.3.2、乐观锁与悲观锁 6.3.3、模拟修改冲突 数据库中增加商品表 添加数…

❤ hexo主题+Gitee搭建个人博客

Hexo的基本使用 1. ​认识 官网 官网地址&#xff1a;https://hexo.io/zh-cn/ 介绍 Hexo是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他渲染引擎&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。即把用…

Ansible 更换aliyun 镜像 并下载tree

目录 查看系统版本找到对应 的版本对当前镜像进行备份下载aliyuan更换成功安装扩展源更换源之后 的三个命令 这里安装一个aliyun 的镜像 本案例 仅供实验参考 生产环境中请谨慎使用 查看系统版本 先查看linux 的系统 版本 ansible slave -m shell -a uname -a找到对应 的版本…

基于Mapbox展示GDAL处理的3D行政区划展示实践

目录 前言 一、Gdal数据处理 1、数据展示 2、Java数据转换 二、Mapbox可视化 1、定义Mapbox地图 2、地图初始化 3、创建地图 三、界面优化 1、区域颜色设置 2、高度自适应和边界区分 3、中文标注 总结 前言 最近有遇到一个需求&#xff0c;用户想在地图上把行政区划…

Android相机调用-libusbCamera【外接摄像头】【USB摄像头】 【多摄像头预览】

有的自定义系统&#xff0c;对于自己外接的USB摄像头&#xff0c;android原生的camera和camera2都无法打开&#xff0c;CameraX也用不了。这时候就要用libusbCamera&#xff0c;这个库可以打开摄像头&#xff0c;还可以多摄像头同时预览。本文主要是同时打开3个USB摄像头的项目…

《Docker 简易速速上手小册》第2章 容器和镜像(2024 最新版)

文章目录 2.1 理解 Docker 容器2.1.1 重点基础知识2.1.2 重点案例&#xff1a;使用 Docker 运行 Python 应用2.1.3 拓展案例 1&#xff1a;Docker 中的 Flask 应用2.1.4 拓展案例 2&#xff1a;Docker 容器中的数据分析 2.2 创建与管理 Docker 镜像2.2.1 重点基础知识2.2.2 重点…

异步框架Celery在Django中的运用

参考博客&#xff1a;https://www.cnblogs.com/pyedu/p/12461819.html 参考视频&#xff1a;01 celery的工作机制_哔哩哔哩_bilibili 定义&#xff1a;简单灵活、处理大量消息的分布式系统&#xff0c;专注于实时处理异步队列&#xff0c;支持任务调度 主要架构&#xff1a; …

5分钟JavaScript快速入门

目录 一.JavaScript基础语法 二.JavaScript的引入方式 三.JavaScript中的数组 四.BOM对象集合 五.DOM对象集合 六.事件监听 使用addEventListener()方法添加事件监听器 使用onX属性直接指定事件处理函数 使用removeEventListener()方法移除事件监听器 一.JavaScript基础…

Linux日志轮替

文章目录 1. 基本介绍2. 日志轮替文件命名3. logrotate 配置文件4. 把自己的日志加入日志轮替5. 日志轮替机制原理6. 查看内存日志 1. 基本介绍 日志轮替就是把旧的日志文件移动并改名&#xff0c;同时建立新的空日志文件&#xff0c;当旧日志文件超出保存的范围之后&#xff…

Git基本指令

从远程拉代码 git clone gitgitlab-internal.wedobest.com.cn:dengyanhui/gittest.git添加所有文件到待上传列表 git add .提交 git commit -m message推送 git push获取现在的状态 git status更新本地代码 git pullgit拉取某一分支代码 git clone -b develop XXX本地删除…

开源博客项目Blog .NET Core源码学习(9:Autofac使用浅析)

开源博客项目Blog使用Autofac注册并管理组件和服务&#xff0c;Autofac是面向.net 的开源IOC容器&#xff0c;支持通过接口、实例、程序集等方式注册组件和服务&#xff0c;同时支持属性注入、方法注入等注入方式。本文学习并记录Blog项目中Autofac的使用方式。   整个Blog解…

视频推拉流EasyDSS视频直播点播平台授权出现激活码无效并报错400是什么原因?

视频推拉流EasyDSS视频直播点播平台集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景上&#xff0c;平台可以运用在互联网教育、在线课堂、游戏…

CSS学习(三)

目录&#xff1a; 1. CSS引入方式 1.1 三种样式表 1.2 内部样式表&#xff08;嵌入式引入&#xff09; 1.3 行内样式表&#xff08;内联样式表&#xff09; 1.4 外部样式表 1.5 总结 1. CSS引入方式 1.1 三种样式表 1.2 内部样式表&#xff08;嵌入式引入&#xff09; …

7.(数据结构)堆

7.1 相关概念 堆&#xff08;Heap&#xff09;在计算机科学中是一种特殊的数据结构&#xff0c;它通常被实现为一个可以看作完全二叉树的数组对象。以下是一些关于堆的基本概念&#xff1a; 数据结构&#xff1a; 堆是一个优先队列的抽象数据类型实现&#xff0c;通过完全二叉树…