五分钟入门控制算法: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

解锁超级生产力:手把手教你构建与GitHub深度集成的自动化工作流,让AI成为你的编程副驾驶

解锁超级生产力:手把手教你构建与GitHub深度集成的自动化工作流,让AI成为你的编程副驾驶

前言 在当今快节奏的软件开发世界中,效率就是生命线。每一位开发者、项目经理和技术爱好者都在不断寻求能够简化流程、自动化重复性任务并最终解放创造力的工具和方法。想象一下,如果你能用自然语言与你的开发环境对话,让它为你搜索代码库、管理项目任务,甚至直接在你最喜欢的代码托管平台GitHub上执行操作,那将会是怎样一种颠覆性的体验? 这并非遥不可及的科幻场景,而是已经可以实现的强大功能。本文将为你揭开这层神秘的面纱,通过一个名为“蓝耘”的平台(或任何支持此类功能的类似平台),一步步指导你从零开始构建一个基础的自动化工作流。更令人兴奋的是,我们将向你展示如何将这个工作流与强大的GitHub MCP(Multi-Capability Platform)工具无缝集成,从而赋予你的工作流直接与GitHub仓库进行深度交互的能力。 无论你是希望快速检索海量开源项目、自动追踪和创建任务(Issues),还是希望简化代码提交与拉取请求(Pull Request)的流程,本文都将为你提供详尽的、可操作的指南。我们将深入每一个步骤,从最基础的节点设置,到获取关键的GitHub密钥,再到最终实战演练,让你亲

By Ne0inhk
如何更新Git Bash:简单几步保持你的Git工具最新

如何更新Git Bash:简单几步保持你的Git工具最新

目录 目录 目录 前言 为什么需要更新Git Bash 检查当前Git版本 方法一:通过官方安装程序更新(推荐) 步骤详解 方法二:使用Git Bash内置更新命令(不推荐) 步骤详解 验证更新结果 更新后的配置检查 总结 前言 分享几种更新Git Bash的方法,让你的版本控制工具始终保持最新状态。 在日常开发工作中,Git Bash是许多开发者的得力工具,但经常被忽略的是定期更新它以确保使用最新功能和安全性补丁。本文将详细介绍几种更新Git Bash的方法。 备注:         Windows版本:Win11 24H2         Git Bash版本:2.51.1(截止发文当天,最新版) 为什么需要更新Git Bash 更新Git Bash可以带来许多好处: * 获取最新功能:新版本通常会引入有用的新命令和特性 * 修复已知错误:解决旧版本中存在的问题和漏洞 * 安全性增强:修补安全漏洞,

By Ne0inhk
开源大模型实战:GPT-OSS本地部署与全面测评

开源大模型实战:GPT-OSS本地部署与全面测评

文章目录 * 一、引言 * 二、安装Ollama * 三、Linux部署GPT-OSS-20B模型 * 四、模型测试 * 4.1 AI幻觉检测题 * 题目1:虚假历史事件 * 题目2:不存在的科学概念 * 题目3:虚构的地理信息 * 题目4:错误的数学常识 * 题目5:虚假的生物学事实 * 4.2 算法题测试 * 题目1:动态规划 - 最长公共子序列 * 题目2:图算法 - 岛屿数量 * 4.3 SQL题测试 * 题目1:复杂查询 - 员工薪资排名 * 题目2:数据分析 - 连续登录用户 * 题目3:窗口函数 - 移动平均 * 4.4

By Ne0inhk

GitHub网络加速完整解决方案:轻松突破访问限制

GitHub网络加速完整解决方案:轻松突破访问限制 【免费下载链接】hostsGitHub最新hosts。解决GitHub图片无法显示,加速GitHub网页浏览。 项目地址: https://gitcode.com/gh_mirrors/host/hosts GitHub Hosts项目是一个专为开发者设计的开源工具,通过智能优化hosts配置,有效解决GitHub图片无法显示、页面加载缓慢等常见网络问题。这个基于TypeScript开发的项目提供了多种配置方案,让您能够轻松享受流畅的GitHub访问体验。 🚀 项目核心价值 快速网络访问:通过精心测试的IP地址映射,绕过传统DNS解析瓶颈,实现直接快速访问GitHub服务。 全平台兼容性:完美支持macOS、Windows、Linux等主流操作系统,无论您使用哪种开发环境都能轻松部署。 自动化更新机制:支持定时获取最新IP配置,确保长期稳定的访问体验,无需手动维护。 零成本解决方案:完全免费开源,无需额外付费服务,为开发者提供经济高效的网络优化方案。 📋 快速配置指南 第一步:获取项目文件 # 克隆项目仓库

By Ne0inhk