五分钟入门控制算法:MPC(模型预测控制)算法

五分钟入门控制算法:MPC(模型预测控制)算法

什么是控制算法?

        比如我现在的无人机悬浮在空中的某个位置,我想要让他以最短时间抬升悬浮到上方10m的位置,那我要具体如何去调整输入(如电流、油门、功率),以最好的性能(时间最短)来达到预期的目标呢?那就需要控制算法来求解,来调整这些输入。

        控制算法(Control Algorithm)本质上是一套控制机械系统运作的“数学指挥指令”。它告诉机器(如无人机、恒温空调、机械臂)如何根据目前的状态,通过调整输入(如电流、油门、功率)来达到预期的目标。

        不同的算法有不同的使用场景与特性,有些适用于动态系统,有些适用于静态。有些适用于低阶系统,有些适用于高阶系统。有些计算量小,有些计算量大。所以衍生出了很多种控制算法。

        如何根据不同的场景选择合适的控制算法,创造更厉害的控制算法,调整控制算法的参数使得任务完成的效果更好;如何让实时波形图(如 rqt_plot)更加贴合跟踪曲线;如何对机械系统编写“保护逻辑” ;如何处理传感器噪声与延迟,用一些滤波算法(卡尔曼滤波)做更好的状态估计。如何增加前馈(Feedforward)**或优化阻尼比来让动作丝滑 就是控制算法工程师的工作。

MPC控制算法:

MPC是一类控制算法。

如果 PID 是根据“现在的误差”在做反应,那么 MPC 就是在**“预测未来”并做决策。你可以把它想象成一个会推算未来几秒钟走势的驾驶员**。

MPC控制算法的几大特性:

(1)预测模型:模型是 MPC 的灵魂,它是对物理世界规律的数学表达。

(2)预测:根据预测模型推算出未来N个步长里系统的状态

(3)滚动优化:虽然我算出了未来 10 步的完美计划,但我只走第 1 步,然后扔掉剩下的,重新计算。走一步,看十步。每一个采样周期都在解一个最优问题。虽然计算量大,但它能保证在任何时刻,输出的操作都是基于当前最新状态的最优选择。

PID vs. LQR vs. MPC 核心对比表

特性PID (比例-积分-微分)LQR (线性二次调节器)MPC (模型预测控制)
核心思想消除误差:根据过去和现在的误差来调整输出。能量最优:在无限时间内寻找系统状态与控制能量的最佳平衡。预测未来:在有限时间内通过滚动优化寻找满足约束的最优解。
对模型的依赖无需模型强依赖:需要精确的线性状态空间模型强依赖:需要系统模型,但要求不高
处理约束的能力几乎没有:设计时考虑了能量权衡,但不能直接加入硬约束。极强
多变量系统 (MIMO)困难:多个回路之间存在严重的耦合干扰。擅长:天然支持多输入多输出系统,通过矩阵统一计算。最擅长:能同时处理多个目标和复杂的变量耦合。
计算复杂度极低:简单的代数运算,单片机轻松跑。:设计阶段解代数黎卡提方程,   运行时仅为矩阵乘法。极高:每个采样周期都要解一个带约束的最优化问题(QP)。
主要应用场景电机转速、恒温控制、简单平衡。航天器姿态控制、精密工业伺服。自动驾驶避障、无人机轨迹规划、化工过程。

普适的MPC算法推导流程:

如果针对某一个问题不好简历数学模型,我们可以不构造数学模型,可以通过一些手段直接跳过数学建模获得预测模型:



总结:

根据原始问题满足的数学物理原理,状态变量,输入,去建立连续动力学模型

根据连续动力学模型构建连续状态空间方程

将状态空间方程离散化

通过离散状态空间方程预测未来N步的状态,并整理为矩阵形式预测方程

构造代价函数,将预测方程代入得到一个QP问题,再通过QP求解器求解

所以本质上是在求解一个受约束的优化问题(如果实在处理线性系统那就是是 QP问题)。输入是表征位置,速度的预测方程跟期望的轨迹。输出是N的步长的控制量。

控制序列 u 是有物理单位的实际物理量(力、扭矩、电流、流速,加速度等等)。

假如u=2.5,那就让pwm占空比为50%,就可以控制机器人踩下一半的油门了。

以一维小车位置控制(多大力从A走到B)为例使用MPC控制:

MPC算法调参:

调节 MPC(模型预测控制)参数的过程,就像是在“计算性能”、“控制精度”和“运行稳定性”之间找平衡。根据不同的场景,有不同的性能需求,自然需要调节不同的参数

1. 时域参数 (Horizon Parameters)

Np:预测步长。     Nc:控制步长


什么是状态空间方程:

状态空间方程是描述系统动态特性的核心工具。传递函数也能表征系统动态特性,但传递函数是“黑盒”,只关注输入输出;状态空间是“白盒”,可以实时观测机器人的每一个关节状态。

1. 核心直觉:什么是“状态”?

想象你在开一辆车(或者控制你的仓库机器人):

  • 如果你只知道机器人现在的位置,你没法预判它下一秒在哪,因为你不知道它的速度
  • 如果你知道位置 + 速度,你就掌握了它的完整“状态”。
2. 数学定义

一个线性定常系统的状态空间模型由两个方程组成:状态方程输出方程状态空间方程的核心思想: 只要知道了现在的状态和接下来的动作,就能算出未来的状态。

Read more

PyTorch 2.6最新镜像:支持Python 3.13开箱即用

PyTorch 2.6最新镜像:支持Python 3.13开箱即用 你是不是也遇到过这样的情况:想写一篇关于PyTorch 2.6的深度评测文章,结果发现本地环境已经被各种项目“污染”得乱七八糟?不同版本的Python、混杂的依赖包、残留的缓存文件……这些都会严重影响测试结果的可复现性。作为技术作家,我们最怕的就是——今天跑通了,明天就报错;在这台机器上没问题,在另一台却处处是坑。 别担心,现在有一个简单又干净的解决方案:使用预置了PyTorch 2.6 + Python 3.13的纯净镜像环境。这个镜像不仅帮你省去繁琐的环境配置过程,还能确保你在完全一致、无干扰的系统中进行测试和写作,真正做到“一次运行,处处可信”。 本文将带你从零开始,一步步利用ZEEKLOG算力平台提供的最新镜像资源,快速搭建一个专为PyTorch 2.6评测设计的标准开发环境。无论你是刚接触AI开发的小白,还是需要稳定测试环境的技术写作者,都能轻松上手。我们会讲清楚这个镜像到底解决了什么问题、怎么一键部署、如何验证核心功能(比如torch.compile在Python

By Ne0inhk
在线浏览“秀人网合集”的新思路:30 行 Python 把封面图链接秒变本地可点图库

在线浏览“秀人网合集”的新思路:30 行 Python 把封面图链接秒变本地可点图库

用 30 行 Python 把秀人网公开合集“搬”进本地数据库 “秀人网”近日上线的新主题合集页采用前端渲染,数据通过 /api/v2/theme/list 接口一次性返回 JSON,无需模拟点击“加载更多”。接口无登录限制,但带 5 秒滑动窗口的 IP 频次校验:单 IP >30 次/分即返回 429。本文示范如何遵守 robots 协议、放缓速率,仅采集“公开可见”字段,并给出断点续抓、User-Agent 随机化、异常重试等常用技巧。 核心思路三步走: 分析列表接口:在浏览器 DevTools 里筛选 XHR,发现真实请求 URL

By Ne0inhk

Ubuntu玩转Python:从配置到实战全指南

好的,这是一份在 Ubuntu 环境下使用 Python 的完整指南: 在 Ubuntu 环境下玩转 Python:从环境配置到实战开发全指南 Ubuntu 是开发者喜爱的 Linux 发行版之一,与 Python 结合能提供强大且稳定的开发环境。本指南将带你完成从环境配置到实战开发的完整流程。 一、环境配置 1. 检查系统自带 Python * Ubuntu 通常预装了 Python。 * 查看输出,确认版本(如 Python 3.10.12)。python 命令可能指向 Python 2,建议始终使用 python3 和 pip3。 2. 安装 Python 开发工具包 3. 4. 使用虚拟环境(强烈推荐)

By Ne0inhk

股票分析:Python 爬取同花顺股票数据(技术指标提取)

Python 爬取同花顺股票数据及技术指标提取详解(2026 年视角) 在 2026 年,使用 Python 爬取股票数据已成为量化分析、AI 预测和个人投资工具的标配。同花顺(iFinD)作为国内主流金融平台,提供丰富的股票行情、历史 K 线和技术指标数据。但直接爬取其官网网页可能面临反爬机制、数据延迟或法律风险(需遵守平台条款,避免商业滥用)。推荐使用开源库如 Akshare 或 Tushare,这些库本质上是封装好的爬虫接口,支持同花顺等数据源,免费且高效。 本教程基于 2026 年最新实践: * 首选库:Akshare(免费开源,支持实时/历史数据,数据来源包括同花顺、东方财富等)。 * 备选:Tushare(需注册 Token,免费版有限额,付费版更稳定)。 * 技术指标提取:使用 pandas_ta

By Ne0inhk