PID原理及控制算法详解

文章目录

1. 概念

1.1 PID框图

1.2 具体示例:无人机高度控制

2. PID原理

3. 常用术语

4. 计算过程

4.1 比例控制(Proportional)

4.2 积分控制(Integral)

4.3 微分控制(Derivative)

5. 代码实现逻辑

7. 串级PID和代码实现

6. 模拟仿真


1. 概念

PID是应用最广泛的闭环控制方法之一,是一种常用的反馈控制方法,对于每个PID控制器由三个部分组成:比例控制(Proportional)、积分控制(Integral)和微分控制(Derivative)。

一般而言,目标值和反馈值为同种物理量,输出值可以是施加在被控物体上的控制量
举例:对物体进行位置控制时,目标值=目标位置,反馈值=当前位置,输出值=施加的驱动力大小,PID就能实时计算出驱动力使物体到达目标位置。

控制程序一般会定时运行PID算法,在每次运行时,先计算出误差=目标值-反馈值,然后分别由P、I、D三个环节根据误差计算出输出分量,三个分量加和即为最终输出值。

1.1 PID框图

上图就是PID的信号框图,表示了PID的运行过程:

为系统指定一个目标值。PID将目标值与被控对象(无人机)当前的反馈量作差得到误差。PID将误差值分别经过三个环节计算得到输出分量,三个分量加起来得到PID的输出。将PID的输出施加到被控对象上,使反馈量向目标值靠拢。

PID三个环节的作用

由控制无人机案例我们可以总结出PID三个环节各自的主要作用和效应:

  • 比例环节:起主要控制作用,使反馈量向目标值靠拢,但可能导致振荡。

  • 积分环节:消除稳态误差,但会增加超调量。

  • 微分环节:产生阻尼效果,抑制振荡和超调,但会降低响应速度。

PID中物理量的设计

我们在设计PID时主要关注三个量:目标值、反馈值、输出值。PID会根据目标值和反馈值计算输出值。

需要强调的是,PID并不知道被控对象是什么,它仅负责进行数值计算,而我们——作为控制系统的设计者,就需要为PID指定这三个量所对应的实际物理量,这在不同的控制系统中是不一样的。

如何确定实际物理量

我为大家总结了一个常用准则:

  • 目标值和反馈值
    • 通常为同种物理量,就是你需要控制的物理量。
  • 输出值
    • 通常是直接驱动被控对象的控制量。
    • 输出量作用在被控对象上需要经过时间积累才会产生反馈量的变化,换言之,输出值通常为反馈值对于时间的低阶物理量。例如:目标值和反馈值为位置,则输出值可以为速度或加速度。

对于线性关系的两个物理量(只差一个系数),可以直接替换。例如:目标和反馈值为无人机的位置,根据上一条准则,输出值可以为加速度。但我们无法直接控制加速度,只能控制推力大小,由于由于高度的变化是由推力产生的,且推力与加速度只差一个系数(F=ma),因此可以将输出值直接定为推力。

 

1.2 具体示例:无人机高度控制

  1. 目标值(Setpoint)无人机希望达到的高度,例如10米。

  2. 反馈值(Measured Value)无人机当前的实际高度,例如8米。

  3. 误差(Error)

    • 目标高度与实际高度的差值。误差 = 目标高度 - 实际高度 = 10米 - 8米 = 2米。
  4. 输出值(Output)

    • 控制电机的推力大小,以使无人机的高度向目标高度靠拢。
    • 由于推力与加速度成正比,我们可以将输出值设为推力。通过调整推力来改变无人机的加速度,从而改变高度。

2. PID原理

这是一个通过PID控制水管进出水流量的例子。让我们详细解释这个例子:

图示说明

  • 阀门:水管中间有一个阀门,通过调节阀门的开度来控制水流量。
  • PID控制器:控制系统通过PID控制器来调节阀门,以控制水流量。
  • 流量传感器:水管上有流量传感器,用来测量当前的实际流量。

工作原理

  1. 设定值:系统有一个预期流量值(设定值),这是希望达到的水流量。比如2L/S.
  2. 测量值:流量传感器实时测量当前的实际流量。
  3. 误差计算:PID控制器将实际流量与预期流量进行比较,得到误差值(误差 = 预期流量 - 实际流量)。
  4. 控制输出
    • 比例控制(P):根据当前误差值直接调节阀门的开度。误差越大,调整幅度越大。
    • 积分控制(I):根据误差随时间的累积来调节阀门,以消除持续的偏差。积分控制能消除系统的稳态误差。
    • 微分控制(D):根据误差变化的速度来调节阀门,预见并平滑误差的变化,减少超调和振荡。

实际操作

  • 启动时:当系统启动时,PID控制器根据初始误差进行较大的调整,使流量迅速接近设定值。
  • 稳定阶段:当实际流量接近设定值时,比例控制器的作用减小,积分控制器确保误差归零,微分控制器平滑误差变化,避免波动。
  • 扰动响应:当系统受到外部扰动(如水压变化)时,PID控制器会重新计算误差,并调整阀门,以重新达到设定的流量值。

3. 常用术语

  • 被控对象:需要控制的对象。例如,温度控制中的加热器、速度控制中的电机等。
  • 目标值(Setpoint):期望被控对象达到的状态量。例如,温度控制中的期望温度、速度控制中的目标速度。
  • 反馈值(Measured Value):被控对象当前时刻的状态量。例如,当前的温度、当前的速度。
  • 增益(Gain):比例、积分和微分部分的放大系数,分别是Kp、Ki和Kd。
  • 输出量(Output):PID的计算结果,用于调整被控对象的控制力。例如,加热器的功率、驱动电机的电压。
  • 误差(Error):目标值与反馈值之间的差异。公式为:误差 = 目标值 - 反馈值。
  • 稳态误差(Steady-State Error):系统在稳定状态下仍然存在的误差。例如,加入干扰后仍存在的误差。
  • 阶跃输入(Step Input):在系统稳定状态下,目标值发生突然变化。例如,目标温度从20°C突然升高到25°C。
  • 阶跃响应(Step Response):阶跃输入后,被控对象的响应状态,能够代表系统的控制性能。
  • 瞬态响应(Transient Response):系统从初始状态到达到稳态的过渡过程,包括上升时间、超调量和调节时间等。
  • 响应速度(Response Speed):阶跃输入后,被控对象再次到达目标值的速度。
  • 超调量(Overshoot):阶跃输入后,被控对象到达目标值后超出目标值的距离。

4. 计算过程

这里用无人机的高度控制来举例

4.1 比例控制(Proportional)

假如让无人机悬停在10米的高度,但此时高度为2米,所以此时误差(error)为8米,假设Kp=0.5,比例控制每次调节的高度就为:

Kp * error

所以第一次调节为 0.5*8=4,此时误差变为4米。

第二次调节:0.5*4=2,此时误差变为2米。

依次进行调节,误差逐渐变小。这个过程就叫做比例调节。

Kp值越大,系统反应速度越快,无人机更快靠近误差。

但是比例控制的缺点为两点:

  • 干扰:容易受到外界干扰,比如此时有持续的风将无人机向下吹,导致无人机同一周期向下1米,此时比例控制的计算结果为0.5*2=1,所以,这会导致无人机永远保持在八米的高度,误差保持在2米。这也叫做稳态误差。
  • 震荡:Kp值越大,系统反应速度越快,无人机更快靠近误差,但同时无人机在接近目标高度时,产生的震荡也越严重。

为了消除稳态误差的问题,就需要用到积分控制(Integral)。

为了消除系统震荡的问题,就需要用到微分控制(Derivative)。

4.2 积分控制(Integral)

积分控制是对之前计算的所有的误差求和,也就是在离散的情况下做累加,比如无人机经过两次调节,第一次误差为8米,第二次误差为4米,加起来就是12米,假如Ki=0.1,计算结果为:

 0.1*12=1.2,所以及时有向下持续的风影响无人机,由于积分控制,无人机还是会向上走1.2米。

所以积分控制会对误差进行累计,从而提供更大的升力,让无人机慢慢的朝着目标点靠近,最终误差消除为0。

所以经过第三次调节,累计误差从12调整到了12.8,那么第四次调节的结果0.1*12.8=1.28。

但此时无人机距离目标高度仅为0.8米,如果还是调节1.28米,就会出现过冲现象。

此时就需要使用微分控制进行更细致的调节。

4.3 微分控制(Derivative)

微分控制就是通过当前时刻与前一刻误差量的差值对未来做预测。如果差值为正,就表示误差在变大,为负就表示误差在减小。如果误差在变大,就会加大控制强度,让误差降下来。如果误差减小,就会减小控制强度,让无人机平稳缓和的到达指定值。

这里也就相当于对距离求微分:

d(error)/dt = 速度

微分控制算法可以对无人机的速度做出响应,当无人机的速度过快时,微分控制会抵消一部分由比例控制计算出来的升力,从而减缓系统的震荡。所以当我们提高Kd的值,系统的震荡会逐步减小。

但无论是比例,积分还是微分控制,数值调的过大,无人机就会出现过冲现象。

5. 代码实现逻辑

这段伪代码实现了一个基本的PID控制算法。

previous_error := 0
integral := 0loop:error := setpoint - measured_value //计算误差integral := integral + error * dt //计算积分derivative := (error - previous_error) / dt //计算微分output := Kp * error + Ki * integral + Kd * derivative //计算控制输出previous_error := error //更新前一次误差wait(dt) //等待并循环goto loop
  • previous_error 用于存储前一次循环中的误差值,初始化为0。
  • integral 是积分部分的累加值,初始化为0。
  • error 是当前的误差,等于设定值(setpoint)减去测量值(measured_value)。
  • 积分部分通过累加误差乘以时间步长(dt)来实现。这个部分用于消除系统的稳态误差。
  • 微分部分通过当前误差减去前一次误差,再除以时间步长(dt)来实现。这个部分用于预测误差的变化趋势,从而提前进行调整。
  • 控制输出(output)是比例、积分和微分三部分的加权和。
  • Kp 是比例增益,对应 error。
  • Ki 是积分增益,对应 integral。
  • Kd 是微分增益,对应 derivative。
  • 将当前的误差值存储到 previous_error 中,以便下次循环使用。 

这段伪代码通过不断地测量误差、累积积分和计算误差变化率,动态调整控制输出,使系统的实际值尽量接近设定值。

7. 串级PID和代码实现

串级PID可增加系统的稳定性,抗干扰能力更强,包括代码实现可以看下面这篇:

串级PID控制算原理及法详解-CSDN博客

6. 模拟仿真

下面这个网站可以模拟调节PID参数来控制无人机

Webpack App

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

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

相关文章

windows@文件高级共享设置@网络发现功能@从资源管理器网络中访问远程桌面

文章目录 高级共享设置常用选项其他选项操作界面说明 网络类型检查和设置(专用网络和公用网络)👺Note 高级共享设置和防火墙👺命令行方式使用图形界面方式配置 网络发现网络发现功能的详细介绍网络发现的作用👺网络发现的工作原理启用和配置网…

【Python实战因果推断】2_因果效应异质性2

目录 CATE with Regression Evaluating CATE Predictions CATE with Regression 我想你可能已经预料到了:与应用因果推理中的大多数情况一样,答案往往从线性回归开始。但在走这条路之前,让我们把事情变得更具体一些。假设你在一家遍布全国的…

[A133]uboot启动流程

[A133]uboot启动流程 hongxi.zhu 2024-6-21 1. 第一阶段 lds描述 从u-boot.lds中能找到程序的汇编入口ENTRY(_start) brandy/brandy-2.0/u-boot-2018/u-boot.lds OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUT…

vant组件 顶部下拉刷新和页面底部下拉获取数据+顶部搜索框

1.html部分&#xff08;顶部tab切换无&#xff0c;只有主体list部分&#xff09; <div class"yd" ><!-- yd端 --><!-- 搜索框 --><van-searchv-model"ydsearchvalue"show-actionplaceholder"请输入搜索关键词"search"…

JavaEE之HTTP协议(1)_HTTP基础知识,HTTP 请求、响应格式,方法,状态码

一、HTTP协议 1.1 基本概念: HTTP全称超文本传输协议&#xff0c;是一种无状态的、应用层的协议&#xff0c;它基于请求/响应模型。客户端&#xff08;通常是Web浏览器&#xff09;通过发送HTTP请求到服务器来获取或发送信息&#xff0c;服务器则返回HTTP响应作为回应。HTTP协…

shell (三)shell脚本

SHELL脚本 编程语言的分类 解释型语言&#xff1a;shell&#xff0c;Python&#xff0c;需要解析器 编译型语言&#xff1a;C语言&#xff0c;C&#xff0c;需要编译器 shell脚本 操作系统的结构 shell&#xff08;贝壳&#xff09; 应用层 app&#xff0c;代码 应用层需要通…

1、线性回归模型

1、主要解决问题类型 1.1 预测分析(Prediction) 线性回归可以用来预测一个变量(通常称为因变量或响应变量)的值,基于一个或多个输入变量(自变量或预测变量)。例如,根据房屋的面积、位置等因素预测房价。 1.2 异常检测(Outlier Detection) 线性回归可以帮助识别数…

鸿蒙开发系统基础能力:【@ohos.systemTime (设置系统时间)】

设置系统时间 本模块用来设置、获取当前系统时间&#xff0c;设置、获取当前系统日期和设置、获取当前系统时区。 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import systemTime …

沙盒在数据防泄密领域意义

在信息化快速发展的今天&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;数据泄密事件频发&#xff0c;给企业的安全和发展带来了巨大威胁。SDC沙盒防泄密系统&#xff0c;作为一种创新的数据防泄密解决方案&#xff0c;正逐渐在数据防泄密领域发挥着越来越重要的…

安装zabbix时报错Could not resolve host: mirrors.huaweicloud.com;Unknown error解决办法

目录 1、问题原因 2、解决办法 3、知识拓展 DNS的区别 DNS配置文件解析 域名解析过程 4、书籍推荐 当安装Zabbix server&#xff0c;Web前端&#xff0c;agent时出现&#xff1a; [rootsc-zabbix-server ~]# yum install zabbix-server-mysql zabbix-agent安装过程中会出…

Python3极简教程(一小时学完)上

开始 Python 之旅 本教程基于 Python for you and me 教程翻译制作&#xff0c;其中参考了 Python tutorial 和 _The Python Standard Library_&#xff0c;并对原教程的内容进行了改进与补充。 相关链接地址如下&#xff1a; _Python tutorial_&#xff1a;Python 入门指南…

数字孪生流域:定义、组成等

数字孪生流域&#xff1a;定义、组成等 1 数字孪生流域&#xff08;Digital Twin Basin/Watershed&#xff09;总则1.1 定义1.2 适用范围1.3 建设目标1.4 建设原则 2 数字孪生流域框架与组成2.1 数字孪生流域框架2.2 数字孪生流域组成2.2.1 数字孪生平台2.2.2 信息化基础设施 3…

JavaScript学习笔记(二)

12、数字 常规用法和java的用法相似&#xff0c;就不再做详细的记录, JavaScript 数字 以下只记录特殊用法&#xff1a; 12.1 数字字符串运算 在所有数字运算中&#xff0c;JavaScript 会尝试将字符串转换为数字&#xff1a; var x "100"; var y "10"…

第 5 章理解 ScrollView 并构建 Carousel UI

通过上一章的学习,我相信你现在应该明白如何使用堆栈构建复杂的 UI。当然,在你掌握 SwiftUI 之前,你还需要大量的练习。因此,在深入研究 ScrollView 以使视图可滚动之前,让我们先以一个挑战开始本章。你的任务是创建一个类似于图 1 所示的卡片视图。 …

swp添加池子addLiquidity失败

案发现场 首次添加交易对、一直失败、但是也没提示具体的原因。到这一步就没了、由下图可知、也没看到log、由此可见第一步就失败了。 解决方案 一、添加 工厂KywFactory 添加如下 bytes32 public constant INIT_CODE_PAIR_HASH keccak256(abi.encodePacked(type(KywPair…

注意!短视频的致命误区,云微客教你避开!

为什么你做短视频就是干不过同行&#xff1f;因为你总想着拍剧情、段子这些娱乐视频&#xff0c;还想着当网红做IP人设&#xff0c;但是这些内容跟你的盈利没有半毛钱关系&#xff0c;况且难度大、见效慢&#xff0c;还不是精准客户。 以上这些就代表你走进了短视频的误区&…

C++初学者指南-2.输入和输出---流输入和输出

C初学者指南-2.输入和输出—流输入和输出 文章目录 C初学者指南-2.输入和输出---流输入和输出1.定制输入/输出1.1 示例&#xff1a;点坐标输入/输出1.2 流操作符1.3&#xff08;一部分&#xff09;标准库流类型 2. 工具2.1 用getline读取行 2.2 用ignore进行跳转2.3 格式化操作…

【论文阅读】-- Temporal Summary Images:通过交互式注释生成和放置实现叙事可视化的方法

Temporal Summary Images: An Approach to Narrative Visualization via Interactive Annotation Generation and Placement 摘要1 引言2 背景及相关工作2.1 叙事可视化和讲故事2.2 显示面向时间的数据2.3 小倍数和漫画2.4 注释可视化 3 设计要求和工作流程3.1 工作流程3.2 TSI…

基线核查--渗透

基线检查 基线核查概念 it中定义&#xff1a; 基线为初始的标准&#xff0c;以后更改就要经过授权&#xff0c;形成下一基线。 软件配置管理的基线&#xff1a;1功能基线&#xff0c;分配基线&#xff0c;产品基线 安全配置基线--基线核查 安全基线可以说是木桶理论&…

【python】eval函数

1.eval函数的语法及用法 &#xff08;1&#xff09;语法&#xff1a;eval(expression) 参数说明&#xff1a; expression&#xff1a;必须为字符串表达式&#xff0c;可为算法&#xff0c;也可为input函数等。 说明&#xff1a;表达式必需是字符串&#xff0c;否则会报错&a…