[科研理论]无人机底层控制算法PID、LQR、MPC解析

文章目录

  • 1. PX4飞控PID简介
    • 1.1 位置控制器
    • 1.2 速度控制器
    • 1.3 加速度和yaw转到姿态
    • 1.4 姿态控制器
    • 1.5 角速率控制器
  • 2. 线性二次型优化(LQR)控制
  • 3. 模型预测控制MPC/NMPC
    • 3.1 MPC
    • 3.2 NMPC

1. PX4飞控PID简介

相关链接:PX4官方中文文档、PID概念(不了解PID的可以看看这个或者翻自控书吧)

px4飞控串级PID算法框图

PX4使用了串级PID控制器,串级PID通过分而治之的策略,将复杂控制问题分解为多个简单子问题,在响应速度、抗干扰性、稳定性和工程实现上均优于单级PID。比如姿态环处理的IMU噪声不会影响到位置环,同时各环PID参数可独立调谐,内环保证局部稳定(如机体角速率收敛),外环在此基础上优化全局性能。避免单级PID因参数耦合导致的振荡或发散。

1.1 位置控制器

位置控制器

在位置外环中只使用了一个P控制器和一个限幅函数。使用当前的位置估计和期望位置相减得到误差,然后经过P控制器和限幅得到期望速度,输出到速度内环。

为什么外环只需要一个P控制环呢?
那是因为外环的核心任务是“设定目标”,而非快速跟踪。核心任务是将位置误差线性转化为速度指令,无需积分或微分,速度内环的PID会补偿外环的不足,避免振荡和噪声放大。若外环加入I或D控制,积分会导致超调或延迟,微分会放大噪声,反而破坏系统稳定性,因此简化外环、强化内环是最优策略。

QGC对应位置

1.2 速度控制器

px4速度控制器

速度内环控制器就熟悉一点,PID大套餐上齐了。首先估计速度直接进入LPF(低通滤波器,防止高频干扰微分结果)然后计算微分,进入D环节,这一部分是防止输出突变以及提前控制防止震荡,其实也不难理解,就是对当前的估计做了微分反映了数据的运动趋势;然后估计速度与期望速度作差得到误差进入积分环节,这部分是**消除稳态误差(如抵抗恒定风阻导致的速度偏差),其实就是识别到误差长时间没有归零就加大矫正力度;最后是误差进入P环节快速响应速度误差**。

为什么内环使用PID控制器?速度内环用PID控制,因为它需要快速精准地跟踪速度指令,比例项响应误差,积分项消除静差,微分项抑制扰动,确保内环动态性能足够支撑外环。

总结:外环P控制像“指挥官”设定宏观目标,内环PID像“执行者”处理细节,二者分工明确,避免单级PID的复杂性和不稳定性。

QGC对应位置

1.3 加速度和yaw转到姿态

由于无人机的yaw和速度加速度在动力学上天然解耦,yaw角在规划器中是可以单独规划的,不过常见规划器还是按照轨迹的切向方向来的。图中的yaw角也是直接从规划器来的,而不是像pitch、roll需要从加速度中提取。

1.4 姿态控制器

PX4姿态控制器

多旋翼姿态控制器基于四元数(quaternion)设计,通过误差四元数计算期望角速率,最终输出饱和的角速率命令。

1.误差计算(通过四元数乘法实现):

四元数乘法如下(实部虚部分开):

这里分为两路,提取了实部的符号乘以虚部保证最短旋转路径(具体可以参考四元数的几何表示,q和-q表示一样的终端状态,但是旋转方向有大小区别,q可以保证旋转最短角度):

2.P控制器构造

角速度 Ω 的本质是旋转偏差随时间的变化率。在控制系统中,我们希望角速度命令与姿态误差成比例关系,即**角速度的方向应对准旋转轴,大小应与旋转角度偏差成正比**。

观察四元数的几何表示:

四元数的物理含义

可以看到w是影响旋转角度大小,虚部影响旋转轴方向还有旋转角度大小。当误差特别小时,可以使用小角度假设,此时的虚部等于1/2θn,那么根据前面的构造,可以进一步构造一个有物理意义的P系数即2P。

这个时候P的物理意义是姿态误差每增加一弧度,角速度增加P弧度每秒。最后再限幅保证安全。

这里为什么选择四元数而不选择欧拉角呢?
主要有下列几点原因:1.欧拉角有万向节死锁问题。2.四元数是线性计算,欧拉角是三角函数计算,更加复杂。3.通过四元数插值(如SLERP)可平滑过渡姿态,且误差四元数的实部符号能自动选择最短旋转路径。

这一环可以自动调参:自动调参,但是感觉对大轴距的飞机效果不好。

QGC调参位置

1.5 角速率控制器

K-PID:比例项(K)独立于积分(I)和微分(D)路径,直接作用于误差信号。无人机需要快速响应姿态误差(比例项K直接作用),同时通过积分消除稳态误差(如风力干扰),微分抑制振荡。

这一环可以自动调参:自动调参,但是感觉对大轴距的飞机效果不好。

QGC调参位置

计算完期望的体速率和推力之后,使用旋翼的模型计算每个电机的转速:

由电机转速得到力矩和推力公式:

对上式求逆得到每个电机转速:

2. 线性二次型优化(LQR)控制

无人机的底层控制算法中,LQR(Linear Quadratic Regulator,线性二次调节器)是一种基于状态空间模型的优化控制方法,广泛应用于姿态、位置等底层控制环节。LQR是一种最优控制算法,通过最小化一个“代价函数”来求解最优控制输入。其核心思想是:

  • 线性系统:无人机动力学模型在平衡点附近可线性化(如悬停状态附近)。
  • 二次代价函数:平衡状态误差和控制输入的能耗,实现“高性能+低能耗”的折中。

由于限制为一个线性系统,所以这个状态方程就不会太复杂,以无人机悬停为例。

无人机的状态方程(此时当做质点):

设x为无人机的位置、速度,A为无人机的状态转移矩阵,B为输入矩阵(描述控制输入对状态的影响),u为无人机的输入,这里应该是加速度。

代价函数为:

最小化跟踪误差以及输入加速度(节省能量)。Q:增大对角元素会强制对应状态快速收敛。R:增大对角元素会限制控制输入的幅值。

这个目标函数是一个标准的二次型优化问题(可以类比于二次函数),是有解析解的。下面是推导过程:

1.先构建一个关于状态向量的值函数(其中P 是对称正定矩阵,需要求解):

2.带入HJB方程(哈密顿-雅各比-贝尔曼方程)

这个方程表达了 从当前状态出发,若采取最优控制策略,所能达到的最小代价应满足某种微分方程。

再把值函数带入得到:

然后对这个HJB方程对输入u求导:

得到

再构造一个反馈增益矩阵K:

再将结果带入HJB方程得到:

最终求得

**总结:**LQR通过数学模型和优化理论,为无人机提供了一种高效、稳定的底层控制方案。其核心是状态反馈和代价函数最小化,适合需要精确建模和性能优化的场景。

3. 模型预测控制MPC/NMPC

MPC(Model Predictive Control,模型预测控制)是现代控制中非常重要的一个方法,特别适用于多变量系统、有约束系统或需要提前规划行为的场景,比如无人车路径跟踪、无人机避障、工业过程控制等。MPC 是一种滚动优化控制策略。它的基本思想是:

  • 使用系统模型预测未来状态变化(例如未来几秒或几个采样周期);
  • 基于预测结果最小化一个代价函数(类似 LQR 的目标函数);
  • 求解一个有限时域的优化问题,得到一组未来控制序列;
  • 只执行第一个控制输入,然后重新预测、重新优化,循环进行。

这就是 MPC 的“预测-优化-执行-滚动”机制。

如果系统方程是线性的就是MPC,如果非线性就是NMPC。

3.1 MPC

还是以无人机悬停为例,且暂时考虑一维模型,状态变量:

控制输入为加速度:

系统模型(离散)为:

代价函数为:

求解过程:

1.预测:

给定当前状态𝑥0,可以展开出整个时域的状态预测:

定义控制向量:

将整个状态预测写成矩阵形式:

2.优化求解
将预测状态代入代价函数:

代入状态展开:

展开为标准形式:

同时考虑一些必要的硬件约束,调用优化库进行求解得到数值解。

3.执行

执行求解后的u_0,即控制向量的第一个元素。

总流程

每个控制周期:

  1. 读取当前状态𝑥0建预测矩阵 𝑆𝑥,𝑆𝑢 构造代价函数和约束
  2. 解二次规划问题,得到控制向量 𝑢⋆
  3. 仅执行第一个控制输入 𝑢_0⋆
  4. 系统前进一步,滚动窗口,重复上述步骤

3.2 NMPC

仍然是无人机悬停为例,使用NMPC直接控制无人机的电机转速。

状态变量(12维):

控制变量(4维)

系统模型:

这个M就是1.5节的M矩阵。

代价函数:

然后再写出扩展过的系统模型,带入代价函数进行优化求解。

**总结:**LQR就是MPC无约束、无时域限制的特殊形式,而且由于形式简单,可以准确计算解析解,计算快、准。

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

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

相关文章

AI系统性思维复盘概述

核心价值:从“被动思考”到“主动进化”。 基于数据驱动、机器学习和知识图谱的智能化组织学习系统,它将经验积累从传统的主观性、碎片化模式转变为客观性、系统化的科学模式,最终实现从被动应对向主动预防、从经验决策向数据决策、从个体智慧…

C++继承(2)

2.基类和派生类间的转换 •public继承的派⽣类对象可以赋值给基类的指针/基类的引⽤。这⾥有个形象的说法叫切⽚或者切 割。寓意把派⽣类中基类那部分切出来,基类指针或引⽤指向的是派⽣类中切出来的基类那部分。 • 基类对象不能赋值给派⽣类对象。 • 基类的指针或…

easya2a: 一键将 LangChain Agent 发布为 A2A 服务

easya2a: 一键将 LangChain Agent 发布为 A2A 服务 随着 A2A (Agent-to-Agent) 协议的发布,相关的实践项目也逐渐涌现。对于许多希望体验 A2A 功能,但又担心学习成本和开发时间的开发者来说,推荐使用 easya2a——一个可以快速、无缝地将现有 …

原学之设计模式- 设计模式来源

引言 各位旅行者们你们好,我是小森,首先我为啥是程序员。学了技术快六年了,但一直都是断断续续,本身自己的条件,从2021年11月份开始下载原神,总而言之不了解一些抽卡机制导致退了并且删除了具体账号打算重新…

有鹿机器人:AI技术如何重新定义「扫地」这件小事?

当扫地成为一门“技术活”扫地,可能是人类最古老的清洁行为之一。从扫帚到吸尘器,再到今天的无人驾驶清洁设备,我们一直在寻找更高效、更彻底的方式维护环境整洁。但有鹿机器人的出现,让“扫地”这件事有了新的定义——它不再只是…

62.不同路径

dp问题描述 62.不同路径 确定本题的状态表示 dp[i,j]表示的是从左上角走到这个位置的路径条数 确定本题的状态转移方程 根据已知条件:dp[0,0]1,dp[0,1]1,dp[1,0]1 本题的状态转移方程是: dp[i,j]dp[i,j-1]dp[i-1,j] 填表求…

python---包

文章目录包的基本概念创建包的基本结构__init__.py文件导入包和模块相对导入(在包内部使用)导入包和导入模块的区别包是Python中组织模块的一种方式,它允许你将相关的模块分组在一起,形成一个层次结构。包的主要目的是帮助避免命名…

超详细yolov8/11-obb旋转框全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解

因为yolo的检测/分割/姿态/旋转/分类模型的环境配置、训练、推理预测等命令非常类似,这里不再详细叙述环境配置,主要参考【超详细yolo8/11-detect目标检测全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c/python)详解】&#xf…

创世理论达成 全关联的动态振动网:量子世界的“底层逻辑”

全关联的动态振动网:量子世界的“底层逻辑”(不带公式,超级详细)要真正理解量子世界的本质,我们需要跳出“粒子”和“波”的传统框架,从量子场论的核心逻辑出发,用最生活化的类比和日常经验&…

银行间交易IMIX协议加密相关

加密流程 字段筛选与序列化 提取业务报文中标记为敏感的字段&#xff0c;生成待加密的数据块 <!-- 示例&#xff1a;原始交易指令 --> <Order><Symbol>ABC123</Symbol> <!-- 非敏感 --><Price>100.50</Price> …

ABM和强化学习-2015年全国大学生数学建模竞赛B题

多智能体系统&#xff08;Agent-Based Model, ABM&#xff09;和强化学习&#xff08;Reinforcement Learning, RL&#xff09;是两个不同但可结合的概念&#xff0c;尤其在复杂系统建模和人工智能领域有重要应用。下面分别解释它们&#xff0c;并说明二者的关联&#xff1a; …

ALBEF/BLIP/BLIP2/Instruct BLIP/X Instruct BLIP

ALBEF 研究动机 ALBEF之前的一些方式&#xff0c; 视觉分支基本都是基于 dector的方式&#xff08;检出目标框&#xff09;&#xff0c;如下图所示&#xff0c;由于大量的数据没有标框&#xff0c;因此视觉预训练的受限于dector的检测方式。创新点 能不能不再采用dector的方式训…

数据结构——排序算法(简单篇:冒泡排序、选择排序、插入排序)

1️⃣ 冒泡排序&#xff08;Bubble Sort&#xff09; 基本思想 重复地比较相邻的两个元素&#xff0c;如果顺序错误就交换它们。一趟冒泡结束后&#xff0c;最大&#xff08;或最小&#xff09;的元素会“浮”到末尾。下一趟时可以少比较一次&#xff0c;因为最后的元素已经排好…

配置 Docker 镜像加速,解决 docker pull 拉取镜像失败、docker search 查询镜像失败等问题

一、概述 记录时间 [2025-08-16] 在 Docker 学习中&#xff0c;可能会遇到诸如 docker 远程仓库无法访问、docker pull 拉取镜像失败、docker search 查询镜像失败等问题。 这是由于国内网络对 docker 远程仓库的访问受到限制。 那么在国内如何获取 docker 镜像呢&#xff1f…

【Python】Python 面向对象编程详解​

Python 面向对象编程详解​ 文章目录Python 面向对象编程详解​前言一、面向对象的基本概念​1.1 类&#xff08;Class&#xff09;​1.2 对象&#xff08;Object&#xff09;​1.3 属性&#xff08;Attribute&#xff09;​1.4 方法&#xff08;Method&#xff09;​二、类的定…

Redis 缓存和 Redis 分布式锁

目录 Redis 缓存 (Caching) 目的 核心逻辑 存储形式总结 典型场景 Redis 分布式锁 (Distributed Lock) 目的 核心作用 核心逻辑 典型场景 核心区别总结 Redis 缓存 (Caching) 在Redis中&#xff0c;数据是以键值对的形式存储的&#xff0c;其中键总是字符串类型&…

[ java 基础 ] 了解编程语言的第一步

目录 一. IDE (1). 使用IDE的原因: (2). 创建和使用: (3). 常用快捷方式与设置 (4). 注释 (5). 关键字 (6). 标识符 (7). 变量 (8). 数据类型 1) 整数类型 2) 浮点类型 3) 布尔类型(boolean) 4) 字符类型(char) 5) 字符串 6) 基本数据类之间的转换 (9). 运算符…

JavaScript 闭包与递归深度解析:从理论到实战

本文将系统梳理 JavaScript 中闭包与递归的核心概念、实战应用及面试要点,涵盖课堂知识点、作业实现、面试题解析等内容,帮助你全面掌握这两大重要概念。 一、闭包:函数与变量的绑定艺术 1.1 闭包的定义与核心特性 闭包是 JavaScript 中一种特殊的语言现象,其核心定义可…

牛 CDR3 单抗:抗病毒领域的 “纳米级精准导弹”

一、病毒防御的天然克星病毒感染的核心难题在于其表面的 “糖衣炮弹”—— 以 HIV 为例&#xff0c;其 Env 蛋白表面密集的糖链形成物理屏障&#xff0c;传统抗体难以穿透。而牛 CDR3 单抗的超长 CDR H3 结构&#xff08;50-60 个氨基酸&#xff09;如同 “纳米探针”&#xff…

鸿蒙应用开发和Vue网页开发中生命周期的区别

因为下节课就可以写讲解两者生命周期代码的实战了&#xff0c;写介绍一下理论方面的区别&#xff1a;鸿蒙应用开发&#xff08;ArkUI范式&#xff09;与Vue网页开发在生命周期管理上的核心区别&#xff0c;这直接反映了原生OS应用与Web应用在架构哲学和运行环境上的根本差异⚙️…