模型预测控制MPC算法的讲解-案例(C语言代码)

目录

一、模型预测控制MPC的基本原理

1.1 建立模型

1.2 设定目标和约束条件

1.3 求解优化问题

1.4 应用控制输入

1.5 重复优化

二、模型预测控制MPC的特点

三、应用场景

四、应用案例

一个MPC算法的简化版框架:

4.1 案例系统模型

4.2 控制目标和当前状态

4.3 控制策略(最优化)

 4.4 控制输入和重复优化

复杂些的模型案例:

模型预测控制的优化问题:


模型预测控制(Model Predictive Control,MPC)是一种高级的控制策略,用于连续或离散时间系统的控制。MPC的核心思想是利用系统的数学模型预测未来一段时间内的系统行为,然后基于这些预测来优化控制输入,以实现对系统的优化控制。MPC在工业过程控制、汽车动态控制、航空航天和机器人技术等领域有广泛应用。

一、模型预测控制MPC的基本原理

包括以下的步骤:

1.1 建立模型

  首先,需要建立一个描述系统动态行为的数学模型。这个模型可以是线性的或非线性的,它用于预测未来一段时间内系统的行为。

1.2 设定目标和约束条件

  定义控制问题的目标函数,通常是要最小化的一个性能指标(如跟踪误差、能量消耗等)。同时,明确系统操作的约束条件,包括控制输入的限制、状态变量的限制等。

1.3 求解优化问题

  在每个控制周期,基于当前系统状态,预测一定时间范围内的系统行为,并求解一个优化问题。这个问题的目标是:在满足约束的条件下,找到使目标函数值最小化的一系列控制输入。

1.4 应用控制输入

  将优化问题的解(即最优控制序列的第一个输入)应用到系统上,然后系统进入下一个控制周期。

1.5 重复优化

  在下一个控制周期,根据系统的新状态重新求解优化问题,这个过程不断重复。

通俗解释:

1)建模:MPC首先需要一个数学模型来描述系统如何响应不同的控制输入。就像在棋类游戏中,你需要了解每种棋子的移动规则一样

2)约束条件:接下来,MPC会查看未来一段时间内可能的所有“移动”(即控制输入),并预测这些“移动”将如何影响系统。这一步骤需要考虑到所有可能的限制,比如棋子不能超出棋盘的边界,或者系统的操作不能超过安全限制。

3)优化:然后,MPC从所有可能的“移动”中选择一条路径,这条路径最符合我们的目标(比如,最小化能耗或保持系统在某个状态)。这就像在棋局中选择一系列走法,不仅避免失败,还要尽可能接近胜利。

4)执行操作:一旦选择了最优路径,MPC就会执行第一步“移动”,即应用第一个控制输入到系统上。

5)重复优化:在下一个时间点,MPC会重新查看系统的当前状态,再次执行预测、规划和优化过程。这就是为什么这种方法被称为模型预测控制——它不断预测未来并据此制定控制策略。

二、模型预测控制MPC的特点

  • 预测能力:MPC利用系统的数学模型预测未来的系统行为,这是其区别于传统控制策略的显著特点。
  • 处理约束:MPC能够直接处理控制输入和系统状态的约束,这对于许多实际应用非常重要。
  • 灵活性和适应性:MPC框架允许对不同类型的目标和约束进行编程,适用于多种控制问题。

三、应用场景

汽车动态控制中,MPC可以用于实现高级驾驶辅助系统(ADAS),如自适应巡航控制(ACC)和车道保持辅助(LKA)。通过预测未来车辆的位置和速度,MPC能够计算出最优的加速度或转向角度,以保持车辆在车道中心并与前车保持安全距离。

四、应用案例

一个MPC算法的简化版框架:

4.1 案例系统模型

MPC的核心是系统的数学模型,它描述了系统状态如何随时间和控制输入变化。使用了一个非常简单的线性模型:

                                                    x(k+1)=Ax(k)+Bu(k)

其中,x(k)是在时间点k的系统状态,u(k)是在时间点k的控制输入,A和B是系统的参数。这个模型假设下一时刻的状态是当前状态和当前控制输入的线性组合。

4.2 控制目标和当前状态

目标状态(x_goal):这是我们希望系统达到的状态。在MPC中,控制目标可以是保持系统在某个特定状态,或是跟踪一个随时间变化的轨迹。

当前状态(x_current):这是系统在当前时间点的实际状态。MPC需要实时获取这个信息,以便基于当前状态进行预测和控制。

4.3 控制策略(最优化)

在这个简化的例子中,控制策略被简化为直接计算控制输入u,使得当前状态尽可能地接近目标状态。这通过简单的计算目标状态与当前状态之间的差值来实现:

                                u=xgoal​−xcurrent​

这意味着控制输入是尝试消除当前状态与目标状态之间的差异。

 4.4 控制输入和重复优化

main函数中,我们设置了一个循环,模拟连续的控制步骤。在每个步骤中,调用mpc_control函数来更新当前状态,模拟将控制输入应用到系统上并更新系统状态。

#include <stdio.h>
#include <math.h>

// 假设的系统模型,例如简单的线性系统: x(k+1) = Ax(k) + Bu(k)
float A = 1.0; // 系统矩阵
float B = 1.0; // 控制矩阵

// 目标状态和当前状态
float x_goal = 10.0;
float x_current = 0.0;

// 简化的MPC控制函数
void mpc_control(float x_goal, float* x_current) {
    float u = 0.0; // 控制输入
    // 简化的优化过程:直接计算控制输入u,尝试将x_current调整到x_goal
    // 这里假设控制输入u等于状态偏差,仅为示例
    u = x_goal - (*x_current);
    
    // 应用控制输入到系统模型
    *x_current = A * (*x_current) + B * u;
}

int main() {
    int steps = 5; // 控制步骤数量
    for (int i = 0; i < steps; ++i) {
        mpc_control(x_goal, &x_current);
        printf("Step %d: Current state = %f\n", i, x_current);
    }
    return 0;
}

上述的案例中没有最优化求解过程,在实际的应用中,还需要设计求解最优化问题,例如:

复杂些的模型案例:

例如我们的目标是控制一个简单的车辆模型沿直线行驶到目标位置,同时限制其加速度和速度,以确保舒适性和安全性。我们希望车辆最终稳定在目标位置,速度降为零。

1)系统模型

采用离散时间线性模型,其中状态x包括车辆的位置和速度,控制输入u是加速度。

                                               x[k+1]=Ax[k]+Bu[k]

其中,AB是描述系统动态的矩阵,k是当前时间步。

2)目标函数和约束条件

最小化一个目标函数,该函数考虑了从当前时间步到预测范围内所有时间步的状态与目标状态之间的差异,以及控制输入的变化。

                           

其中,N是预测范围,QR是权重矩阵,用于平衡状态误差和控制代价。

 约束条件:

加速度和速度的限制可以表示为:

                                       umin​≤u[k]≤umax​,vmin​≤x[2][k]≤vmax​

其中,x[2][k]表示状态向量中的速度分量。

3)优化问题求解

   在每个时间步,需要求解上述优化问题以确定最优的控制序列。只有序列中的第一个控制输入被应用到系统上,然后整个过程在下一个时间步重复。

例如示例代码如下所示:

// 假设系统模型、目标和约束已经定义

void mpc_control(float* x_current, float* u_optimal) {
    // 定义优化问题
    OptimizationProblem opt_problem;

    // 设置系统模型、目标函数和约束
    defineModel(&opt_problem, A, B);
    defineCostFunction(&opt_problem, Q, R, x_goal);
    defineConstraints(&opt_problem, u_min, u_max, v_min, v_max);

    // 求解优化问题
    solveOptimizationProblem(&opt_problem, x_current, u_optimal);

    // 应用第一个控制输入
    applyControl(u_optimal[0]);
}

int main() {
    // 初始化状态、目标和控制输入
    float x_current[2] = {0.0, 0.0}; // 初始位置和速度
    float u_optimal[N]; // 最优控制序列

    // MPC控制循环
    while (!isGoalReached(x_current)) {
        mpc_control(x_current, u_optimal);
        updateState(x_current, u_optimal[0]);
    }

    return 0;
}

模型预测控制的优化问题:

    二次规划(QP)优化,QP问题的求解通常需要使用专门的数值优化算法和库。当控制问题可以被表述为二次目标函数并且有线性约束时。QP优化问题的一般形式是寻找一个向量(在MPC中代表控制输入的序列),以最小化一个二次目标函数,并且满足一组线性等式和不等式约束。

参考资料:

【1】自动驾驶规划算法 - MPC 基本原理 登龙(DLonng)

【2】模型预测控制(MPC)简介及matlab实现 - 古月居

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaWeb】

Javaweb 数据库相关概念MySQL数据库MySQL数据模型SQLDDL--操作数据库图形化客户端工具DML--操作数据DQL数据库约束 数据库设计多表查询事务 数据库相关概念 数据库 存储数据的仓库&#xff0c;数据是有组织的进行存储 英文&#xff1a;DataBase&#xff0c;简称DB 数据库管理系…

自然语言:信息抽取技术在CRM系统中的应用与成效

一、引言 在当今快速变化的商业环境中&#xff0c;客户关系管理&#xff08;CRM&#xff09;已成为企业成功的关键因素。CRM系统的核心在于有效地管理客户信息&#xff0c;跟踪与客户的每一次互动&#xff0c;以及深入分析这些数据以提升客户满意度和忠诚度。在我最近参与的一个…

SpringBoot+Vue全栈开发-刘老师教编程(b站)(一)

课堂内容 Java EE企业级框架&#xff1a;SpringBootMyBatisPlusWeb前端核心框架&#xff1a;VueElementUI公共云部署&#xff1a;前后端项目集成打包与部署 B/S(Browser/Server):浏览器/服务器架构模式 C/S(Client/Server):客户端/服务器架构模式 Maven是一个项目管理工具&…

【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)

目录 1、锁的策略 1.1、乐观锁和悲观锁 1.2、轻量级锁和重量级锁 1.3、自旋锁和挂起等待锁 1.4、普通互斥锁和读写锁 1.5、公平锁和非公平锁 1.6、可重入锁和不可重入锁 2、synchronized 内部的升级与优化过程 2.1、锁的升级/膨胀 2.1.1、偏向锁阶段 2.1.2、轻量级锁…

为什么会造成服务器丢包?

随着云服务器市场的发展和网络安全问题&#xff0c;服务器丢包问题成为了一个普遍存在的现象。服务器丢包是指在网络传输过程中&#xff0c;数据包由于各种原因未能到达目标服务器&#xff0c;导致数据传输中断或延迟。那么&#xff0c;为什么会造成服务器丢包呢&#xff1f;下…

naive-ui-admin 表格去掉工具栏toolbar

使用naive-ui-admin的时候&#xff0c;有时候不需要显示工具栏&#xff0c;工具栏太占地方了。 1.在src/components/Table/src/props.ts 里面添加属性 showToolbar 默认显示&#xff0c;在不需要的地方传false。也可以默认不显示 &#xff0c;这个根据需求来。 2.在src/compo…

在SAP HANA中使用OData(二)

通常有两种方式通过OData来暴露SAP HANA中的数据库对象&#xff0c;一是直接使用Database Object&#xff0c;比如前一篇和本篇文章介绍的例子&#xff0c;这种方式针对于数据已经存在于SAP HANA中&#xff0c;在Repository中没有对应的设计时对象(Design-time Object)&#xf…

基于 LVGL 使用 SquareLine Studio 快速设计 UI 界面

目录 简介注册与软件获取工程配置设计 UI导出源码板级验证更多内容 简介 SquareLine Studio 是一款专业的 UI 设计软件&#xff0c;它与 LVGL&#xff08;Light and Versatile Graphics Library&#xff0c;轻量级通用图形库&#xff09;紧密集成。LVGL 是一个轻量化的、开源的…

Redis String 类型底层揭秘

目录 前言 String 类型低层数据结构 节省内存的数据结构 前言 Redis 的 string 是个 “万金油” &#xff0c;这么评价它不为过. 它可以保存Long 类型整数&#xff0c;字符串&#xff0c; 甚至二进制也可以保存。对于key&#xff0c;value 这样的单值&#xff0c;查询以及插…

[足式机器人]Part2 Dr. CAN学习笔记-Ch00-2 - 数学知识基础

本文仅供学习使用 本文参考: B站:DR_CAN 《控制之美(卷1)》 王天威 《控制之美(卷2)》 王天威 Dr. CAN学习笔记-Ch00 - 数学知识基础 Part2 4. Ch0-4 线性时不变系统中的冲激响应与卷积4.1 LIT System:Linear Time Invariant4.2 卷积 Convolution4.3 单位冲激 Unit Impulse—…

Linux安装Nginx详细步骤

1、创建两台虚拟机&#xff0c;分别为主机和从机&#xff0c;区别两台虚拟机的IP地址 2、将Nginx素材内容上传到/usr/local目录&#xff08;pcre,zlib,openssl,nginx&#xff09; 附件 3、安装pcre库   3.1 cd到/usr/local目录 3.2 tar -zxvf pcre-8.36.tar.gz 解压 3.3 cd…

matlab 方向向量约束的PCA快速粗配准

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 该方法由本人原创,目前尚未见有相关论文用到。具体原理看代码即可。 二、代码实现 clc;clear; %% ------…

在Arcgis中删除过滤Openstreetmap道路属性表中指定highway类型道路

一、导出道路类型并分析 1. 导出道路类型 选中highway属性列&#xff0c;选择汇总→确定 2. 分析 用Excel打开输出表&#xff0c;包含的道路类型如下 0.空值’’ 车辆可行驶道路&#xff08;和bfmap的并集&#xff09; 空值&#xff08;无定义道路&#xff09; 二、…

数据分析(二):学生成绩预测分析报告

目录 摘要 一、引言 二、 数据源介绍 三、 数据清洗和预处理 3.1 缺失值处理 3.2 异常值处理 3.3 数据编码 四、 探索性数据分析 4.1 可视化相关统计量 4.2 目标数据的分布情况 4.3 Pearson 相关性分析 五、 特征工程 5.1 特征构造 5.1.1 总饮酒量 5.1.2 整体关…

【前端知识点】

虚拟 dom&#xff1a; 虚拟 dom 就是 vue 通过 js 对象渲染虚拟 dom 的&#xff0c;虚拟 dom 的 js 对象包含节点的类型、属性、子节点等信息&#xff0c;这些虚拟 dom 节点会构成一棵树形结构&#xff0c;用来表示整个页面的结构。 当 vue 组件更新时&#xff0c;会通过 diff…

牛客前端八股文(每日更新)

1.说说HTML语义化&#xff1f; 得分点&#xff1a;语义化标签、利于页面内容结构化、利于无CSS页面可读、利于SEO、利于代码可读 1&#xff0c;标签语义化是指在开发时尽可能使用有语义的标签&#xff0c;比如header&#xff0c;footer&#xff0c;h&#xff0c;p&#xff0c…

Linux学习之system V

目录 一&#xff0c;system V共享内存 快速认识接口 shmget(shared memory get) shmat(shared memory attach) shmdt(shared memory delete) shmctl (shared memory control) 编写代码 综上那么共享内存与管道通信有什么区别&#xff1f; system v消息队列 system v信号…

浅谈 Linux fork 函数

文章目录 前言fork 基本概念代码演示示例1&#xff1a;体会 fork 函数返回值的作用示例2&#xff1a;创建多进程&#xff0c;加深对 fork 函数的理解 前言 本篇介绍 fork 函数。 fork 基本概念 pid_t fork(void) fork 的英文含义是"分叉"&#xff0c;在这里就是 …

web安全学习笔记【15】——信息打点(5)

信息打点-CDN绕过&业务部署&漏洞回链&接口探针&全网扫描&反向邮件 #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-CMS指…

非线性优化资料整理

做课题看了一些非线性优化的资料&#xff0c;整理一下&#xff0c;以方便查看&#xff1a; 优化的中文博客 数值优化|笔记整理&#xff08;8&#xff09;——带约束优化&#xff1a;引入&#xff0c;梯度投影法 (附代码)QP求解器对比对于MPC的QP求解器 数值优化| 二次规划的…