imtoken苹果版钱包下载|mpc
如何简单易懂的讲解MPC控制(模型预测控制)原理? - 知乎
如何简单易懂的讲解MPC控制(模型预测控制)原理? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册自动控制预测模型MPC控制模型预测控制如何简单易懂的讲解MPC控制(模型预测控制)原理?如何以人话的方式向1基础的群众讲解mpc控制的原理和mpc的试用范围?显示全部 关注者55被浏览52,084关注问题写回答邀请回答好问题 3添加评论分享8 个回答默认排序无忌不悔华中科技大学 机械工程硕士 关注看目录就能知道这篇回答很靠谱。之前的MPC方法说的都没错,但是执行起来看着就很复杂。实际上,这种复杂来自于对非独立变量的省略(MPC问题中,独立变量只有控制输入),但是如果允许非独立变量的存在,设计过程将会被非常简明。或者这里缺一块那里缺一块,原因就在于不够系统,没有整理好发现问题解决问题的步骤。如果看这篇文章还有疑问的话,请再评论留言,我找找看那里还有逻辑不太清楚的地方一起更新上来。第一部分有个简单的demo,用到了这个matlab工具箱,非常简明。对于优化问题,有一些标准的描述方法,可以明确的指代优化问题、指明优化问题的决策变量、优化结果等,可以让大家描述和理解优化问题更加清晰,参考MPC问题,稳定性取决于目标函数设计,而稳定性的基础是递归稳定性,递归稳定性的基础是约束的合理性。无约束MPC对于MPC问题,我们假设我们知道系统的模型, A矩阵和B矩阵是知道的。同时,我们希望优化一个目标,一般来讲,这个目标受到LQR控制的思想的启发,在时刻t,优化目标的形式为这里的Q和R为设计指标参数,是已知的。时刻t时的状态也是已知的,记为xt定义为A = [0.5 0.2; -0.1 0.6];
B = [0; 0.5];
Q = [1 0; 0 1;];
R = 1;
xt = [1;1];归零问题由于我们无法处理无限长的优化问题,在MPC中我们取预测长度为N,于是优化目标简化为但是未来的状态和输入我们都是不知道的,只能给出一个预测值,于是优化目标取为这里,x(t+k|t),u(t+k|t)的意思是,在t时刻,对t+k时刻状态和输入的预测。这个代价函数更多的被写为这里,x(k|t),u(k|t)的意思是,在t时刻,对t+k时刻状态和输入的预测。对于未来时刻状态和输入的预测满足如下关系于是优化问题被写为其中这里,虽然x(k|t),u(k|t)本身可能就是向量,但是仍然用的标准体,而x,u是将x(k|t),u(k|t)组合起来,用的粗体。这个问题中,决策变量非常明确,用YALMIP优化工具箱定义出来。这里的xbar{i}就是上面的x(i-1|t)N = 5;
for i = 1:N+1
xbar{i} = sdpvar(2,1);
ubar{i} = sdpvar(1,1);
end优化目标为Objective = 0;
for i = 1:N+1
Objective = Objective + xbar{i}'*Q*xbar{i} + ubar{i}'*R*ubar{i};
end约束为constraints = [];
constraints = [constraints, xbar{1}=xt];
for i = 1:N
constraints = [constraints, xbar{i+1} = A*xbar{i} + B*ubar{i}];
end设置求解模型,运行求解,查看输入uoptions = sdpsettings('verbose',1,'solver','quadprog', ...
'quadprog.maxiter',10000,'quadprog.Display','off', ...
'verbose',0);
sol = optimize(constraints,Objective,options);
u = value(ubar{1})将这个过程连续运行,获得轨迹
A = [0.5 0.2; -0.1 0.6];
B = [0; 0.5];
Q = [1 0; 0 1;];
R = 1;
xt = [1;1];
N = 5;
for i = 1:N+1
xbar{i} = sdpvar(2,1);
ubar{i} = sdpvar(1,1);
end
Objective = 0;
for i = 1:N+1
Objective = Objective + xbar{i}'*Q*xbar{i} + ubar{i}'*R*ubar{i};
end
constraints_dynamics = [];
for i = 1:N
constraints_dynamics = [constraints_dynamics, xbar{i+1} == A*xbar{i} + B*ubar{i}];
end
options = sdpsettings('verbose',1,'solver','quadprog', ...
'quadprog.maxiter',10000,'quadprog.Display','off', ...
'verbose',0);
xBuf = [];
for i = 1:50
constraints_init = [xbar{1} == xt];
constraints = [constraints_init, constraints_dynamics];
sol = optimize(constraints,Objective,options);
u = value(ubar{1});
xBuf = [xBuf xt];
xt = A*xt+B*u;
end
plot(xBuf(1,:),xBuf(2,:))
grid on
box on
值得注意的是,在上面这个优化问题中,可以把当前时刻的xQx去掉,因为这是一个定值,确定为xt。也可以把最后一个uRu去掉,因为这个u不会对其他变量产生影响,优化结果一定是0. 在后续讨论中,优化函数不再包含这两项。归零问题-稳定性这个方法没有考虑到系统的稳定性,无法证明系统一定趋于0. 为此,我们需要进行额外的讨论。证明稳定性有一个非常好用的方法——李雅普诺夫稳定性证明方法。只要可以找到一个关于系统状态的半正定函数,而且该函数的差分始终为负,则系统是稳定的。MPC问题中我们看到,优化函数是一个半正定的函数,我们考虑将其作为李雅普诺夫函数。如果能够通过设计,保证同时又由于J*(0,0)=0,因此系统稳定,唯一稳定点为原点。因为我们在求解优化问题,因此任意一个可行解对应的目标函数的值,一定不小于最优解,即于是我们的目标变为,找到一个可行解,且该可行解满足于是可以保证由于系统模型是精确已知的,因此因此,我们可以取这个被称为shifting。参考下表可以发现,还有一个输入和一个状态没有被确定。显然,当这个输入被确定是,最后一个状态也可以被确定。很自然的,我们想到取一个稳定的状态反馈控制 (A+BK的特征值的模小于1),即相应的,图中,红色部分是t+1时刻J多出来的,蓝色部分是t时刻J*多出来的,绿色部分可以被抵消。讲道理,红色部分应该比蓝色部分更加接近原点,对应的代价也应该越小,因此一般来说是成立的。但是理论证明不能相信一般。由于红蓝相隔太远,这里做出额外处理,修改第N步x预测值的权重。,代价函数变为上表中颜色有一点点变化,变为于是得到通过shifting得到的t+1时刻可行解相应的目标函数值,和t时刻最优解之间的差值为显然,第二行的内容小于等于0,只要让第一行的内容也小于等于0,就可以保证而保证第一行始终小于等于0,仅需要对于任意的x*(N|t)=x,有只需要证明中间这一块矩阵半正定即可,让中间这一块小于等于0,就看也i借助离散系统系统的Riccati方程了。前面看到,给定的只有A,B,Q,R,因此可以先用riccati方程求解得到P0和K0使riccati成立,此时中间这个矩阵就是半正定。K一般就取K0了,而P可以去P0, 也可以取为alpha*P0,alpha>=1定点控制归零问题中,我们希望系统状态值归于0,定点控制中,我们希望系统状态到达xr。参考如下内容,我们知道,一般地,若系统状态维度为n,输入维度为m且m MPC算法 - 知乎切换模式写文章登录/注册MPC算法吴建明wujianmingAI芯片,自动驾驶与计算机视觉专家MPC算法一. 引言在工程技术方面,MPC全称可指Model Predictive Control模型预测控制(又称RHC, Receding Horizon )。模型预测控制算法 一种进阶过程控制方法,自1980年以来开始在化工炼油等过程工业得到应用,并在经济领域开始得到应用。MPC是一种多变量控制策略,其中涉及了:过程内环动态模型;控制量的历史数值;在预测区间上的一个最优值方程J。最优控制量可由以上各量求出。MPC最大的特点在于,相对于LQR控制而言,MPC可以考虑空间状态变量的各种约束,而LQR,PID等控制只能够考虑输入输出变量的各种约束。MPC可应用于线性和非线性系统。在当今过程控制中,PID当然是用的最多的控制方法,但MPC也超过了10%的占有率。MPC是一个总称,有着各种各样的算法。其动态矩阵控制(DMC)是代表作。DMC采用的是系统的阶跃响应曲线,其突出的特点是解决了约束控制问题。那么是DMC是怎么解决约束的呢?在这里只给出宏观的解释,而不做详细的说明。DMC把线性规划和控制问题结合起来,用线性规划解决输出约束的问题,同时解决了静态最优的问题,一石二鸟,在工业界取得了极大的成功。如下图所示为一个MIMO系统u1,u2输入与y1,y2输出相互影响。如果使用PID控制的话,每一个子系统单独设计一个PID控制器,两个相互影响的子系统没有任何的交联,使得系统难以设计,如果像图二一样设计一个较大的系统,则参数较多难以实现,而使用MPC控制器的话可以较好的解决两种问题,综合相互间的影响来设计参数。二. 作用机理MPC作用机理描述为:在每一个采用时刻,根据获得的当前测量信息,在线求解一个有限时间开环优化问题,并将得到的控制序列的第一个元素作用于被控对象。在下一个采样时刻,重复上述过程:用新的测量值作为此时预测系统未来动态的初始条件,刷新优化问题并重新求解 。 即MPC算法包括三个步骤: (1)预测系统未来动态; (2)(数值)求解开环优化问题; (3)将优化解的第一个元素(或者说第一部分)作用于系统 这三步是在每个采样时刻重复进行的,且无论采用什么样的模型,每个采样时刻得到的测量值都作为当前时刻预测系统未来动态的初始条件 在线求解开环优化问题获得开环优化序列是MPC和传统控制方法的主要区别,因为后者通常是离线求解一个反馈控制律,并将得到的反馈控制律一直作用于系统。在这里给出两点说明: 1.MPC是一个反馈控制策略,但是之前不是说将得到的控制序列中的第一个元素作用于被控对象,求解开环问题。那么哪来的反馈呢? 实际上在下一个采样周期,下一时刻的测量值又被使用上了,用下一时刻的测量值求解下一时刻的控制值。故这是一个反馈控制策略 2.传统的控制方法为什么被称为离线控制? 设计变阻器应有的级数来达到控制并励直流电动机启动的例子,那么如何看的出来是离线控制呢?其实很简单,在起始的时候就已经把每级电阻值就给定出来了,但是实际上是否能如理论计算的这样呢?比如我电压突然受到了扰动了怎么办?那么这个计算的每级电阻值肯定不对了啦,但是传统的控制方法对此确是无能为力的,因为每级启动电阻在最早的时候已经计算好了的。三. MPC的基本特点不管是何种算法,他们的基本特点都是:基于模型的预测、滚动优化和前馈-反馈的控制结构。1.基于模型的预测 在MPC算法中,需要一个描述对象动态行为的模型,这个模型的作用是预测系统未来的动态。即能够根据系统k时刻的状态和k时刻的控制输入,预测到k+1时刻的输出。在这里k时刻的输入正是用来控制系统k+1时间的输出,使其最大限度的接近k+1时刻的期望值。故我们强调的是该模型的预测作用,而不是模型的形式。在这里我重点讲解一下状态空间模型。那么什么是状态?输出是不是也是状态的一种?对的,输出也是一种状态,只不过我们赋予了这个状态特殊的意义。举个例子来说,舞龙,假设是只能通过龙尾的人A指挥前面一个人B动作,然后B指挥他前面的一个人C动作….依次如此,达到控制龙头的人F叼住绣球的动作。如果只关注龙头的人(输出)和龙尾的人(输入),而忽略龙身子的动态,那就是所谓的输入—输出系统。经典控制理论就是建立在输入—输出系统的基础上面的。 但是我如果不管要管龙尾和龙头的人,我连龙身子上面的人也要要求在固定的位置,那么这就是状态空间的概念,即我对系统中的每一个状态都要控制到。龙头位置的人也是一个状态,故输出本身就是一个状态,或者说是状态的一个组合。2.滚动优化 因为外部干扰和模型失配的影响,系统的预测输出和实际输出存在着偏差,如果测量值能测到这个偏差,那么在下一时刻能根据这个测量到偏差的测量值在线求解下一时刻的控制输入,即优化掉了这个偏差值。若将求解的控制输出的全部序列作用于系统,那么k+1时刻的测量值不能影响控制动作,也就是说测量值所包括的外部干扰或模型误差信息得不到有效利用。故我们将每个采样时刻的优化解的第一个分量作用于系统,在下一个采用时刻,根据新得到的测量值为初始条件重新预测系统的未来输出并求解优化解,继续讲这个时刻的优化解的第一个分量作用于系统,这样重复至无穷。故预测控制不是采用一个不变的全局优化目标,而是采用时间向前滚动式的有限时域优化策略。这也就是意味着优化过程不是一次离线进行,而是反复在线进行的。3.前馈-反馈的控制结构 这个在前面给出的两点说明中的第一点就已经给出了。四. MPC参数选择选择一个好的参数不仅影响MPC控制的性能,而且还会影响到MPC每一个timestep内进行在线优化的计算复杂度。这里将会给出关于控制器采样周期、预测及控制范围(prediction and control)、约束及权重。采样周期的选择采样周期过大,则系统反应过慢导致难以及时进行修正控制,而采样周期过小,则会导致系统产生大量的在线优化计算,给系统带来较大的开销。因而建议采样周期设计采用开环响应时间(10~90%上升时间)的十分之一或二十分之一:发布于 2020-05-12 07:10模型预测控制算法MPC控制赞同 997 条评论分享喜欢收藏申请 模型预测控制简介(model predictive control) - 知乎首发于运筹学与控制论切换模式写文章登录/注册模型预测控制简介(model predictive control)王源算法等 2 个话题下的优秀答主经常有人会问到control theory 和 optimization 有什么联系?它们之间的联系非常多,今天我们主要聚焦在模型预测控制。模型预测控制实际上是以优化方法来求解控制问题,或者说是以优化问题的求解来给出控制器的动作。所以说模型预测控制是外边套着一层控制的皮,内部包含着优化的思想。1 模型预测控制(model predictive control)的动机其实讲模型预测控制有几个角度去讲,因为它本就是属于优化和控制两个领域的交叉。我比较习惯于从最优控制的角度去理解,这样的话对于自动化出身的童鞋是比较好理解的,但是其它领域的童鞋之前没有接触过最优控制的,就更加不好去理解模型预测控制了。所以本文从最最基本的一个动机开始讲起。模型预测控制(model predictive control)顾名思义有三个主要部分构成,1模型;2预测;3控制(做决策),我们只要理解这三个部分和它们之间的关系即可。1 模型,模型可以是机理模型,也可以是一个基于数据的模型(例如用神经网络training 一个model出来)2 预测,建立模型的目的是什么呢?建立一个模型并不是放在那里拿来看的,多半是用来做预测用的。我们每天的生活中就在不停地做建模和预测的事情,例如你过马路的时候,会预测一下是否有车能撞到你,例如我们周末想出去旅游了,可能就会去看一下天气预报。在实际生产中也有很多类似的例子,淘宝会预测每件商品未来7天的购买量,物理学家会用牛顿三大定律预测小行星的运动轨迹。3 控制(做出决策),控制就是我需要做出动作了,在前面的例子中对应起来就是,例如你过马路的时候,会预测一下是否有车能撞到你,如果没有你就赶快过马路(控制动作)。例如淘宝会预测商品未来7天的购买量,就要看如果说有一些商品缺货了的话就赶紧去调货或者生产(控制动作),例如物理学家用牛顿三大定律预测小行星运动轨迹,如果预测到小行星会撞击到地球的话,那就提前需要采取措施来避免小行星的撞击(控制动作)。在上面的三个例子中,第一个例子你用的是你的大脑根据以往经验学到的模型来做预测,第二个例子中可能你会用神经网络,决策树啊等等机器学习学习到的模型(说到这里可能很多童鞋会比较激动,模型预测控制可以和现在很火的人工智能 深度学习结合在一起),第三个例子中物理学家们用到的是机理模型。总之各种各样的模型都可以做预测,我们身边天天都在做预测,而预测不单单是预测的准就完事了,预测的目的是为了让我们更好的去决策。2 模型预测控制与最优控制最优控制强调的是“最优”,一般最优控制需要在整个时间域上进行求优化(这样才能保证最优性)。最优控制常用的几类解法有 1变分法,2极大值原理,3动态规划。变分法和极大值原理一般来说只能处理线性的模型并且不能含有复杂一点的约束,而动态规划我们知道实际上在求解最优控制问题中是一种比较聪明的穷举法,其计算复杂度往往非常高。最优控制由于过于强调最优性,而暴露出两个问题 1是对于非线性的 包含复杂约束的情况难以求解;2是需要对系统的模型精确的知道。模型预测控制退而求其次仅仅去考虑未来几个时间步,一定程度上牺牲了最优性。举个例子来说如下图所示,我们在开车,前面路口有一个弯道。如果想要平稳的过弯,我们就需要在进入弯道之前(考虑未来几个时间步)就开始控制车辆的方向和速度。与之相对的一种控制方式就是只看现在的情况,也就是贪婪的方法,那可以想象如果等到车辆行驶到弯道再做动作的话势必会晚了一些。3 模型预测控制与传统的PID控制比较1 模型预测控制善于处理多输入多输出系统,对于如下图所示的多输入多输出系统,虽然也可以采用多个PID控制器进行控制,但是往往由于各个控制回路之间存在耦合关系,其PID参数的整定变得非常困难。与之相对的模型预测控制的优势就是非常方便的可以考虑多输入多输出系统,用一个MPC控制器就可以解决。2 模型预测控制可以处理约束现实世界中往往存在各种各样的约束条件,例如前面举得开车的例子中,对车速有约束(因为有交通法规限速),对加速度也有约束(因为发动机的负载是有限的)。由于模型预测控制是通过构建优化问题来求解控制器的动作的,所以可以非常自然的将这些约束建立在优化问题中以此来保证这些约束的满足。3 模型预测控制是有向前考虑未来时间步的有限时域优化这个在前面对比模型预测控制和最优控制的时候已经讲过了,这里就不多说了。实际上模型预测控制采用了一个折中的策略,既不是像最优控制那样考虑这个时域,也不是完全的贪婪控制仅仅考虑当前,而是考虑未来的有限时间域。4 模型预测控制如何实现模型预测控制的实现是通过建立优化问题的模型,求解该优化问题来得到控制器的输出的。如下图所示:从这里可以看到模型预测控制需要在每一个时间步通过反复的预测+优化来求解优化问题,当得到优化问题最优解后再讲这个解作为真正的控制器的输出作用给被控对象。那么关键就在于怎么定义这个优化问题了,下面简单的给出一种常见的优化问题的模型\min J\left( y,u \right) =\sum_{k=1}^N{\lVert y\left( t+k \right) -y_d\left( t+k \right) \rVert ^2} \\ s.t.\ y\left( t+1 \right) =f\left( y\left( k \right) ,u\left( t \right) \right)\;\; \;\;(1) \\ u\left( t \right) \in \left[ u,\bar{u} \right] ,t\in T \;\;\;\; (2)\\ y\left( t \right) \in \left[ y,\bar{y} \right] ,t\in T \;\;\;\; (3) 目标函数表示系统的状态 y(t+k) 和期望的状态 y_d(t+k) 在未来N个时间步都要尽量接近,约束(1)表示被控对象的动态特性,约束(2)和(3)分别表示控制量 u(t) 和状态量 y(t) 受到一个上下限的约束。由此就得到了MPC的优化问题,那么求解这个优化问题即可得到控制器的动作。当然这里仅仅是举例而已,实际上目标函数和约束条件要根据实际问题去定义。很多MPC最后形成的优化问题是一个二次规划问题,那么可以借助丰富的运筹优化的理论来求解这个二次规划问题。所以MPC是外壳套着控制,内涵是一个优化方法。从这里可以看到模型预测控制需要在每一个时间步迭代求解优化问题,而优化问题的求解往往是比较耗费时间的,而控制器的动作对实时性要求可能会比较强一些,这样就会产生一个矛盾,这也是目前模型预测控制的一个主要缺点。5 模型预测控制课程推荐推荐两个MPC相关的课程第一个是B站上的,这个课程的特点是非常基础,可以帮助初学者理清楚MPC的基本思路。本文的一部分图片也是来自这个视频。第二个课程就比较专业了,供做学术的童鞋如果想深入研究的话,可以看第二个课程。以上两个课程全套资料可以在如下链接中下载:编辑于 2023-02-01 11:49・IP 属地广东预测模型最优控制自动控制赞同 1746121 条评论分享喜欢收藏申请转载文章被以下专栏收录运筹学与控制论运筹学与控制论的科普,通俗易懂的读书笔记。工 MPC算法流程详解(一) - 知乎首发于MPC模型预测控制-小白的入门历程切换模式写文章登录/注册MPC算法流程详解(一)No penny浙江大学 机械硕士写在前面本文是对《Model Predictive Control - Theory and Design》第二章部分的内容的解读,承接MPC中关于优化函数的解法总结(一)的相关内容,后续会继续不断更新,欢迎大家持续阅读!有人咨询的一些特殊字符如何书写的问题,知乎上的公式是怎么打出来的关于文中部分常见的字母的打法,可以参照这篇文章。本文中的 \mathbb P 等字符是参考链接文章中的如下命令:打开“公式”->输入"/mathbb P"即可得到。MPC的特点对MPC稍有理解的同学可能很清楚MPC的三个基本原理(三个基本特征):预测模型:预测模型是模型预测控制的基础。其主要功能是根据对象的立式信息和未来输入,预测系统未来的输出。对预测模型的形式没有做严格的限定,状态方程、传递函数这类传统的模型都可以作为预测模型。对于线性稳定系统,阶跃响应、脉冲响应这类非参数模型,也可以直接作为预测模型使用。滚动优化:模型预测控制通过某一性能指标的最优来确定控制作用,但优化不是一次离线进行,而是反复在线进行的。这就是滚动优化的含义,也是模型预测控制区别于传统最优控制的根本点。 反馈校正:为了防止模型失配或者环境干扰引起控制对理想状态的偏离,在新的采样时刻,首先检测对象的实际输出,并利用这一实时信息对基于模型的预测结果进行修正,然后再进行新的优化。上一篇文章我们介绍了MPC的一种常用模式,即通过使用LQ的方法去求解代价函数,其实对应的就是滚动优化中的优化过程(只是一个时段内还没有滚动起来……)。MPC是一种在一段采样时间内在线求解初始状态是当前时刻的系统状态的有限时域的最优化问题,最优化问题的解既是该段时间内的控制动作。最优化产生了一系列的控制输入,仅将第一个作用于系统中。不同于传统控制的离线一次性生成控制律,MPC在线根据系统的运行情况进行控制律的在线生成。MPC的最大优点是,即使被控系统是非线性的,并且必须满足状态和控制的硬约束,使用标准的数学规划算法,开环最优控制问题通常可以足够快地得到解决。所以综合来看,MPC并不是一种跳脱与传统控制之外的全新控制方法,而更像是DP算法的一种实现方法。接下来对于MPC的研究,我们认为系统的状态已知(虽然在实际应用过程中,很少能出现状态实时已知),从而方便对系统稳定和控制性能的分析。Model Predictive Control对于非线性系统,我们通常用一下连续时间下的微分方程来表示:式1对于这类系统,具有最优闭环特性的控制律是以下问题的解。式2如果 \ell(\cdot) 是正定的,那么控制的目标就是令系统状态趋向原点。如果该问题的解存在,就记为 V_{\infty}^{0}(x) \quad u_{\infty}^{0}(\cdot ; x) ,闭环系统在该解的作用下可以写为:式3当系统的状态维数比较大或者控制时域也比较大时,通过DP进行求解可能不太现实,所以需要建立一个近似模型。系统近似的常用方法就是用离散的差分方程来代替连续时间微分方程。式4按照该思路,式4即为用非线性差分方程表示非线性系统的通式。其是连续时间微分方程 \dot{x}=f(x, u) 的离散形式。(这里有个疑问?为什么前面的式4中的x+代表的是状态的微分,后续又说对于式4的解 x\left( \cdot \right) ,如果输入为 u(\cdot) ,初始状态为 x(0) = x_{0} 那么就满足 x(k+1)=f(x(k),u(k)) 那这里的 x(k+1)表示的又是状态量而不是他的微分了)。关于离散系统的约束等的表达,这里暂且跳过,先看代价函数部分。 式5这里定义 \mathbb P_{N}(x,i) 表示在事件 (x,i) 的最优化控制问题,是求解式5的最小值。通过求解 \mathbb P_{N}(x,i) 得到的将是与初始事件 (x,i) 有关的两个函数(控制序列及状态序列)。式6其中 x^{0}(i;(x,i))=x , u(i) = u^{0}(i;(x,i)) 。原文中有相当长的篇幅来描述推导在有状态和输入约束下,问题 \mathbb P_{N}(x,i) 的解应该是什么格式的,这里并没有太深入的进行阅读,通过书中的例子来进行理解:样例2.5:线性二次型MPC给定如下系统:式7式8式9假设该系统没有终端约束和终端约束,控制域的长度为2。(另,式7-9中的:=符号是我第一次见,查询资料后了解到其表示“定义为”,即给系统中的某些参数进行定义,至于其与=的区别读者可以自行思考)用第一种控制方法,那么控制问题就可以转化为:式10对u的限制相当于两个不等式约束,对x的约束相当于三个等式约束,要求状态符合差分方程。第二种方法,在第一种方法的基础上将等式约束带入式10中。可以得到如下:式11因为没有状态和终端约束,所以控制输入通常不会与状态 x 相关。对于求解这类的二次型最优控制问题,通常的解法就是先确定状态后求解控制输入序列。比如,当 x=10 时, u^{0}(1;10)=u^{0}(2;10)=-1 ,此时对应的状态轨迹为 x^{0}(0;10)=10,x^{0}(1;10)=9,x^{0}(2;10)=8 ,代价函数 V^{0}_N(10)=124 。通过求问题 \mathbb P_{N}(x) 在 x\in[-10,10] 内的解,可以将其组合起来得到控制律 \kappa_N(\cdot) 。结果如下图所示:图1可以看出求解方法为正向求解,较为直观,容易理解。那么有没有更进一步的解法呢?样例2.6:更进一步的线性二次型MPC解法我们重温一下样例2.5中讨论的MPC问题。目标函数为:式12其中 c(x)'=[2,1]x , d(x)=\frac{3}{2}x^2 ,目标函数可以重写为:式13式14式15因为 H 是正定的,观察式13,很容易看出当 u=a(x) 时代价函数有最小值,所以这里可以认为 a(x) 是目标函数的无约束最小值。(也就是目标函数在没有任何约束的理想情况下可以取到的)这也可以很容易得到验证:代价函数关于输入 u 的梯度为:式16将 u=a(x) 带入可得梯度为0。当 x\geq0 时, a(x) 的轨迹如下图所示:图2图中的直线表示 a(x)=K_1x ,矩形区域则表示控制输入约束下的可行域,在可行域内控制输入即等于 a(x) 。通过图可以很清晰的看出当 x 变化时, a(x) 的轨迹与控制输入可行域的交点对应的 x=x_{c1}=5/3 。当 x>x_{c1} 时无约束最小值会落在可行域外,这些状态下的最优控制输入则为目标函数水平集(即图2中的椭圆)与可行域边界的切点(交点,当 x>3 之后的椭圆与该点均不是切点了)。关于图中目标函数水平集的理解,我认为椭圆大小意味着代价函数的大小,椭圆越大代价越大。所以当椭圆逐渐增大至相切时为代价函数最小。到这里,你是不是也会有一个疑问?这个5/3和3是怎么计算出来的呢?利用上面画图的相切原理,可知表现为椭圆的水平集与可行域左边界(-1,0)相切。椭圆水平集在 u^{0}(x) 处的切线表示为 \nabla_{\mathbf{u}} V\left(x, \mathbf{u}^{0}(x)\right) 根据上述叙述有以下式子成立:式17因为已知切点在左边界上,所以切点可以表示为 \mathbf{u}=[-1,v]' , \nabla_{\mathbf{u}} V\left(x, \mathbf{u}^{0}(x)\right)=H\mathbf{u}+c(x) ,所以有求解可得 v=\frac{1}{2}-\frac{1}{2}x , \lambda=-\frac{5}{2}+\frac{3}{2}x 通过分段分析,可以得到与样例2.5相同的结论:刚开始看这部分全是一些抽象的假设,很难看得进去,后面看到例子感觉前面的叙述真是巧妙。哈哈哈数学公式的美都是展现给坚持到底的人看的,加油啊各位!对于课本中的内容的理解可能各有千秋,每个人可能都有不同的疑问,欢迎大家在评论区留言评论,大家一起讨论!编辑于 2022-04-06 19:42MPC控制自动控制理论最优化理论/算法赞同 222 条评论分享喜欢收藏申请转载文章被以下专栏收录MPC模型预测控制-小白的入门历程记录一下一个新手入门MPC的学习历程, 为何学界通用「模型预测控制」(MPC),而非「滚动域控制」(RHC)来指 MPC 方法? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册控制系统控制理论MPC控制模型预测控制为何学界通用「模型预测控制」(MPC),而非「滚动域控制」(RHC)来指 MPC 方法?我认为滚动域更加直观地表达了 MPC 方法的核心。反而是模型预测这几个字很模糊。在算法应用中,模型往往是给出的,不需要预测。所谓的预测,我觉得更多是基…显示全部 关注者56被浏览14,527关注问题写回答邀请回答好问题 2添加评论分享7 个回答默认排序知乎用户真像是因为MPC这个名称是70,80年代工业界的人起的 你觉得工业界的人起名字的时候会考虑本质不本质的问题么……编辑于 2023-04-24 01:03赞同 162 条评论分享收藏喜欢收起江知季吹散眉间,一点春皱 关注RHC 也是一个 control technical. 比MPC的概念更早,大概1960年左右就有了.目前google scholar能搜到关于MPC的最早的有 Richalet写的 Model predictive heuristic control.(1978年)不过真正把MPC带火的是另外一位,Cutler在SHELL Oil公司(化工行业,有钱)应用了类似算法,但把算法叫Dynamic Matrix Control(DMC).[1],时间点大概1979年. 这里用的model都是deterministic的.后来有Clarke对mpc用到的各种control technical进行了比较多的研究.但他命名地叫Generalized Predictive Control(GPC).[2]. 时间点大概1987年. 这里就开始考虑了Stochastic.两位大佬算法的共同点里也都用了model.但都没叫Model Predictive Control.我从google scholar按时间搜了下,最早搜到的比较高引的是: CARLOS[3]写的 Model Predictive Control: Theory and Practice a Survey.另外RHC其实关注的是Horizon, 但实际工业界里从DMC开始,包括后来的MPC,其实更关注的是MIMO and parameter/state constrain. 一方面区别于之前的control technical,另一方面有大佬做review,后来就习惯成自然了.Reference:[1] Cutler C R, Ramaker B L. Dynamic matrix control A computer control algorithm[C]//joint automatic control conference. 1980 (17): 72.[2]Clarke D W, Mohtadi C, Tuffs P S. Generalized predictive control—Part I. The basic algorithm[J]. Automatica, 1987, 23(2): 137-148.[3]Garcia C E, Prett D M, Morari M. Model predictive control: Theory and practice—A survey[J]. Automatica, 1989, 25(3): 335-348.发布于 2023-04-24 11:09赞同 201 条评论分享收藏喜欢 基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记_实现基于车辆运动学模型在frenet坐标系下通过mpc算法跟踪一个圆的matlab代码-CSDN博客 基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记 @Drakie 已于 2022-11-20 19:49:06 修改 阅读量2.1w 收藏 575 点赞数 111 分类专栏: 无人驾驶 文章标签: 自动驾驶 matlab 目标跟踪 于 2022-07-01 16:51:18 首次发布 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Drakie/article/details/125561076 版权 无人驾驶 专栏收录该内容 6 篇文章 120 订阅 订阅专栏 目录 1 模型推导及算法分析 1.1 模型推导 1.1.1 车辆动力学模型 1.1.2 线性时变预测模型推导 1.2 模型预测控制器设计 1.2.1 目标函数设计 1.2.2 约束设计 2 代码解析 2.1 模板框架 2.1.1 S-Function 2.1.2 mdlInitializeSizes函数 2.1.3 mdlUpdates()函数 2.1.4 mdlOutputs()函数 2.2 MPC 算法主体 雅可比矩阵 a b 求解 E 矩阵 参考轨迹 Y ref H 矩阵 f 矩阵 约束矩阵 quadprog 求解器 3. carsim、simulink联合仿真 3.1 Carsim 设置 3.1.1 车辆参数设置 3.1.2 仿真工况设置 3.1.3 输入输出设置 3.1.4 仿真结果:图形曲线 3.1.5 仿真结果:动画效果 3.2 simulink 仿真 3.2.1 carsim 路径添加 3.2.2 Simulink 搭建 3.2.3 仿真结果 4 不同工况下仿真结果 4.1 控制系统对路面附着条件的鲁棒性 4.2 控制算法对速度的鲁棒性 4.3 不同设计参数对控制器的影响 1 模型推导及算法分析 包括车辆非线性横摆动力学模型、线性时变预测模型推导,以及MPC控制器设计 1.1 模型推导 动力学模型+线性时变预测模型 1.1.1 车辆动力学模型 公式(2.38)是考虑轮胎侧向、纵向滑移的非线性动力学方程,成立的条件是假设前轮偏角 δf 较小,且轮胎模型工作在线性区域。 轨迹跟踪属于横向控制,控制量为小车前轮转角δf。这里默认纵向速度Vx恒定,轨迹跟踪的目的就是使车辆的横摆角 φ 和横向位置 Y 逼近参考轨迹的 φ_ref 和 Y_ref。 选取状态量ξ = [ y_dot, x_dot, φ, φ_dot, Y, X ] ,输出量 η = [ φ ; Y ],于是得到非线性模型: 1.1.2 线性时变预测模型推导 1、离散化:采用前向欧拉法,将非线性公式(2.29)在 k 时刻离散化 2、 线性化 线性化方法泰勒展开首先需要选择一个起始参照点,参照点的选择有参考系统方法,及针对状态轨迹的线性化方法(参照第一版教材3.3.2节,第二版教材这部分内容缺失)。 a. 参考系统方法是指提前得到了每个时刻的参考控制量 Uref,和状态量 ξref 。即在期望轨迹上已经完全通过。这种设计目的是为了消除当前车辆状态和参考系统状态的偏差,本质上不是直接和期望路径进行偏差比对,而是和参考值进行比对。这种方法缺点在于需要提前获取到一个参考系统。本章节的期望轨迹只有 X_predict、Y_ref 及 φ_ref,不包含全部状态,因此无法提前得到一组参考系统,所以采用状态轨迹法。 b. 状态轨迹法:在 t 时刻工作点,对系统施加持续不变的控制量 ut ,得到一条状态轨迹 ξt,并在该 t 时刻做线性化。 难点:这里所谓对系统施加的持续不变的控制量 ut 就是后面用到的恒定量 u(k-1),是在轨迹跟随控制前就已经施加到系统上的控制量,并且这个初始控制量在整个轨迹跟踪过程中都会恒定不变地施加在系统上,不会随着系统状态及控制量的变化而消失,每次求解得到的最优 Δu(k) 只是在上一时刻的 u(k-1) 的基础上补偿的一个增量,这个增量对原本施加在系统上的 ut 即 u(k-1) 没有任何影响,通俗的理解就是 u(k+Np)=u(k-1) + Δu(k) + Δu(k+2) + ... + Δu(k+Np-1) + Δu(k+Np), 即每次求解得到的Δu(k)对控制量的增益改变都会叠加到下一时刻。 难点2:这里的u(k-1)其实就是车辆在没有被施加控制增量时候已经被施加了的控制量,也就意味着是上一时刻的控制量在当前时刻的体现,因为还没有施加控制增量,所以自然可以表示上一时刻的控制量。 先在 t=0 时刻的工作点(ξ0,u0)进行泰勒展开,忽略高阶项: (11-a)ξ(k + 1)表达式就是线性时变预测模型。 Ak,t 、Bk,t 及 dk,t 表示这是一个时变系统 LTV,需要在线求解系数。这种模型缺点在于表达式中不包含控制量的增量 Δu(k),从而无法使其受到 ΔUmin 和 ΔUmax 的约束,如果在驾驶过程中方向盘的转动幅度过大,会给乘车人带来不好的体验,所以现在需要构造新的形式以便包含对Δu(k)的约束: 1.2 模型预测控制器设计 有了对 Δu(k) 的约束后,就可以开始设计MPC,首先进行目标函数的设计。 1.2.1 目标函数设计 鉴于车辆动力学模型的复杂度较高,加上更多的约束条件,因此控制器在执行过程中,很有可能出现规定时间内求不出最优解的情况,这时车辆方向盘处于失控的危险状态。为了规避这种情况,在目标函数中加入松弛因子ρ。 注意:这里 ρ 越大意味着求解的条件越宽松,但 ρ过大也意味着跟踪效果不理想。 公式(13-a)的 Y(t) 表达式包含了未来 Np 个预测时域内的 ξ(k+i),将 Y(t) 代入目标函数。 公式(13-c)是标准的二次规划形式,其中待求解 X 已经由一维的 Δδf 扩增为包含 ε 的二维增广矩阵,接下来是约束条件的设计。 1.2.2 约束设计 控制量 u(k) 约束及输出量 φ(k) 和 Y(k) 的约束: 控制增量 Δu 的约束: 公式(14-a)是结合了控制量和输出量的综合形式,公式(14-b)是控制增量和松弛因子的约束。到目前为止已经完成轨迹跟踪的线性时变预测模型,接下来的工作是结合代码分析,并结合carsim联合仿真,查看轨迹跟踪效果。 2 代码解析 2.1 模板框架 2.1.1 S-Function function [sys,x0,str,ts] = chapter5_2_2(t,x,u,flag) % u表示来自carsim的输入 switch flag, case 0 [sys,x0,str,ts] = mdlInitializeSizes; % 初始化系统参数的一些基本的维度 case 2 sys = mdlUpdates(t,x,u); % 没有用到 case 3 sys = mdlOutputs(t,x,u); % 实现控制算法的主要模块 case {1,4,9} sys = []; otherwise error(['unhandled flag = ',num2str(flag)]); end 2.1.2 mdlInitializeSizes函数 function [sys,x0,str,ts] = mdlInitializeSizes sizes = simsizes; sizes.NumContStates = 0; % 连续状态量个数为 0 sizes.NumDiscStates = 6; % 离散状态量个数为 6 sizes.NumOutputs = 1; % 输出个数为 1,delta_f 作为输出 sizes.NumInputs = 8; % 输入个数为 8,来自 carsim,还包括2个滑移率 sizes.DirFeedthrough = 1; % mdlOutputs函数模块中直接调用了u的数据,所以为1 sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 =[0.001;0.0001;0.0001;0.00001;0.00001;0.00001]; % 6个状态量的初始值 global U; % 1维控制量,前轮转角输出 delta_f U=[0]; % delta_f(0)=0,起步时前轮转角为 0° str = []; ts = [0.05 0]; % 仿真间隔是0.05秒,第二项为0表示从0秒开始立即仿真 2.1.3 mdlUpdates()函数 function sys = mdlUpdates(t,x,u) % 这部分没有用到 sys = x; 2.1.4 mdlOutputs()函数 u 表示来自carsim的 8 个状态输入, function sys = mdlOutputs(t,x,u) tic % 开始计时 fprintf('Update start, t=%6.3f\n',t) % 日志记录当前时刻控制动作的开始 Nx=6; Nu=1; Ny=2; Np =20; Nc=5; T=0.05; % 采样时间 2.2 MPC 算法主体 tic 含义: 下面这部分是车体的参数,目的是为了求解雅可比矩阵 a 和 b %% a b 常量参数:车体 Sf=0.2; Sr=0.2; lf=1.232;lr=1.468; Ccf=66900;Ccr=62700; Clf=66900;Clr=62700; m=1723;g=9.8;I=4175; %% a b 变量参数,carsim 实时采集 y_dot=u(1)/3.6; % Km/h => m/s x_dot=u(2)/3.6+0.0001; % 防止分母为0 phi=u(3)*3.141592654/180; % degree => rad phi_dot=u(4)*3.141592654/180; Y=u(5); X=u(6); Y_dot=u(7); % 前轮纵向滑移率 X_dot=u(8); % 后轮纵向滑移率 global U; % 控制量 delta_f=U(1); fprintf('Update start, u(1)=%4.2f\n',U(1)) % 日志记录每个控制周期的控制量 雅可比矩阵 a b 求解 接下来就是雅可比矩阵 a 和 b 的矩阵表达式,这里只写出了结果: %% a b global a b; a=[ 1 - (259200*T)/(1723*x_dot), -T*(phi_dot + (2*((460218*phi_dot)/5 - 62700*y_dot))/(1723*x_dot^2) - (133800*((154*phi_dot)/125 + y_dot))/(1723*x_dot^2)), 0, -T*(x_dot - 96228/(8615*x_dot)), 0, 0 T*(phi_dot - (133800*delta_f)/(1723*x_dot)), (133800*T*delta_f*((154*phi_dot)/125 + y_dot))/(1723*x_dot^2) + 1, 0, T*(y_dot - (824208*delta_f)/(8615*x_dot)), 0, 0 0, 0, 1, T, 0, 0 (33063689036759*T)/(7172595384320*x_dot), T*(((2321344006605451863*phi_dot)/8589934592000 - (6325188028897689*y_dot)/34359738368)/(4175*x_dot^2) + (5663914248162509*((154*phi_dot)/125 + y_dot))/(143451907686400*x_dot^2)), 0, 1 - (813165919007900927*T)/(7172595384320000*x_dot), 0, 0 T*cos(phi), T*sin(phi), T*(x_dot*cos(phi) - y_dot*sin(phi)), 0, 1, 0 -T*sin(phi), T*cos(phi), -T*(y_dot*cos(phi) + x_dot*sin(phi)), 0, 0, 1]; b=[ 133800*T/1723 T*((267600*delta_f)/1723 - (133800*((154*phi_dot)/125 + y_dot))/(1723*x_dot)) 0 5663914248162509*T/143451907686400 0 0]; 定义雅可比矩阵 a 和 b 的目的,是为了求解 A 和 B 矩阵: 代码实现: %% A B C A_cell=cell(2,2); A_cell{1,1}=a; A_cell{1,2}=b; A_cell{2,1}=zeros(Nu,Nx); A_cell{2,2}=eye(Nu); A=cell2mat(A_cell); B_cell=cell(2,1); B_cell{1,1}=b; B_cell{2,1}=eye(Nu); B=cell2mat(B_cell); C=[0 0 1 0 0 0 0; 0 0 0 0 1 0 0;]; 这里 得到的A 和 B 矩阵的目的是为了得到 ψ θ Γ Φ 矩阵,参考公式(13-a): 由于 θ 同时被矩阵E H f 调用,所以这里可以首先实现 θ: %% THETA (被 E H f 调用) THETA_cell=cell(Np,Nc); for j=1:1:Np for k=1:1:Nc if k<=j THETA_cell{j,k}=C*A^(j-k)*B; else THETA_cell{j,k}=zeros(Ny,Nu); end end end THETA=cell2mat(THETA_cell); 我们的最终目标是定义 E H f 矩阵,以便构造二次规划标准型矩阵,下面我们按顺序依次实现 E H 和 f 矩阵,结合公式按顺序定义矩阵可以使代码段更加直观。 E 矩阵 第一项便是参考轨迹,这里可以用外部文件生成,也可以直接定义。 参考轨迹 Y ref %% Y_ref % phi_ref Y-ref shape=2.4;%参数名称,用于参考轨迹生成 dx1=25;dx2=21.95;%没有任何实际意义,只是参数名称 dy1=4.05;dy2=5.7;%没有任何实际意义,只是参数名称 Xs1=27.19;Xs2=56.46;%参数名称,以上参数是为了生成我们的双移线 X_predict= zeros(Np,1);%用于保存预测时域内的纵向位置信息,这是计算期望轨迹的基础 phi_ref = zeros(Np,1);%用于保存预测时域内的参考横摆角信息 Y_ref = zeros(Np,1);%用于保存预测时域内的参考横向位置信息 % Yita_ref Yita_ref_cell=cell(Np,1); % ===========这里命名应该是Y_out_ref_cell,因为η的维度是2,不是 Np,但因为输出量Y和横向坐标命名冲突================ T_all=20; % 总的仿真时间,防止计算期望轨迹越界 for p=1:1:Np % 超出仿真时长, if t+p*T>T_all X_DOT=x_dot*cos(phi)-y_dot*sin(phi); X_predict(Np,1)=X+X_DOT*Np*T; z1=shape/dx1*(X_predict(Np,1)-Xs1)-shape/2; z2=shape/dx2*(X_predict(Np,1)-Xs2)-shape/2; Y_ref(p,1)=dy1/2*(1+tanh(z1))-dy2/2*(1+tanh(z2)); phi_ref(p,1)=atan(dy1*(1/cosh(z1))^2*(1.2/dx1)-dy2*(1/cosh(z2))^2*(1.2/dx2)); Yita_ref_cell{p,1}=[phi_ref(p,1);Y_ref(p,1)]; else % 在仿真时长内(正常执行部分) X_DOT=x_dot*cos(phi)-y_dot*sin(phi); % X的斜率,由非线性动力学公式(2.29给出) X_predict(p,1)=X+X_DOT*p*T; % X是由carsim输出的车辆当前纵向坐标,X_predict(p,1)表示下一时刻的纵坐标 z1=shape/dx1*(X_predict(p,1)-Xs1)-shape/2; z2=shape/dx2*(X_predict(p,1)-Xs2)-shape/2; Y_ref(p,1)=dy1/2*(1+tanh(z1))-dy2/2*(1+tanh(z2)); % 下一时刻的横坐标参考值 phi_ref(p,1)=atan(dy1*(1/cosh(z1))^2*(1.2/dx1)-dy2*(1/cosh(z2))^2*(1.2/dx2)); % 下一时刻的横摆角参考值 Yita_ref_cell{p,1}=[phi_ref(p,1);Y_ref(p,1)]; % [phi_rel; Y_ref] end end Yita_ref=cell2mat(Yita_ref_cell); % Y_ref 矩阵规范化 接下来实现 ψ %% ψ PSI PSI_cell=cell(Np,1); for j=1:1:Np PSI_cell{j,1}=C*A^j; end PSI=cell2mat(PSI_cell); 然后是 ξ,这里 ξ 是经过重构的增广矩阵: %% ξ kesi kesi=zeros(Nx+Nu,1); % ξnew(k)=[ξ(k); u(k-1)] kesi(1)=y_dot; kesi(2)=x_dot; kesi(3)=phi; kesi(4)=phi_dot; kesi(5)=Y; kesi(6)=X; kesi(7)=U(1); % u(k-1) GAMMA %% Γ GAMMA GAMMA_cell=cell(Np,Np); % 维度 20*20 for p=1:1:Np; for q=1:1:Np; if q<=p; % 下三角矩阵 GAMMA_cell{p,q}=C*A^(p-q); else GAMMA_cell{p,q}=zeros(Ny,Nx+Nu); end end end GAMMA=cell2mat(GAMMA_cell); 最后是 Φ 的实现比较复杂,首先来看表达式, dk,t 表达式: ξt_hat(k+1):这里需要理解: %% φ PHI % ξt_hat_(k+1) 为求解 PHI 做准备 state_k1=zeros(Nx,1);% 下面开始公式(10-a1)即k+1时刻的值 = k时刻的初始值 + T * k时刻的斜率(公式2.38) state_k1(1,1)=y_dot+T*(-x_dot*phi_dot+2*(Ccf*(delta_f-(y_dot+lf*phi_dot)/x_dot)+Ccr*(lr*phi_dot-y_dot)/x_dot)/m); state_k1(2,1)=x_dot+T*(y_dot*phi_dot+2*(Clf*Sf+Clr*Sr+Ccf*delta_f*(delta_f-(y_dot+phi_dot*lf)/x_dot))/m); state_k1(3,1)=phi+T*phi_dot; state_k1(4,1)=phi_dot+T*((2*lf*Ccf*(delta_f-(y_dot+lf*phi_dot)/x_dot)-2*lr*Ccr*(lr*phi_dot-y_dot)/x_dot)/I); state_k1(5,1)=Y+T*(x_dot*sin(phi)+y_dot*cos(phi)); state_k1(6,1)=X+T*(x_dot*cos(phi)-y_dot*sin(phi)); 因为前面已经定义了雅可比矩阵 a 和 b,现在可以直接写出 dk,t 矩阵形式: % dk 为求解 PHI 做准备 d_k=zeros(Nx,1); % (6,1) d_k=state_k1-a*kesi(1:6,1)-b*kesi(7,1); % 公式(11-b)d_k=ξt_hat_(k+1)-Ak,t * ξt_hat_(k) -Bk,t * u(k-1) 这里还需要重构 d_piao_k: % d_piao_k 为求解 PHI 做准备 d_piao_k=zeros(Nx+Nu,1) % (7,1) d_piao_k(1:6,1)=d_k; % d_piao_k=[dk; 0],见公式(12-a) d_piao_k(7,1)=0; 最终可以求 Φ 矩阵: % PHI 最终求解 PHI_cell=cell(Np,1); % φ(20*7,1) for p=1:1:Np; PHI_cell{p,1}=d_piao_k; end PHI=cell2mat(PHI_cell); 接下来可以实现 E 矩阵 %% E 最终求解 E=zeros(Ny*Np,1);% 源代码名为 error_1 E=Yita_ref-PSI*kesi-GAMMA*PHI; % E=Yref-phi*ξ-Γφ,这里Yita_ref就是Yref H 矩阵 % Q Q_cell=cell(Np,Np); for i=1:1:Np; for j=1:1:Np; if i==j Q_cell{i,j}=[2000 0;0 10000;]; % 分别为横摆角权重、横向位置权重 else Q_cell{i,j}=zeros(Ny,Ny); % Ny = 2 end end end Q=cell2mat(Q_cell); % R R=5*10^5*eye(Nu*Nc); % 松弛因子ρ Row=1000; % H 最终求解 H_cell=cell(2,2); H_cell{1,1}=THETA'*Q*THETA+R; % H = θ'* Q * θ + R H_cell{1,2}=zeros(Nu*Nc,1); H_cell{2,1}=zeros(1,Nu*Nc); H_cell{2,2}=Row; H=cell2mat(H_cell); H=(H+H')/2; % 保证 H 矩阵是严格的对称阵 f 矩阵 f_cell=cell(1,2); f_cell{1,1}=2 * E' * Q * THETA; f_cell{1,2}=0; f=-cell2mat(f_cell); 到目前为止已经实现了全部要素矩阵 H f,接下俩可以开始定义约束矩阵。 约束矩阵 %% 控制量u(k)的约束, A_t=zeros(Nc,Nc); for p=1:1:Nc for q=1:1:Nc if q<=p A_t(p,q)=1; else A_t(p,q)=0; end end end A_I=kron(A_t,eye(Nu)); % 这里A_I就是A_t,因为 Nu=1 Ut=kron(ones(Nc,1),U(1)); Ut = u(k -1) umin=-0.1744; % 前轮偏角的上约束 umax=0.1744; % 前轮偏角的下约束 Umin=kron(ones(Nc,1),umin); Umax=kron(ones(Nc,1),umax); 输出量 Y(k) 的约束形式: %% 输出量约束 ycmax=[0.21; 5]; % 横摆角和纵向位置的约束 ycmin=[-0.3;-3]; Ycmax=kron(ones(Np,1),ycmax); Ycmin=kron(ones(Np,1),ycmin); u(k) 和 Y(k) 约束的增广混合形式: % 结合控制量约束和输出量约束 A_cons_cell={A_I zeros(Nu*Nc,1);-A_I zeros(Nu*Nc,1);THETA zeros(Ny*Np,1);-THETA zeros(Ny*Np,1)}; b_cons_cell={Umax-Ut;-Umin+Ut;Ycmax-PSI*kesi-GAMMA*PHI;-Ycmin+PSI*kesi+GAMMA*PHI}; A_cons=cell2mat(A_cons_cell);%(求解方程)状态量不等式约束增益矩阵,转换为绝对值的取值范围 b_cons=cell2mat(b_cons_cell);%(求解方程)状态量不等式约束的取值 Δu(k) 的约束,也就是QP求解方程的标准状态量X的约束: %% 控制增量约束 delta_umin=-0.0148*0.4; % 前轮偏角变化量的下约束 delta_umax= 0.0148*0.4; % 前轮偏角变化量的上约束 delta_Umin=kron(ones(Nc,1),delta_umin); delta_Umax=kron(ones(Nc,1),delta_umax); M=10; % ε的上界 lb=[delta_Umin;0]; % [Δu(k);ε]的增广下界约束 lb ub=[delta_Umax;M]; % [Δu(k);ε]的增广上界约束 ub quadprog 求解器 调用 matlab 自带的二次规划求解器 quadprog 进行求解,这部分是求解器的核心 %% quadprog求解器 options = optimset('Algorithm','interior-point-convex');% 选用内点法求解 x_start=zeros(Nc+1,1); % [Δu(k);ε]的初始值为 0 [X,fval,exitflag]=quadprog(H,f,A_cons,b_cons,[],[],lb,ub,x_start,options); % [Δu(k);ε]的解存放在变量 X 中,包含未来Nc个时间点的Δu(k+i) 结果处理,将计算结果 u(k) 输出到carsim中: %% 计算输出 u_piao=X(1); % 从Nc个未来时刻的Δu(k+i)中提取第一个时刻的Δu(k)作为当前时刻的最优解 U(1)=kesi(7,1)+u_piao; % 这里kesi(7,1)是u(k-1),加上Δu(k),则为当前时刻实际输出u(k) sys= U; % 这里的 U 作为simulink的输出量,直接复制给carsim,进行前轮转角控制 toc % 一个完整的控制周期计时结束 现在已经实现了matlab全部的代码,下一节将进行联合仿真。 3. carsim、simulink联合仿真 本节主要以实例讲解通过搭建 simulink/carsim联合仿真平台,对设计的MPC控制器进行验证。下图是基于动力学模型的MPC轨迹跟踪控制器进行carsim与simulink联合仿真的实例。carsim版本是8.02,matlab版本是2018a。 3.1 Carsim 设置 包括车辆参数设置、仿真工况设置、输入输出接口设置、仿真结果查看。 3.1.1 车辆参数设置 接下来就是车辆参数的具体设置,包括车辆尺寸信息和轮胎信息。 返回车辆参数设定界面,选择悬架和轮胎型号。 3.1.2 仿真工况设置 3.1.3 输入输出设置 由于本章的轨迹跟随为横向控制,只对前轮转角进行控制,所以carsim的输入端口选择车辆的四个轮胎的转角。其中2个前轮的转角由控制器提供,2个后轮的转角固定为0.0°,输出端口包括动力学系统的6个状态量和2个前轮的滑移率,共8个输出量。 这时就实现了下图所示的 carsim 和 simulink 之间的数据流传输: 3.1.4 仿真结果:图形曲线 新建数据集: 添加车辆质心的横向位置 Y 关于 X 的图像: 添加横摆角 φ 关于 纵向位置 X 的图像: 点击 Plot 开始绘图 carsim 图形曲线与 simulink 采集的数据对比,结果完全一致: 3.1.5 仿真结果:动画效果 回到主界面,在下拉列表中选择视角,或者新建自定义数据集: 进入视角设定界面,为了展示双移线的跟踪效果,这里选择拖影效果,即 Ghost Trail Images ,选择拖影数量、时间间隔,将观测视角设定成车身起始点后方的固定视角: 跟踪动画效果如下,可以观察到车辆实际的双移线运动轨迹: 3.2 simulink 仿真 3.2.1 carsim 路径添加 重启计算机后可在 MATLAB 的 Simulink Library Brower 中找到 Carsim 模块。 3.2.2 Simulink 搭建 首先确保matlab 安装了自动驾驶工具包 部分 matlab 版本不能直接显示,这里要点 Fix 然后选第二项 这时就可以添加 carsim s-function 模块 下面是搭建完成的 simulink 完整模块 在 s-function中编辑m文件 3.2.3 仿真结果 基于动力学模型的模型预测控制器主要用于较高速下的轨迹跟踪。在这种情况下对于控制器的评价不仅仅是跟踪精度,还需要重点考虑跟踪过程中的稳定性。在普通车轮形式稳定性的测试中,双移线工况是常用的测试路段。双移线参考轨迹如下图所示,由参考横向位置Yref和参考横摆角φre成,两者都为总关于纵向位置Y 的非线性函数: 在车速为30 km/h,道路摩擦系数为1的工况下,小车轨迹跟踪的仿真结果如下图,可以看出实际运行轨迹与双移线轨迹基本一致: 这里可以看到控制量被约束在限制范围内 4 不同工况下仿真结果 所设计的主动转向跟踪控制器以车辆前轮偏角作为控制器的输入,控制目标是通过不断减少与参考轨迹的偏差,跟踪参考轨迹。 4.1 控制系统对路面附着条件的鲁棒性 无人驾驶车辆在不同附着条件的道路上(如:干燥路面、湿滑路面)行驶时,车辆自身动力学参数,如轮胎侧偏刚度等将会发生变化,同时也会出现地面提供的侧向力不足的情况。这给控制器的性能带来一定的挑战。 若附着条件较差,地面不能提供足够的侧向力,车辆转向时横摆角会出现较大的偏差,轨迹跟踪控制器能够及时修正偏差,最终将偏差收敛为0。且跟踪过程中车辆的控制量及控制增量都处于约束范围内。软约束的加入能够保证系统在给定时间内得到可行解,所以控制系统能够在不同附着条件下较好地跟踪期望轨迹,且具备良好的稳定性。 Carsim 路面附着系数修改指导: 选择附着系数,通常干燥路面附着系数为0.7 ~ 1,湿滑路面附着系数为0.4左右 4.2 控制算法对速度的鲁棒性 很多控制器往往需要针对不同的行驶速度确定不同的控制参数,而模型预测控制器能够根据建立的车辆模型预测系统未来的输出,对车速的变化具有很强的鲁棒性。 主动转向系统仿真实验分别在10m/s 20m/s 和 30m/s的速度下行驶,道路附着条件良好,附着系数为0.8,控制器所采用的参数为T=0.05, Np=15,Nc=10。 从结果可以看出,速度越高,控制量的增量就越大,但不超过约束范围。各动力学约束保持在区间范围内,质心侧偏角则远低于极限范围,表明车辆行驶非常平稳,车速增加并不会导致车辆稳定性下降。 4.3 不同设计参数对控制器的影响 不同参数对于控制器性能的影响有所差异。对于模型预测控制器来说,最重要的设计参数就是预测时域和控制时域。采用较小的预测时域和控制时域会导致跟踪偏差较大,但对于提升控制系统的实时性效果明显。 关注博主即可阅读全文 优惠劵 @Drakie 关注 关注 111 点赞 踩 575 收藏 觉得还不错? 一键收藏 知道了 58 评论 基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记 车辆线性时变预测模型推导,MPC控制器设计、matlab代码逐行分析、carsim联合仿真教程 复制链接 扫一扫 专栏目录 58 条评论 您还未登录,请先 登录 后发表或查看评论 carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 05-23 carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于弯道道路,弯道车道保持,弯道变道 carsim内规划轨迹可视化 Carsim2020.0 Matlab2017b carsim与matlab联合仿真_模型预测控制算法_无人车辆轨迹跟踪_tracking control automotive 04-30 通过carsim与matlab联合仿真,基于模型预测控制算法的无人车辆轨迹跟踪(内含五个matlab编程代码)(Through simulation of CarSim and MATLAB, achieving trajectory tracking control of intelligent automotive based on MPC (containing five matlab programming code)) 混合A*运动规划算法:路径规划和路径跟踪-MPC-LQR-PID算法 阿利同学的博客 01-20 1439 自动驾驶车辆的混合A*运动规划算法:路径规划和路径跟踪-MPC-LQR-PID算法 MPC轨迹跟踪控制 CHD_Apple的博客 10-16 605 mpc算法验证,已跑通,算法代码分块注释, 模型预测控制器(MPC)系列: 1.建立车辆横向动力学模型 橘子的控制小屋 02-20 7931 Hi All 新年挖新坑,今日开启船新连载.内容是无人车的横向控制,整体涵盖从0-1为车辆横向控制设计MPC控制器设计与MPC+MRAC耦合控制.大家有问题,有兴趣可以在评论区多多交流. 车辆横向动力学模型 引言 首先我们要问:针对车辆横向控制的问题,我们为什么需要建立动力学模型? 简单来说,当车辆在较高速度下行驶时,运动学模型(自行车模型)中提出"汽车轮胎速度方向与车辆朝向相同"的假设不再成立.车辆受到的横向力将不可忽视,如向心力将随着速度的增大而平方倍地增大.因此引入动力学模型,旨在建立更高阶量之间的联 matlab carsim联合仿真 运用pid算法对圆弧轨迹跟踪控制 05-17 针对毕业论文,提供一种思路和方法,算法采用pid,在carsim中进行验证 模型预测控制实现轨迹跟踪matlab脚本程序,可直接运行 06-30 该模型采用模型预测控制方法(MPC),实现道路场景的轨迹跟踪,实现实时跟踪并达到预设轨迹 自动驾驶控制算法——车辆动力学模型 liumengxie的博客 04-02 967 车辆动力学模型(2自由度模型) 考虑车辆 y 方向和绕 z 轴的旋转,可以得到车辆2自由度模型,如下图: may=Fyf+Fyr(2.1) ma_y = F_{yf} + F_{yr} \tag{2.1} may=Fyf+Fyr(2.1) Izψ¨=lfFyf−lrFyr(2.2) I_z\ddot\psi = l_fF_{yf} - l_rF_{yr} \tag{2.2} Izψ¨=lfFyf−lrFyr(2.2) 经验公式可知,轮胎侧向力和速度偏角成正比,前后各两个轮胎,故有(根 simulink中s-function使用 热门推荐 世事洞明皆学问 01-11 6万+ s-function是用于单输入单输出系统模块。多输入多输出可以通过Mux跟Demux对信号进行组合和分离 转自:http://blog.sina.com.cn/s/blog_4b013fb10100nbdm.html 最近看了一下无刷直流电机的相关概念及仿真,看到大多数的文献仿真中都使用到了S函数,因此下了点资料看了一番,在本博文中简单地说一下S函数的概念及使用。 S函 carsim 与 matlab 联合仿真环境搭建 weixin_48434278的博客 04-04 511 点击下拉菜单,选择第二个 “Link to New Dataset”,出现一个新的对话框,在“Title for new dataset”中设置一个名称,然后点击创建。回到主页面,点击“Send to Simulink”,会自动打开之前创建的空白simulink,找到相应的模块拉入simulink。在下拉菜单中可以看见新建的分组以及具体的设置,点击“hello”找一个自己方便的地方创建一个空白的simmulink模板。在里面进行配置目录如图,同时配置输入输出接口。之后就可以愉快的仿真了。 基于MATLAB\simulink和carsim的联合仿真 m0_73134033的博客 03-20 2042 小罗哥今天将为大家带来关于carsim和simulink联合仿真的文章,这种联合仿真的思想是使用carsim提供车辆模型,simulink搭建控制器模型,以达到控制车辆模型的节气门,制动液缸的压力,转向盘角度等来对汽车进行控制。 纯跟踪carsim和matlab联合仿真模型 02-17 压缩包包括carsim用到的cpar文件以及matlab的simulink模型和S-function脚本文件,纯跟踪算法作为车辆控制的入门级控制算法,很有必要了解学习。目前主流的轨迹跟踪方法有两类,基于几何的追踪方法和基于模型预测的方法,纯追踪就是基于几何追踪的方法。纯跟踪算法虽然在理论研究方面难有较大创新,但是在实际应用领域还是有较多使用的。纯跟踪算法(pure pursuit)的思想就是:把阿克曼转向的车辆抽象成自行车两轮模型,构建前轮转角和后轴曲率的约束关系,然后以车后轴为切点,车辆纵向车身为切线,控制车辆后轴中心经过轨迹上一系列的点。 基于模型预测控制(MPC)无人驾驶汽车轨迹跟踪控制算法,基于MATLAB/simulink与carsim联合仿真 11-09 基于模型预测控制(MPC)无人驾驶汽车轨迹跟踪控制算法,基于MATLAB/simulink与carsim联合仿真,包含cpar,par,slx文件,支持MATLAB2018和carsim2019版本,先导入capr文件,然后发送到simulink,可支持修改代码,运用... 基于模型预测控制的车辆轨迹跟踪问题附MATLAB代码 matlab_dingdang的博客 06-04 80 无人驾驶车辆运动规划与控制需要通过对车辆运动学或者动力学系统的控制来实现。建立合理的车辆系统模型不仅是设计模型预测控制器的前提,也是实现车辆道路跟踪功能的基础。因此,在建立模型预测控制器时,必须根据无人驾驶车辆的具体行驶工况,通过选取合适的控制变量,建立能够准确描述无人驾驶车辆运动关系约束的运动学模型。车辆在地面运动的动力学过程是非常复杂的,为了尽量描述车辆运动,需要建立复杂的微分方程组,并用多个状态变量来描述其运动。 基于模型预测控制的车辆路径跟踪研究(Matlab代码实现) weixin_67304359的博客 11-01 42 在这种研究中,模型预测控制(MPC)是一种基于模型的控制方法,通过建立车辆的动力学模型和路面情况等环境信息来预测车辆未来的行驶轨迹,并在保证车辆稳定性的前提下寻找最优控制策略。在车辆路径跟踪研究中,模型预测控制方法通过对车辆状态、动力和环境信息等进行综合优化,实现更加可靠、高效、安全和舒适的车辆行驶控制。基于模型预测控制的车辆路径跟踪研究是智能驾驶领域的一个重要研究方向,可以实现对自动驾驶车辆的精准控制和路径规划。博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。行百里者,半于九十。 路径跟踪算法之模型预测控制(MPC)跟踪 chen_mp的博客 05-01 1万+ 路径跟踪算法之模型预测控制(MPC)跟踪 1.MPC简介 模型预测控制(以下简称 MPC)是一种依赖于系统模型进行数学优化的复杂控制器。它利用优化算法计算有限时间范围内一系列的控制输入序列,并优化该序列,但控制器仅执行序列中的第一组控制输入,然后再次重复该循环。MPC 主要分为 3 个关键步骤:模型预测、滚动优化、反馈校正。 2.MPC在轨迹跟踪过程中的应用 在轨迹跟踪应用领域,通常 MPC 建模可根据机器人的控制方式选择基于运动学运动状态方程建模或者基于动力学运动状态方程建模。前者是根据车辆转向的几何学角 预测控制(一):MPC轨迹跟踪 qq_45443570的博客 07-01 4961 本文先讲解MPC如何应用于差速机器人,然后使用MATLAB进行仿真测试。 MPC自动驾驶横向控制算法实现 c++ 最新发布 BigDavid123的博客 02-21 1318 MPC自动驾驶横向控制算法实现c++ carsim+matlab+prescan联合仿真 09-06 Carsim、Matlab和Prescan都是用于车辆动态仿真的工具。Carsim是一种车辆动力学仿真软件,用于模拟车辆在不同道路和行驶条件下的运动行为。它模拟了车辆的动力系统、车辆控制系统和驱动环境,并提供了准确的车辆动态性能分析结果。 Matlab是一种数学计算和仿真软件,以其强大的数值计算和仿真能力而闻名。它可以与Carsim结合使用,用于分析和处理Carsim模拟结果,并进行更加复杂的算法开发和优化。 Prescan是一种先进的虚拟仿真平台,用于汽车感知、控制和测试。它可以生成逼真的虚拟环境,并模拟车辆在其中的行驶过程。Prescan还可以与Carsim和Matlab进行集成,使车辆动力学仿真与实际环境感知和控制系统交互更加紧密。 通过Carsim、Matlab和Prescan的联合仿真,我们可以更加准确地模拟和分析车辆在不同场景下的行驶情况。首先,我们可以使用Carsim进行车辆动力学仿真,得到车辆在不同驾驶条件下的动态性能,如加速度、制动距离等。然后,我们可以将Carsim模拟结果导入Matlab进行进一步分析和处理,比如开发车辆控制算法,优化车辆性能等。最后,我们可以将Matlab开发的算法与Prescan进行集成,模拟车辆在虚拟环境中的感知和控制过程,以及与其他交通参与者的交互。 通过Carsim、Matlab和Prescan的联合仿真,我们可以更好地理解车辆动力学行为,开发更准确和高效的车辆控制系统,并进行更加全面的场景测试和评估。 “相关推荐”对你有帮助么? 非常没帮助 没帮助 一般 有帮助 非常有帮助 提交 @Drakie CSDN认证博客专家 CSDN认证企业博客 码龄5年 暂无认证 6 原创 8550 周排名 127万+ 总排名 8万+ 访问 等级 662 积分 7548 粉丝 375 获赞 170 评论 2190 收藏 私信 关注 热门文章 树莓派+ROS+Arduino造一台导航小车(完整代码+硬件调试) 29154 基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记 21385 带避障功能的MPC局部路径规划+跟踪控制学习笔记 14265 Simulink + Carsim 验证车辆运动学模型 5079 递推最小二乘法RLS的轮胎侧偏刚度估计(原书缺失代码已补全) 4459 分类专栏 无人驾驶 6篇 系统控制 最新评论 基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记 扶蘇 ╰不語: 这个偏转角的约束为撒要乘以0.4啊?delta_umin=-0.0148*0.4; 树莓派+ROS+Arduino造一台导航小车(完整代码+硬件调试) Nav.: 博主你好,我是按照赵老师的视频做的小车,我路径规划时一些参数也都重新设置过了,但是为什么我的小车运行一段时间会偏离目标点呢? 递推最小二乘法RLS的轮胎侧偏刚度估计(原书缺失代码已补全) weixin_42915864: 和纵向力耦合时还能估计吗? 基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记 Marigold36: 请问simulink里面的 f(u)应该怎么写 基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记 weixin_44738769: 博主您好,方便分享一下模型不,按照您的教程,我没有搞定 您愿意向朋友推荐“博客详情页”吗? 强烈不推荐 不推荐 一般般 推荐 强烈推荐 提交 最新文章 树莓派+ROS+Arduino造一台导航小车(完整代码+硬件调试) 高速无人驾驶车辆防滑移MPC控制 学习笔记(未完结) Simulink + Carsim 验证车辆运动学模型 2022年6篇 目录 目录 分类专栏 无人驾驶 6篇 系统控制 目录 评论 58 被折叠的 条评论 为什么被折叠? 到【灌水乐园】发言 查看更多评论 添加红包 祝福语 请填写红包祝福语或标题 红包数量 个 红包个数最小为10个 红包总金额 元 红包金额最低5元 余额支付 当前余额3.43元 前往充值 > 需支付:10.00元 取消 确定 下一步 知道了 成就一亿技术人! 领取后你会自动成为博主和红包主的粉丝 规则 hope_wisdom 发出的红包 实付元 使用余额支付 点击重新获取 扫码支付 钱包余额 0 抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 余额充值 基于模型预测(MPC)的无人驾驶汽车轨迹跟踪_mpc模型预测控制轨迹跟踪c++代码-CSDN博客 基于模型预测(MPC)的无人驾驶汽车轨迹跟踪 最新推荐文章于 2023-12-29 23:19:46 发布 IR机器人 最新推荐文章于 2023-12-29 23:19:46 发布 阅读量2.8w 收藏 378 点赞数 42 分类专栏: 无人驾驶 文章标签: 无人驾驶 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_40870689/article/details/87971282 版权 无人驾驶 专栏收录该内容 1 篇文章 5 订阅 订阅专栏 先推荐下自己的公众号——Joe学习笔记,公众号上会不定期更新一些文章,主要是自己平时学到的知识,内容包括自动驾驶、计算机视觉、人工智能和机器人技术。我会第一时间把文章更新在公众号上,欢迎大家订阅和分享!文章是从公众号搬过来的。 新出了一个关于机器人路径规划和轨迹优化的视频课程,介绍常用的路径规划算法和轨迹优化算法,感兴趣的可以点击b站链接观看。更新中。。。 https://www.bilibili.com/video/BV1yT4y1T7Eb 最近,自动驾驶技术挺火的,前半学期上现代控制原理我们小组做了个相关的大作业,第二篇文章就分享一下基于模型预测(MPC)的自动驾驶汽车轨迹追踪。 自动驾驶汽车一般分为感知、决策和控制三部分。感知部分有很多内容,以后可能会写一些文章简单介绍,通俗的讲就是感知汽车周围的环境。决策即为根据感知的环境信息,产生遵守交通规则的驾驶过程,其中很大一部分为路径规划。路径规划有很多方法,第一篇文章介绍了基于遗传算法的路径规划方法,感兴趣的朋友可以参阅上一篇文章。本文的重点为怎么通过控制汽车的方向盘、油门和刹车对已经规划的路径进行跟踪。常用的控制方法就是经典的PID控制,网上有一篇挺详细的关于自动驾驶汽车的PID控制文章,感兴趣的朋友可以点击此链接。 http://www.360doc.com/content/18/0801/20/48488381_774988784.shtml PID控制存在积分环节,控制时具有滞后性,而自动驾驶技术对实时性的要求非常高,因此PID控制不太适用于自动驾驶技术。本文介绍的是一种基于模型预测的自动驾驶汽车轨迹追踪方法,不存在滞后性且不需要像PID控制那样调节参数。本文使用matlab/simulink进行仿真试验,首先介绍车辆运动学建模。 在车辆运动学建模时先简化汽车,仅保留汽车的一半,简单的用前后轮和车轴表示,即为自行车模型。车轮的转角用delta表示(由于不知道希腊字母怎么打,都用英文表示),车轴长用L表示,汽车转弯可以近似为后轮绕某一点做圆周运动。转弯半径R通过直角三角形关系推导出。车辆航向变化的角度为车辆行走的距离(即圆弧长度)除以转弯半径,其对时间的导数即为航向的角速度,基本的推导如下图所示。 以汽车后轮为原点建立直角坐标系,其纵向速度、横向速度和航向角速度如下图所示,并用状态方程的形式表示。 当输入汽车的速度v和车轮转角delta,通过上述的公式,再积分后即可求得汽车的位置x、y和航向角fai,simulink仿真如下图所示,这个在后面有用。 刚得到的状态方程有sin,cos和乘法操是一个非线性的方程,因此要先进行线性化,线性化使用的是泰勒展开的方法。下图为生成的路径上的某一点,取生成的路径上的某一点进行泰勒展开,取第一阶即可完成线性化的过程。后面的计算过程是在离散化后操作的,因此还需要离散化操作,线性化和离散化的结果如下所示。 线性化后的结果: 离散化后的结果: 下面正式开始介绍控制器的设计。此控制器的名字为基于模型预测的方法,重点为预测二字,因此首先根据汽车的初始状态,利用上式离散状态方程预测接下来一段时间汽车的路径。下图中黑色的虚线表示规划的轨迹,红色的虚线为预测的轨迹。 进行轨迹跟踪时希望规划的轨迹和预测的轨迹重合,因此需要设计一个目标函数,也可以叫代价函数,函数值越大表示轨迹重合度越低,因此最终的目标是最小化目标函数。目标函数较复杂,下图给出了较形象的解释,也标出了参考的来源,感兴趣的读者可以看具体的论文。 根据实际汽车的物理条件限制目标函数的未知量存在约束,下图是北京理工大学出版社出版的《无人驾驶车辆模型预测控制》中实际车辆的参数(本文的方法也是参考于此书),并根据参数求得的约束。 由于控制器预测轨迹,所以不存在延时效应,符合自动驾驶技术的实时性要求。整个控制器的框图如下图所示。 有了程序框图接下来就是整体的simulink的仿真,具体的仿真图如下所示,其中的carModel即为上面提到的车辆的运动学simulink仿真。其中的MPC控制器参考书中的代码使用s-Function功能编写的,记得当时和同学抄代码都抄错了好多。 最后就是仿真结果,视频在公众号的文章中——。视频中绿色的线为给定的轨迹,汽车从原点出发,红色为汽车行驶路径。这次代码参考来源于书本,simulink仿真都给出了图片就不放源代码了,想实现的读者可以自己试着抄书上的代码。部分内容参考于互联网,不知道会不会侵权,如果侵权了就删了。 优惠劵 IR机器人 关注 关注 42 点赞 踩 378 收藏 觉得还不错? 一键收藏 知道了 10 评论 基于模型预测(MPC)的无人驾驶汽车轨迹跟踪 先推荐下自己的公众号——Joe学习笔记,公众号上会不定期更新一些文章,主要是自己平时学到的知识,内容包括自动驾驶、计算机视觉、人工智能和机器人技术。我会第一时间把文章更新在公众号上,欢迎大家订阅和分享! 最近,自动驾驶技术挺火的,前半学期上现代控制原理我们小组做了个相关的大作业,第二篇文章就分享一下基于模型预测(MPC)的自动驾驶汽车轨迹追踪。 自动驾驶汽车一般分为感知、决策和控制三... 复制链接 扫一扫 专栏目录 10 条评论 您还未登录,请先 登录 后发表或查看评论 MPC模型预测控制从原理到代码实现 maijuery的博客 09-08 419 mpc模型预测控制从原理到代码实现mpc模型预测控制详细原理推导matlab和c++两种编程实现四个实际控制工程案例:双积分控制系统倒立摆控制系统车辆运动学跟踪控制系统车辆动力学跟踪控制系统包含上述所有的文档和代码。 自动驾驶笔记-轨迹跟踪之①纯跟踪算法(Pure Pursuit) tjuzjc的博客 06-14 5405 阿克曼转向模型&&纯跟踪算法入门学习 无人驾驶差速机器人MPC代码详解 weixin_42496224的博客 12-29 1019 无人驾驶差速机器人MPC代码详解 【基础推导】MPC控制器及其车辆模型详细推导 (附代码链接及详细推导说明) 这里是张聪明,正在学习中,请稍后 06-07 4375 以下为公式车辆状态和线性化等求解过程: 大部分参考于3.b文档,添加了更详细的为什么是这样的公式的碎碎念;主要是感觉用latex打太累了,感觉总是想画一些线之类的,所以就手写了 再也不用担心公式乱码了 hhh;其中@阿信同学参与了常微分方程的推导和一些解释(给我解释了好久 hhh )至此我们已经有了 所有我们需要的部分,接下来对应到代码,以python为例:求A, B, C... 基于ROS的无人车模型预测控制(MPC)C++实现 CUGB_NICET的博客 09-26 2969 最近在做毕业设计的控制器部分,网上关于cpp实现模型预测控制的资料很少,基本都是Matlab/Simulink实现,顺手写一下学习过程。 linux版本模型预测控制mpc C++类 10-12 用C++实现了模型预测控制的算法,拖动轮车型。首先修改了Luca Di Gaspero写的C++库quadprog++,去掉了等式约束,并且增加了矩阵叉乘、求逆、幂运算、块操作、克罗内克乘积等运算。然后根据北理的模型预测控制一书的matlab代码,修改为C++代码,实测计算出的结果和matlab的计算结果一致。因为这是从一个工程中抠出来的,所以有些结构体看不到定义,以其思想为主。有任何问题都可以私聊。 基于运动学模型的轨迹跟踪控制算法——模型预测控制(MPC)法(四)之代码实现 m0_54639819的博客 09-13 5015 基于运动学模型的轨迹跟踪控制算法——模型预测控制(MPC)法(四)之代码实现(m脚本) (KingkWinner——创作不易,转载请标明出处) % carsim中的输出端为X坐标(m)、Y坐标(m)、横摆角(°)、质心处的纵向速度(km/h)、方向盘转角(°) % Matlab 2020b,Carsim 2018.1 function [sys,x0,str,ts] = MY_MPCController3(t,x,u,flag) %构建S-function函数,t为当前的仿真时间,x为状态变量,u是输入 无人车系统(十一):轨迹跟踪模型预测控制(MPC)原理与python实现【40行代码】 热门推荐 昔风不起,唯有努力生存! 12-20 4万+ 前面介绍的PID,pure pursuit方法,Stanley方法都只是利用当前的系统误差来设计控制器。人们对这些控制器的设计过程中都利用了构建模型对无人车未来状态的估计(或者说明利用模型估计未来的运动趋势)。每个控制周期只选择一个目标路点作为跟踪对象,因此,我们也可以说明以上控制器只利用了模型进行向前一步预测。那么如果在更远的未来,参考轨迹变化不是那么平缓,并且有很多弯度小(急)的部分,那么只...... MPC(模型预测控制)控制小车沿轨迹移动——C++实现 qq_42286607的博客 05-26 9984 要求如下图所示,给定一条轨迹,要求控制小车沿这条轨迹移动,同时可以适用于系统带有延时的情况。注意,本篇文章只给出部分C++代码参考。 首先用运动学自行车模型(Kinematic Bicycle Model)对小车建模,设计相应的成本函数(cost function)和约束,之后利用OSQP求解二次规划问题,实现线性时变模型预测控制(Linear Time-Varying MPC)器。... 基于模型预测控制MPC的无人机轨迹跟踪 ymh博客 07-30 7318 模型预测控制MPC 算法主要思想是用优化的方法解决控制和规划问题。 MPC主要分为三部分 建模:系统建模和问题建模 预测:参数空间 状态空间 输入空间 控制:选择最好的策略 算法过程 系统建模 问题建模 优化 控制 基本的MPC过程用MATLAB代码实现 主函数 hw8.m clear all; clc; close all; //初始化状态 p_0 = [0 8 20]; v_0 = [0 0 0]; a_0 = [0 0 0]; K = 20; dt = 0.2; omega = 基于模型预测(MPC)的无人驾驶汽车轨迹跟踪 matlab代码 03-13 基于模型预测(MPC)的无人驾驶汽车轨迹跟踪 matlab代码 matlab仿真实现基于模型预测控制(mpc)的双轮差速运动学轨迹跟踪 05-01 内容:基于双轮差速运动学模型,建立预测模型并离散化,线性化,通过模型预测控制(mpc)实现双轮差速小车对给定轨迹的跟踪。 实现方式:matlab脚本函数(注意:非simulink方式) 基于模型预测控制(MPC)无人驾驶汽车轨迹跟踪控制算法,基于MATLAB/simulink与carsim联合仿真 11-09 基于模型预测控制(MPC)无人驾驶汽车轨迹跟踪控制算法,基于MATLAB/simulink与carsim联合仿真,包含cpar,par,slx文件,支持MATLAB2018和carsim2019版本,先导入capr文件,然后发送到simulink,可支持修改代码,运用... 基于模型预测控制的车辆轨迹跟踪问题的MATLAB仿真 10-02 基于模型预测控制设计的无人驾驶车辆轨迹跟踪问题,内附有MATLAB程序与详细的建模过程,研究车辆转向的同学可以作为参考 chap4 Matlab Code_轨迹跟踪_基于mpc的轨迹跟踪控制器_无人驾驶车辆 09-11 基于运动学模型的轨迹跟踪控制,无人驾驶车辆模型预测控制第二版第四章 Java毕设-基于springboot+Vue的流浪动物管理系统2(附源码,数据库,教程).zip 03-06 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入) Swift 基础库. A collection of Swift extensions and utilities.zip 最新发布 03-06 Swift 基础库. A collection of Swift extensions and utilities.zip 剪映使用教程s240306.pptx 03-06 剪映使用教程s240306.pptx mpc模型预测控制轨迹跟踪simulink 09-08 MPC(Model Predictive Control)模型预测控制在Simulink中的轨迹跟踪是一种常见的控制策略。下面是一个简单的示例,展示了如何在Simulink中实现MPC轨迹跟踪。 首先,我们需要建立一个MPC控制器模块。可以使用Simulink中的StateSpace模块来表示系统的状态空间模型,并将其连接到MPC控制器模块中。 接下来,我们需要定义MPC控制器的参数,如预测时域、控制时域、权重矩阵等。在Simulink中,可以使用MATLAB Function模块或者S-Function模块来实现这些参数的计算。 然后,我们需要将参考轨迹和当前状态输入到MPC控制器中。参考轨迹可以是事先确定的固定轨迹,也可以是实时生成的轨迹。当前状态可以通过传感器获取或者其他方式计算得到。 最后,将MPC控制器的输出作为控制信号输入到系统中,并观察系统的响应。可以使用Scope模块来显示系统的输入和输出信号,以便进行实时监控和调试。 以上是一个简单的MPC轨迹跟踪的Simulink示例,具体实现方式可以根据具体问题进行调整和优化。希望对你有帮助!如果你对MPC或者Simulink有更具体的问题,可以继续提问。 “相关推荐”对你有帮助么? 非常没帮助 没帮助 一般 有帮助 非常有帮助 提交 IR机器人 CSDN认证博客专家 CSDN认证企业博客 码龄6年 暂无认证 6 原创 102万+ 周排名 96万+ 总排名 9万+ 访问 等级 757 积分 290 粉丝 169 获赞 95 评论 1133 收藏 私信 关注 热门文章 基于遗传算法的移动机器人路径规划 38468 基于模型预测(MPC)的无人驾驶汽车轨迹跟踪 28575 微分平坦(differential flatness) 14477 opencv-基于颜色的目标检测(含代码) 8272 初级版无人驾驶车道线检测(上)(含代码) 2175 分类专栏 机器人技术 2篇 计算机视觉 3篇 无人驾驶 1篇 参考资料 最新评论 微分平坦(differential flatness) 海蓝菌: 有个地方不太懂,请问博客微分平坦中的车辆偏航是如何通过平坦输出表示的?? 微分平坦(differential flatness) 海蓝菌: 写的太牛了,看完博主的帖子 彻底明白了机器人规划中的微分平坦是啥意思了 太牛了 基于模型预测(MPC)的无人驾驶汽车轨迹跟踪 2301_80066762: 参数如何设置呀 基于模型预测(MPC)的无人驾驶汽车轨迹跟踪 嵌入式拯救我2022: 你会了吗 基于模型预测(MPC)的无人驾驶汽车轨迹跟踪 Lv1的成长: 请问圆形轨迹的那几个参数是怎么确定的,比如圆半径为25,车速为5,前轮的参考转角vd2为啥是0.104 大家在看 Spring事务失效的八种场景 243 Android studio 安装后无法使用,显示错误的解决办法! 1 英语 翻译 时态及语法检查 句子分层结构 例句 讯飞星火远远超越GPT4 AI大模型测评 551 数组常见算法 990 【无功功率控制】连接到无限电网的小型风电场的无功功率控制(Simulink) 685 最新文章 微分平坦(differential flatness) opencv-基于颜色的目标检测(含代码) 初级版无人驾驶车道线检测(下)(含代码) 2019年6篇 目录 目录 分类专栏 机器人技术 2篇 计算机视觉 3篇 无人驾驶 1篇 参考资料 目录 评论 10 被折叠的 条评论 为什么被折叠? 到【灌水乐园】发言 查看更多评论 添加红包 祝福语 请填写红包祝福语或标题 红包数量 个 红包个数最小为10个 红包总金额 元 红包金额最低5元 余额支付 当前余额3.43元 前往充值 > 需支付:10.00元 取消 确定 下一步 知道了 成就一亿技术人! 领取后你会自动成为博主和红包主的粉丝 规则 hope_wisdom 发出的红包 实付元 使用余额支付 点击重新获取 扫码支付 钱包余额 0 抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 余额充值 《无人驾驶车辆模型预测控制》之基于动力学的MPC设计_基于运动学的mpc和基于动力学的mpc-CSDN博客 《无人驾驶车辆模型预测控制》之基于动力学的MPC设计 最新推荐文章于 2023-03-21 19:38:16 发布 Devil's_Detail 最新推荐文章于 2023-03-21 19:38:16 发布 阅读量7.1k 收藏 132 点赞数 19 分类专栏: 自动驾驶控制 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/run_taozi/article/details/106081523 版权 自动驾驶控制 专栏收录该内容 6 篇文章 19 订阅 订阅专栏 目录 写之前的话: 1. 车辆模型的建立 2. 车辆模型的线性化 3. 车辆模型离散化 4. 预测模型的建立 5.目标函数及约束 写之前的话: 前面我写到一些列的文章: 《无人驾驶车辆模型预测控制》之车辆运动学模型 《无人驾驶车辆模型预测控制》之基于运动学的MPC设计(一) 《无人驾驶车辆模型预测控制》之基于运动学的MPC设计(二) 本篇将介绍基于车辆动力学的MPC设计:主要从动力学模型的建立、预测模型的建立、目标 函数的建立、约束的建立来分别介绍。关于模型预测理论公式的推导细节可见 《无人驾驶车辆模型预测控制》之基于运动学的MPC设计(二) 0 仿真模型的搭建与结果 10m/h 20m/s 采样步长是0.05 20m/s 采样步长是0.02 针对结果参数调节,两个重要的设计参数是预测时域和控制时域,一般预测时域越长,控制精度越好,但是计算耗时就越大。合理的调节这两个参数,将有利于控制效果。同时也发现,选择不同的采样时间对控制精度同样有着重要影响。当Ts = 0.02s 时,跟踪误差更小。 1. 车辆模型的建立 经过整理、简化轮胎力为线性区,得到: 2. 车辆模型的线性化 3. 车辆模型离散化 4. 预测模型的建立 5.目标函数及约束 至此完成理论公式的建立。 这篇文章也不错,介绍Apollo的MPC设计,链接如下,方便大家参考: Apollo代码学习(六)—模型预测控制(MPC) 优惠劵 Devil's_Detail 关注 关注 19 点赞 踩 132 收藏 觉得还不错? 一键收藏 知道了 20 评论 《无人驾驶车辆模型预测控制》之基于动力学的MPC设计 目录写之前的话:1. 车辆模型的建立2. 车辆模型的线性化3. 车辆模型离散化4. 预测模型的建立5.目标函数及约束写之前的话:前面我写到一些列的文章:《无人驾驶车辆模型预测控制》之车辆运动学模型《无人驾驶车辆模型预测控制》之基于运动学的MPC设计(一)《无人驾驶车辆模型预测控制》之基于运动学的MPC设计(二)本篇将介绍基于车辆动力学的MPC设计:主要从动力学模型的建立、预测模型的建立、目标 函数的建立、约束的建立来分别介绍。关于模型预测理论公式... 复制链接 扫一扫 专栏目录 基于MPC控制器的无人驾驶车辆模型控制仿真,matlab2021a测试。 04-30 基于MPC控制器的无人驾驶车辆模型控制仿真 %控制系统基本情况介绍 Nx = 3; %状态量个数 Nu = 2; %控制量个数 [Nr,Nc] = size(Xout); %Nr=100,Nc=3 Tsim = 20; %仿真时间 X0 = [1.5 0 -pi/2]; %车辆初始状态 L = 1; %车辆轴距 vd1 = pi*4/(628*0.05); %参考系统的纵向速度 vd2 = -2*pi/(628*0.05); %参考系统前轮偏角 无人驾驶车辆模型预测控制 第二版 程序代码 北理工 12-23 无人驾驶车辆模型预测控制 第二版 程序代码 北理工 20 条评论 您还未登录,请先 登录 后发表或查看评论 基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记 Drakie的博客 07-01 2万+ 车辆线性时变预测模型推导,MPC控制器设计、matlab代码逐行分析、carsim联合仿真教程 MPC(3)常用车辆模型 qq_24649627的博客 10-31 1万+ 上一篇中介绍了,模型预测控制的理论方面基础,无人驾驶车辆采用MPC控制方法来进行相关控制的时候,就考虑结合车辆的运动学以及动力学的相关约束。而且,如果在路径规划阶段(Local Planner)就考虑到车辆运动学和动力学约束,则车辆运动跟踪性能会更好。这篇文章就主要介绍的就是,前轮驱动小轿车目前常用的几种车辆运动学以及动力学模型。 阿克曼模型 车辆低速行驶时,轮胎不会产生侧滑,同时,车辆转向时,左... 模型预测控制的缺点_自动驾驶汽车规避转向的模型预测控制 weixin_39758229的博客 11-22 563 编者按:自动驾驶车辆的研究可分为感知、定位、决策、规划、控制等层面,其中控制层的任务是根据规划层输出的参考轨迹,结合车辆自身状态,控制车辆跟踪参考轨迹形式,实现车辆的纵、侧向控制。车辆的纵向控制主要实现速度的跟踪,侧向控制则实现路径的跟踪。近年来,基于车辆运动学与动力学模型的模型预测控制(MPC)理论在自动驾驶车辆控制方面得到了广泛的应用,MPC基于预先设定的系统模型,通过滚动优化,解决... 模型预测控制(MPC)的公式推导与理解 qq_40241332的博客 03-23 2万+ 在本文中,主要是针对线性无约束系统,设计模型预测控制算法。首先给出一个离散的数学模型,再根据模型预测控制“三步走”战略,实现控制器的设计。 “三步走”战略: 预测系统未来动态 求解优化问题 解第一个元素作用于系统 模型: 我们引入离散时间的状态空间模型,如下 其中为系统内部状态变量;为系统矩阵;为控制输入矩阵;为控制输入变量;为外部干扰输入矩阵;为可测外部干扰变量。 ... MPC学习记录 m0_62114628的博客 03-21 370 MPC记录学习,仅供自己学习。 MPC(模型预测控制)控制小车沿轨迹移动——C++实现 qq_42286607的博客 05-26 9984 要求如下图所示,给定一条轨迹,要求控制小车沿这条轨迹移动,同时可以适用于系统带有延时的情况。注意,本篇文章只给出部分C++代码参考。 首先用运动学自行车模型(Kinematic Bicycle Model)对小车建模,设计相应的成本函数(cost function)和约束,之后利用OSQP求解二次规划问题,实现线性时变模型预测控制(Linear Time-Varying MPC)器。... 模型预测控制(MPC)解析(一):模型 行者无疆的博客 04-03 1万+ 本文首先使用生活中的例子讲解预测控制的原理,然后建立状态空间模型,推导出增量式控制的增广模型,然后建立代价方程,将控制问题转化成优化问题,通过解析解的方式推倒出最优解,最后使用MATLAB进行仿真,验证了正确性。... 模型预测控制器(MPC)系列: 1.建立车辆横向动力学模型 橘子的控制小屋 02-20 7931 Hi All 新年挖新坑,今日开启船新连载.内容是无人车的横向控制,整体涵盖从0-1为车辆横向控制设计MPC控制器设计与MPC+MRAC耦合控制.大家有问题,有兴趣可以在评论区多多交流. 车辆横向动力学模型 引言 首先我们要问:针对车辆横向控制的问题,我们为什么需要建立动力学模型? 简单来说,当车辆在较高速度下行驶时,运动学模型(自行车模型)中提出"汽车轮胎速度方向与车辆朝向相同"的假设不再成立.车辆受到的横向力将不可忽视,如向心力将随着速度的增大而平方倍地增大.因此引入动力学模型,旨在建立更高阶量之间的联 无人驾驶车辆模型预测控制 10-14 课程代码,包含第三章的部分代码,有修正。 无人驾驶车辆模型预测控制代码 03-04 无人驾驶车辆模型预测控制代码 无人驾驶模型预测控制(五)-基于动力学模型的无人驾驶车辆主动转向控制 qq_41986495的博客 03-07 7303 理论基础 各种概念 非线性系统:状态变量之间有相乘,无法表达为x点=Ax+Bu形式 根据是否有时间t作为参数,还分为非线性时变和非线性定常系统。 线性系统,可以表达为线性形式。 线性时变:参数随时间变化A(t),B(t) 线性定常:参数不随时间变化 线性误差方程 状态变量:速度和位置量(共六个),控制变量:前轮偏转角 根据小角度假设的动力学模型,进行泰勒展开,可等到以误差为状态变量的线性时变方程。... 自动驾驶——模型预测控制(MPC)理解与实践 热门推荐 wisdom_bob 07-12 4万+ 当时在做路径跟踪、路径规划时,使用了MPC,通过项目的应用,对于MPC建立了一定的认识,但是一段时间过去后,认知又渐渐模糊了,当时学习过程中也是看了许多人的blog及代码才弄清楚,这里试图从理论到实践,对MPC进行一次回顾整理。 什么是MPC ... MPC模型预测控制设计过程及原理(待完善) q384515674的博客 09-11 2747 最近要做MPC的项目,由于之前没全面了解过。所以参考了一些学习资源,在这里总结记录下 MPC设计步骤 一 、运动学/动力学方程的建立 根据所要控制的量,建立相关等式,最终格式为 自动驾驶中的模型预测控制(Model Predictive Control) frank的博客 04-08 6497 一、什么是模型预测控制(MPC) MPC主要用于车道线的追踪,保持车辆轨迹相对平稳。 MPC将车道追踪任务重构成一个寻找最优解的问题,优化问题的最优解就是最优的轨迹。我们每走一步都会按照目前的状态求解一个最优化的轨迹,然后按照轨迹走一步,紧接着继续按照传感器获得的新值继续求解最优轨迹,保证轨迹跟 我们要追踪的车道线的最大拟合。这个过程中,因为我们每动一步,就是一个时间片段,因为各种误差的存在,导致... 车辆模型预测控制的概念介绍 m0_46427461的博客 03-21 1593 一、概念辨析 1.全局路径规划:在地图已知的情况下,利用已知的局部信息(eg.障碍物位置、道路边界),确定最优的路径。 局部路径规划:当环境突然变化(如出现未知障碍),根据传感器获得的局部环境信息实时生成路径,用于动态规划。 2.路径跟踪:通过控制车辆的运动,减少车辆与参考路径之间的空间上的误差(不受时间约束)。 轨迹跟踪:同时考虑空间和时间约束。(①局部规划时必考虑了时间信息;②考虑车辆的纵向和横向动力学约束的路径规划,是轨迹规划) 3.运动学约束:车辆低速行驶时,运动学约束影响较大 动力学约 基于MPC轨迹跟踪控制算法 模型预测控制算法 基于车辆动力学模型 m0_73590518的博客 09-06 360 推荐使用carsim8.1版本,matlab2016b。可以实现在不同路面附着系数跟踪期望路径。模型预测控制算法 基于车辆动力学模型。基于MPC轨迹跟踪控制算法。图示为双移线测试工况。 无人驾驶车辆的模型预测控制技术 最新发布 05-12 无人驾驶车辆的模型预测控制技术是一种基于数学模型和预测控制算法的控制方法。它通过对车辆的动力学模型进行建模,并通过传感器获得的实时数据来预测车辆未来的状态和轨迹,然后使用控制器对车辆进行控制。 具体来说,无人驾驶车辆的模型预测控制技术主要包括以下几个步骤: 1. 建立动力学模型:根据车辆的物理特性和运动规律,建立车辆的动力学模型,可以是基于物理学的模型或者基于数据驱动的模型。 2. 预测车辆状态和轨迹:利用车辆传感器获得的实时数据,如GPS、激光雷达、摄像头等,对车辆未来的状态和轨迹进行预测,可以采用滤波算法、Kalman滤波器、贝叶斯网络等方法。 3. 设计控制器:根据预测结果,设计控制器对车辆进行控制,可以采用模型预测控制(MPC)算法、优化控制算法等方法。 4. 实时控制:将控制器输出的指令实时发送到车辆的执行器中,对车辆进行实时控制。 无人驾驶车辆的模型预测控制技术具有高精度、高鲁棒性、适应性强等特点,可以应用于自动驾驶、智能交通等领域。 “相关推荐”对你有帮助么? 非常没帮助 没帮助 一般 有帮助 非常有帮助 提交 Devil's_Detail CSDN认证博客专家 CSDN认证企业博客 码龄5年 暂无认证 18 原创 9万+ 周排名 5万+ 总排名 3万+ 访问 等级 473 积分 116 粉丝 50 获赞 36 评论 247 收藏 私信 关注 热门文章 《无人驾驶车辆模型预测控制》之基于动力学的MPC设计 7156 模型预测控制(MPC)基础理论 4582 《无人驾驶车辆模型预测控制》之车辆运动学模型 3877 《无人驾驶车辆模型预测控制》之基于运动学的MPC设计(二) 2203 《无人驾驶车辆模型预测控制》之加入局部轨迹规划的MPC控制 2037 分类专栏 自动驾驶控制 6篇 ROS 自动泊车仿真场景设计 4篇 C++ 3篇 工具 4篇 读书笔记 1篇 最新评论 (五)APA场景搭建之挡位控制设置 xiguannuli: 请问博主哪里可以找到这个说明文档呢? 使用clang-format自动格式化代码 CSDN-Ada助手: 恭喜您写了第18篇博客,内容非常实用!使用clang-format自动格式化代码确实能提高代码的可读性和维护性。希望您能继续分享关于代码规范和优化方面的经验,或许可以考虑分享一些实际项目中遇到的挑战及解决方案,让读者更好地理解如何应用这些工具和技巧。期待您的下一篇博客! 《无人驾驶车辆模型预测控制》之基于动力学的MPC设计 shunan1: 你好 添加上了吗 我想知道 Linux下shell脚本编写 CSDN-Ada助手: 恭喜你写了第17篇博客!学习Linux下shell脚本编写确实是一个不容易的过程,但你总是能够清晰地传达知识,让读者受益匪浅。希望你可以继续保持创作的热情,并且在未来的博客中,可以分享一些实用的shell脚本编写技巧或者案例分析,这样更能够帮助更多的读者。加油! 模型预测控制(MPC)基础理论 CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)提升标题与正文的相关性。 您愿意向朋友推荐“博客详情页”吗? 强烈不推荐 不推荐 一般般 推荐 强烈推荐 提交 最新文章 使用clang-format自动格式化代码 Linux下shell脚本编写 (五)APA场景搭建之挡位控制设置 2023年2篇 2022年5篇 2021年3篇 2020年8篇 目录 目录 分类专栏 自动驾驶控制 6篇 ROS 自动泊车仿真场景设计 4篇 C++ 3篇 工具 4篇 读书笔记 1篇 目录 评论 20 被折叠的 条评论 为什么被折叠? 到【灌水乐园】发言 查看更多评论 添加红包 祝福语 请填写红包祝福语或标题 红包数量 个 红包个数最小为10个 红包总金额 元 红包金额最低5元 余额支付 当前余额3.43元 前往充值 > 需支付:10.00元 取消 确定 下一步 知道了 成就一亿技术人! 领取后你会自动成为博主和红包主的粉丝 规则 hope_wisdom 发出的红包 实付元 使用余额支付 点击重新获取 扫码支付 钱包余额 0 抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 余额充值 在实际工程系统中,MPC太复杂,难以做到realtime。因此都利用数据,MPC对比RL还有优势么? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册自动控制深度学习(Deep Learning)模型预测控制强化学习 (Reinforcement Learning)深度强化学习在实际工程系统中,MPC太复杂,难以做到realtime。因此都利用数据,MPC对比RL还有优势么?关注者798被浏览264,162关注问题写回答邀请回答好问题 74添加评论分享29 个回答默认排序知乎用户MPC目标是在给定模型下,优化有限长horizon的一个cost function,来构建控制输入。显然,MPC的目标和Model based RL并不冲突,也就是technically speaking,MPC是RL的一个子问题而已。ML的人厉害的地方在于,他们把他们搞的东西内涵定义的如此之广,其他领域的东西,也是他们的东西,其他领域有了进步,也能增加他们的荣光。这点传统领域的人好好学学。/////////////////////////////////////////如果说狭义上有什么区别的话,MPC传统上是基于对轨迹直接数值优化求解的,因此一般只能给出当前状态下的最优控制输入。而大部分RL的求解是要给出任意状态的控制输入,即一个optimal control law(RL那边叫control policy, 但我要坚持我们control的传统)。例如最简单的mpc问题:线性系统二次型cost function,那就相当于本科生就学的LQR,此时MPC有解析形式解,因此LQR情况下MPC也可以给出一个control law,而不只是当前状态的最优控制输入。可以注意到,model based RL和传统的optimal control并无不同,只是换了个名称而已。虽然听上去RL要给出一个global control law很厉害的样子,但绝大部分的系统这一点实际是不能可靠做到的,于是最近几年DRL就主张用Deep nets去fit这样的control law (or the value function)。至于能不能work,那就看诸位对ML的信仰虔诚不虔诚了。至于MPC就朴实的多,数值优化至少能返回一个local optimal,有的时候可以证明local optimal就可以达到理想的控制效果了。而利用优化问题的稀疏性,mpc 优化算法可以做到非常实时,嚷嚷mpc爆慢的摸着良心说你有没有学过最优化理论。当然,对于复杂的非凸问题,靠局部的数值优化也是不够的,这里就不展开了。再补充一点,如果只是给出当前状态下的最优输入,这个问题又被叫做optimal planning。当然,按照广义的RL, optimal planning也算是RL的,比如monte carlo tree search,作为一种planning algorithm, 也通常被认为是RL。编辑于 2020-07-18 00:12赞同 28661 条评论分享收藏喜欢收起匿名用户就像前面一些回答讲的那样,这个提问本身槽点略多。MPC不能realtime?Atlas几十个DOF都可以realtime。“因此都利用数据”不清楚这个是什么意思,model-based RL其实和MPC已经非常接近了,cost function定义都可以一样,而且上面说的iLQR就是一种model-based RL。如何组合MPC和model-based RL产生更好的效果,这个又是另一个话题了。如果要问model-based和model-free RL的在实际工程中的区别,我觉得实际工程那点小数据量,用model-based基本是必然了。model-free RL适用领域在于,模型过于复杂,实在没法modeling,而且数据廉价的时候。有一段时间没接触RL和MPC、Trajectory Optimization这些了。MPC和RL的对比我之前想过不少,今天又想起来一点。RL的出发点是多臂赌博机MAB模型和Optimal control,MPC/Traj Optmz的出发点是带约束的优化问题。所以RL几乎不会去处理带约束的连续控制问题,而是常常离散化control input。continuous control input的RL比如Policy Gradient,Actor Critic,DDPG,这些其实最终效果常常不够好,容易掉进local minima,还需要很多数据和调参,更别提如何优雅地处理control input constraint的问题了。比如上面Carla那边试过DDPG,调了很久都只能得到trivial解。顺便提一句,采样效率上,model-based >> model-free,model-free中,Q learning >> Actor Critic >> Policy Gradient >> Evolutionary Algo,而model-free中为啥Q learning效率高?因为其中一个原因是Q learning只有离散的control input呀。还有一点,MPC/Traj Optmz关注的是对当下状态x存在一个解,而RL/Optimal Control关注的是在整个x取值空间里面都有(最优)解,所以前者处理的问题更小,也更容易拓展到复杂情况,比如有复杂的约束。当然Traj Optmz也可以从Optimal Control那边获得不少的灵感帮助,比如上面提到的iLQR就是把非LQR的问题iteratively转化成LQR求解。要细究MPC和RL的联系,还可以看看Sergey Levine的GPS那篇论文。编辑于 2023-07-08 16:01赞同 11510 条评论分享收藏喜欢 一个模型预测控制(MPC)的简单实现 - 知乎首发于一起读cheetah mini源码切换模式写文章登录/注册一个模型预测控制(MPC)的简单实现xyYu我有一家动物园我开了六七年1 生活中的启示情景如下:你们团队每天早晨开一次例会,主要会议内容是你汇报工作进度,领导根据工作目标和工作进度,制定当天的工作计划,你领到工作计划后开始工作。每天都这样周而复始,从领导的角度看,这件工作实现了“闭环”,工作进度“可控”,这就是闭环控制系统。图1 闭环控制系统不同的领导(控制器)水平有高又低,按照介绍控制器先踩一脚PID的国际惯例,设:则PID控制器的控制律为:u\left( n \right) =k_p\left( err\left( n \right) +k_i\sum_{j=1}^n{err\left( j \right) +k_d\left( err\left( n \right) -err\left( n-1 \right) \right)} \right) 从该控制律中我们可以看到PID的两个问题:1, PID控制器不具有“前瞻性”:参与计算的各个量,有当前的 err ,上个控制周期的 err ,以及之前所有的 err 累计和,偏偏没有未来的 err 。这个“领导”目光过于短浅,只求今天能完成任务,哪怕第二天公司就倒闭了,那也是第二天要解决的麻烦,今天该干啥干啥。2, PID属于无模型控制。作为一个“领导”,PID仅仅通过工作目标和工作进度上的差距,以及三个近乎魔法般的数字,就制定了工作计划,完全不考虑你的工作能力和这项工作的难度,这是非常失职的。为了提高工作的的可行性,经过思考,我们还可以有另一种方案:领导听完你的汇报后,根据工作进度(系统状态)、工作目标(参考值)、你的工作能力和任务难度(系统模型),制定了未来10天的工作计划,每一天要干什么都写得清清楚楚明明白白。领导将这十天计划里面第一天的计划交给你,剩下九天的计划销毁。第二天重复上述过程。显然第二种方案更具有可行性,它能根据任务的完成情况及时调整工作计划,同时兼顾了未来的工作计划、你的工作能力和任务的难度,更符合我们的认知。当然这种方案还有一点小缺陷,比如“剩下九天计划销毁”,领导看了这个方案肯定心里不舒服,辛辛苦苦做的计划凭什么销毁呢?为了弥补这个缺陷,我们提出了“控制时域”和“预测时域”的概念。控制时域是指领导做多少天的计划,预测时域是指领导思考多长远的进度。比如,领导考虑到计划跟不上变化,想太长远没意义,就先做了五天的计划(控制时域是五天),然后第6-10天的计划和第5天的计划一模一样,领导预测了下按照这样的十天计划,十天后进度完成的还算可以(预测时域是十天)。这样依然给你第一天的计划,销毁剩下九天的计划,领导的工作量却少了许多。 模型预测控制的基本思想就蕴含在上述过程中,它利用一个已有的模型、系统当前的状态和未来的控制量,来预测系统未来的输出,然后与我们期望的系统输出做比较,得到一个损失函数,即:由于上式中模型、当前状态、期望输出都是已知的,因此只有未来控制量一个自变量。采用二次规划的方法求解出某个未来控制量,使得损失函数最小,这个未来控制量的第一个元素就是当前控制周期的控制量。2 实际控制的例子2.1 问题描述在无限光滑的一维水平直线上有一个质量为 m 的滑块,初始位置与初始速度都为0,现需要设计控制器,在传感器测得滑块位置 x 的基础上,为滑块提供外力 u ,使其跟随参考点 x_r 图2 例图2.2 预测模型首先建立动力学方程:\ddot{x}=\frac{u}{m} 选取状态向量 x=\left[ \begin{array}{c} x\\ \dot{x}\\ \end{array} \right] (除非特殊说明,后文中x表示状态向量,而不是滑块位置),构建系统状态方程为:\dot{x}=Ax+Bu 其中 A=\left[ \begin{matrix} 0& 1\\ 0& 0\\ \end{matrix} \right] \text{,}B=\left[ \begin{array}{c} 0\\ \frac{1}{m}\\ \end{array} \right] 。2.3 预测模型离散化采用前向欧拉法将状态方程离散化:\dot{x}=\frac{x\left( k+1 \right) -x\left( k \right)}{T}=Ax\left( k \right) +Bu\left( k \right) \\ x\left( k+1 \right) =\left( I+TA \right) x\left( k \right) +TBu\left( k \right) \\ x\left( k+1 \right) =\overline{A}x\left( k \right) +\overline{B}u\left( k \right) 其中 \overline{A}=\left[ \begin{matrix} 1& T\\ 0& 1\\ \end{matrix} \right] \text{,}\overline{B}=\left[ \begin{array}{c} 0\\ \frac{T}{m}\\ \end{array} \right] ,T为控制周期。2.4 预测MPC方法的一个独特之处就是需要对未来系统状态进行预测,我们记未来 p 个控制周期内预测的系统状态为:X_k=\left[ \begin{matrix} x\left( k+1\left| k \right. \right) ^T& x\left( k+2\left| k \right. \right) ^T& \cdots& x\left( k+p\left| k \right. \right) ^T\\ \end{matrix} \right] ^T p 称为预测时域,括号中 k+1|k 表示在当前 k 时刻预测 k+1 时刻的系统状态,以此类推。另外,预测动态系统未来状态时,还需要知道预测时域内的控制量 U_k :U_k=\left[ \begin{matrix} u\left( k\left| k \right. \right) ^T& u\left( k+1\left| k \right. \right) ^T& \cdots& x\left( k+p-1\left| k \right. \right) ^T\\ \end{matrix} \right] ^T 这是我们接下来将要求解的优化问题的独立变量。现在,我们可以通过离散化状态方程依次对未来 p 个控制周期的系统状态进行预测:x\left( k+1\left| k \right. \right) =\overline{A}x\left( k \right) +\overline{B}u\left( k\left| k \right. \right) \\ x\left( k+2\left| k \right. \right) =\overline{A}^2x\left( k \right) +\overline{A}\overline{B}u\left( k\left| k \right. \right) +\overline{B}u\left( k+1\left| k \right. \right) \\ x\left( k+3\left| k \right. \right) =\overline{A}^3x\left( k \right) +\overline{A}^2\overline{B}u\left( k\left| k \right. \right) +\overline{A}\overline{B}u\left( k+1\left| k \right. \right) +\overline{B}u\left( k+2\left| k \right. \right) \\ \vdots \\ x\left( k+p\left| k \right. \right) =\overline{A}^px\left( k \right) +\sum_{i=0}^{p-1}{\overline{A}^{p-1-i}}\overline{B}u\left( k+i\left| k \right. \right) 整合成矩阵形式:X_k=\varPsi x\left( k \right) +\varTheta U_k 其中, \varPsi =\left[ \begin{array}{c} \overline{A}^1\\ \overline{A}^2\\ \vdots\\ \overline{A}^p\\ \end{array} \right] , \varTheta =\left[ \begin{matrix} \overline{A}^{1-1}\overline{B}& \cdots& \mathbf{0}& \mathbf{0}\\ \overline{A}^{2-1}\overline{B}& \overline{A}^{2-2}\overline{B}& \cdots& \mathbf{0}\\ \vdots& \vdots& \ddots& \vdots\\ \overline{A}^{p-1}\overline{B}& \overline{A}^{p-2}\overline{B}& \cdots& \overline{A}^{p-p}\overline{B}\\ \end{matrix} \right] 上式中的下三角形式,直接反映了系统在时间上的因果关系,即 k+1 时刻的输入对 k 时刻的输出没有影响, k+2 时刻的输入对 k 和 k+1 时刻没有影响,等等。2.5 优化这一节我们将求解预测时域内的控制输出 U_k ,在求解优化问题之前,我们首先明确优化问题的数学描述。我们的控制目标是使系统的状态跟踪期望的一条轨迹,通常称为参考值,定义预测时域内的参考值序列:R_k=\left[ \begin{matrix} r\left( k+1 \right) ^T& r\left( k+2 \right) ^T& \cdots& r\left( k+p \right) ^T\\ \end{matrix} \right] ^T 注意,在 k 时刻进行控制的时候,控制器就必须已经得到了 k 时刻到 k+p 时刻的参考值,而PID就不需要这么多信息,这是MPC的一个缺点。我们希望寻找最佳的控制量 U_k ,使得预测时域内的状态向量与参考值越接近越好,这是一个开环最优控制问题。为此,我们用预测状态向量与参考值之间的累计误差定义一个简单的优化目标函数:J\left( U_k \right) =\left( X_k-R_k \right) ^TQ\left( X_k-R_k \right) 经常地,我们不希望控制动作太大,优化目标函数再添加一项对控制量的约束:J\left( U_k \right) =\left( X_k-R_k \right) ^TQ\left( X_k-R_k \right) +U_{k}^{T}WU_k 因此,该优化问题可以描述如下:我们将优化函数 J(U_k) 展开后合并同类项:J\left( U_k \right) \\ =\left( X_k-R_{_k} \right) ^TQ\left( X_k-R_{_k} \right) +U_{k}^{T}WU_k \\ =\left( \overset{E}{\overbrace{\varPsi x\left( k \right) -R_k}}+\varTheta U_k \right) ^TQ\left( \varPsi x\left( k \right) +\varTheta U-R_{_k} \right) +U_{k}^{T}WU_k \\ =\left( E+\varTheta U_k \right) ^TQ\left( E+\varTheta U \right) +U_{k}^{T}WU_k \\ =E^TQE+\left( \varTheta U_k \right) ^TQ\left( \varTheta U_k \right) +2E^TQ\left( \varTheta U_k \right) +U_{k}^{T}WU_k \\ =U_{k}^{T}\varTheta ^TQ\varTheta U_k+U_{k}^{T}WU_k+2E^TQ\varTheta U_k+E^TQE \\ =U_{k}^{T}\left( \varTheta ^TQ\varTheta +W \right) U_k+\left( 2E^TQ\varTheta \right) U_k+E^TQE 上式中 E^TQE 是常数项,对“ U_k 为何值时 J 取得最小值”这一问题没有影响,因此直接舍去。如图3,matlab输入 “help quadprog”查看二次型优化函数quadprog的说明文档,令:\begin{cases} H=2\left( \varTheta ^{^T}Q\varTheta +W \right)\\ f^T=2E^TQ\varTheta\\ \end{cases} 可得最终优化目标函数,至此可直接调用matlab quadprog函数求解 U_k ,将 U_k 的第一个元素提取出来,作为本控制周期的控制量。J\left( U_k \right) =\frac{1}{2}U_{k}^{T}HU_k+f^Tx 图3 matlab quadprog函数2.6 仿真对于2.1中例子的动力学方程:\ddot{x}=\frac{u}{m} 两边同时拉普拉斯变换:s^2X\left( s \right) =\frac{1}{m}F\left( s \right) 可得传递函数:G\left( s \right) =\frac{X\left( s \right)}{F\left( s \right)}=\frac{1}{ms^2} 在simulink中搭建仿真环境如图4,并编写MPC控制器:图4 simulink中仿真function u = MPCcontroller(pos_ref, pos, vel) %参数设置 m = 1.05; %滑块质量,增加了5%作为建模误差 T = 0.01; %控制周期10ms p = 45; %控制时域(预测时域) Q = 10*eye(2*p); %状态误差权重 W = 0.0001*eye(p); %控制输出权重 umax = 100; %控制量限制,即最大的力 Rk = zeros(2*p,1); %参考值序列 Rk(1:2:end) = pos_ref;%参考位置由函数参数指定 Rk(2:2:end) = vel; %参考速度跟随实际速度 %构建中间变量 xk = [pos;vel]; %xk A_ = [1 T;0 1]; %离散化预测模型参数A B_ = [0;T/m]; %离散化预测模型参数B psi = zeros(2*p,2); %psi for i=1:1:p psi(i*2-1:i*2,1:2)=A_^i; end theta = zeros(2*p,p); %theta for i=1:1:p for j=1:1:i theta(i*2-1:i*2,j)=A_^(i-j)*B_; end end E = psi*xk-Rk; %E H = 2*(theta'*Q*theta+W); %H f = (2*E'*Q*theta)'; %f %优化求解 coder.extrinsic('quadprog'); Uk=quadprog(H,f,[],[],[],[],-umax,umax); %返回控制量序列第一个值 u = 0.0; %指定u的类型 u = Uk(1); %提取控制序列第一项p=40,仿真结果p=60,仿真结果参考文献陈虹. 模型预测控制[M]. 科学出版社, 2013.龚建伟, 姜岩, 徐威. 无人驾驶车辆模型预测控制[M]. 北京理工大学出版社, 2014.本文工程github地址:编辑于 2020-05-19 10:39百度无人驾驶车模型预测控制机器人控制赞同 1029141 条评论分享喜欢收藏申请转载文章被以下专栏收录一起读cheetah mini源码欢迎大家分享cheetah mini相
模型预测控制简介(model predictive control) - 知乎
MPC算法流程详解(一) - 知乎
为何学界通用「模型预测控制」(MPC),而非「滚动域控制」(RHC)来指 MPC 方法? - 知乎
基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记_实现基于车辆运动学模型在frenet坐标系下通过mpc算法跟踪一个圆的matlab代码-CSDN博客
>基于模型预测(MPC)的无人驾驶汽车轨迹跟踪_mpc模型预测控制轨迹跟踪c++代码-CSDN博客
>《无人驾驶车辆模型预测控制》之基于动力学的MPC设计_基于运动学的mpc和基于动力学的mpc-CSDN博客
>在实际工程系统中,MPC太复杂,难以做到realtime。因此都利用数据,MPC对比RL还有优势么? - 知乎
一个模型预测控制(MPC)的简单实现 - 知乎