PID概述以及在无人机中的应用

2023-05-16

PID控制是将误差信号的比例P,积分I,微分D通过线性组合构成控制量,称之为PID控制。但是在很多情况下,往往不一定需要三个单元,但是比例单元是必不可少的。PID控制器难点在于参数的整定,但是很多情况下我们可以直接根据系统的时域响应来调节这三个单元的参数。

1.      比例环节(P):直接将误差信号放大或缩小,因此将比例环节参数增大可以提高响应速度并且减小稳态误差,但是,快速性和稳定性总是矛盾的,增大比例系数的同时,系统的稳定性会逐渐降低,系统有可能会出现超调,震荡,甚至发散,因此合适的比例增益是在快速性和稳定性之间进行折中。

2.      积分环节(I):从积分的定义可知,该环节是将误差不断进行累积,可实现消除稳态误差。增益越大,积分作用越强,稳态误差消除也越快,但是带来的问题是容易产生积分饱和现象,带来打的超调并延缓系统进入稳态的速度。

3.      微分环节(D):这是一个超前环节,提前预知我们控制量是该减还是该增,避免造成超调,震荡,因此增大该环节增益有助于提高系统的稳定性,避免震荡,但是对快速性产生了副作用。微分环节对噪声信号将产生放大作用。

 

我们对自动控制系统的要求无非是稳准快:

稳定性:(P和I降低系统的稳定性,D提高系统稳定性)在平衡状态下,系统受到某个干扰,经过一段时间,其被控量可以达到某一稳定状态

准确性:(p和I提高稳态精度,D无作用)系统处于稳态时,其稳态误差小

快速性:(P和D提高响应速度,I降低响应速度)

 

我们看一下pid算法的一般形式:


简单点说就是通过误差信号控制被控量,控制器本身就是比例,积分,微分三个环节的加和。由上图可知,pid控制就是对偏差的控制过程。如果偏差为零,则比例环不起作用,只有存在偏差时,比例环节才起作用。

积分环节主要用来消除静差(系统稳定后输出值和设定值之间的差值)积分环节实际上就是偏差累计的过程,把累计的误差加到原有系统上以抵消系统造成的静差)

微分信号则反应了偏差信号的变化规律,或者说是变化趋势,根据偏差信号的变化趋势来进行超前调节,从而增加系统的快速性。

 

PID在四轴中的作用:

P控制多轴飞行器对角度变化的响应速度和力度,它产生一个目标位置跟当前位置的角度偏差大小成正比的矫正力量。P产生的控制是I和D的控制基础。P值越大,矫正力量越大,校准速度越快。在较大的P值作用下,任何外部偏转飞行器的企图,都会产生一个非常强的阻挡力量。

如果随着P值过高,校准力量过大,角度矫正会过头,过头后需要相反的力量来校准。这就会造成震荡效应,直到最终稳定下来,也可能由于矫正过头被放大而让多轴飞行器变得完全不稳定。

增加P值,飞行器自稳能力会变得更好,直到P值过高,飞行器会产生震荡和失去控制。减小P值,多轴飞行器的自稳能力下降,飞行器容易漂移;直到P太低,飞行器会变得非常不稳定。

总结:特技飞行需要稍微较高的P值,温和平稳飞行需要较低的P值。

 

I根据当前位置和目标位置的角度偏差的累积,提供一个可变的校准力量。角度偏差越大或者偏差的时间越长,这个校准力量越大。I在有系统误差和外力作用时,可消除偏差提高精度,积分所得的值应该有所限制,以防让他变得太大。

增加I会让飞行器的自稳能力更强,能减少由于机架不平衡等原因导致的漂移,但也会加快多轴飞行器对角度变化的响应速度。过大的I会让飞行器产生过冲,甚至振荡。减小I能提高飞行器对角度变化的反应(P值作用),但是会增加漂移和减少保持原来位置的能力。

总结:特技飞行需要较高的I

 

D抑制P和I调节时产生的过冲和振荡,也可以抵抗外界的突发干扰,组织系统的突变。

增加D值能降低多轴飞行器的角度快速变化,抑制飞行器过冲和振荡。减少D值,能提高多轴飞行器对角度快速变化的响应速度。

总结:特技需要小点的D值,温和平稳飞行需要增大D值。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PID概述以及在无人机中的应用 的相关文章

  • 工程实践---ZN法整定PID

    工程实践 ZN法整定PID 知乎 zhihu com
  • 电机控制进阶——PID速度控制

    之前的几篇文章 电机控制基础篇 介绍的电机编码器原理 定时器输出PWM 定时器编码器模式测速等 本篇在前几篇的基础上 继续来学习电机控制 通过PID算法 来进行电机的速度控制 并进行实验测试 PID基础 PID即 Proportional
  • 连载---《自动调节系统解析与PID整定》之一

    原创连载 自动调节系统解析与PID整定 之一 360doc com
  • TSI系统测量参数之:转速和零转速

    一 TSI系统测量参数 1 轴向位移 2 盖振或瓦振 3 偏心 4 键相 5 零转速 6 轴向振动 7 相对热膨胀 胀差 8 绝对热膨胀 缸胀 二 各参数作用 1 零转速与转速 1 零转速 主要用在汽机转速到零时投盘车的连锁以及对大机转速的
  • PID算法与PID自整定算法

    本文是由于研发恒温槽项目故需要了解PID控制算法和PID自整定算法 为方便本人日后需要故作此记录 直接粘贴代码吧 这是PID位置式控温算法 函数名 void Pid positional float speed 用途 PID输出 说明 参数
  • 如何以编程方式获取 OS X 上给定 PID 的打开文件描述符列表?

    我所看到的一切都说要使用lsof p 但我正在寻找不需要 fork exec 的东西 例如 在 Linux 上 人们可以简单地步行 proc pid fd You can use proc pidinfo与PROC PIDLISTFDS枚举
  • 进程组必须有一个正在运行的领导进程吗?

    在类 Unix 操作系统中 如果一个进程 pid和它的pgid相等 则该进程是进程组的领导者 但是 如果进程领导者已经退出 并且同组中的其他进程仍在运行 那么谁是继任的领导者进程 没有继任领导者 一旦流程组领导者退出 该组就失去了领导权 没
  • 如何在Python中检查是否存在给定pid的进程?

    有没有办法检查 pid 是否对应于有效进程 我从其他来源获取 pid 而不是os getpid 我需要检查机器上是否不存在具有该 pid 的进程 我需要它在 Unix 和 Windows 中可用 我还在检查 PID 是否未被使用 如果 pi
  • copy_from_user() 的任何示例吗?内核和用户空间

    我正在寻找将 PID 值从用户空间复制到内核空间 这是我的代码快照 内核模块 include
  • 将手柄传递到管道中

    说我有 node foo js node bar js 有没有办法将 foo 的标准输入句柄传递给 bar js 我有一个罕见的情况 我想在管道中进行向后通信 至少我知道我可以发送node bar js的pidnode foo js 鉴于
  • C - 获取用popen打开的进程的PID

    我有一个用 C 编写的程序 它使用 popen 打开另一个程序 我想获取该程序的 pid 或某种处理程序 以便在一定时间限制后 或者在它超出某些 ram 和 stdout 限制时杀死它 我认为这必须用ptrace来完成 它需要PID 但我不
  • 有没有办法链接linux的线程TID和pthread_t“线程ID”

    在 Linux 上 线程由pthread t或 TID 我正在寻找这两种线程 id 之间的桥梁 given a pthread t我可以得到它吗TID 显然 https stackoverflow com questions 558469
  • fork()返回0,但是子进程getpid()!=0。为什么?

    这是测试 fork 系统调用的 C 代码 include
  • 如何查看linux中特定进程每5秒的内存消耗情况

    我只是想知道如何找到特定进程在特定时间 比如5秒 的内存消耗 我是linux新手 因此 详细的步骤将不胜感激 Use top p PID其中 PID 是进程 ID 应显示有关进程的信息 包括使用的系统内存百分比 类型d以及一个以秒为单位的整
  • 查看用户最近执行的Android任务

    我想查看我的 Android 手机最近的任务 我尝试了一些来自互联网的代码 但没有一个能正常工作 我只想获取用户最后执行的应用程序的PID和名称 例如 如果我执行计算器应用程序 然后执行我创建的最近任务应用程序 则该应用程序应该能够告诉我类
  • AppleScript:从应用程序隐藏/获取进程名称

    我想隐藏最前面的应用程序 我知道您可以使用以下语法隐藏进程 tell application System Events set visible of process to false end tell 我知道如何获取最前面的应用程序 pa
  • 查找PID所属的tmux会话

    我正在使用 htop 所以看看哪些进程占用了大量内存 以便我可以杀死它们 我有很多 tmux 会话和很多类似的流程 如何检查 PID 位于哪个 tmux 窗格中 以便确定我正在杀死我想杀死的东西 鉴于PID下面一行是目标 pid 号 tmu
  • 如何在不使用adb shell的情况下获取android应用程序的pid?

    如何在不使用 adb shell 的情况下获取 Android 应用程序 pid 有没有API可以获取pid 任何帮助将不胜感激 由于每个应用程序都有自己的进程ID 因此可以通过 int pid android os Process myP
  • 如何在 alpine 中使用 ps 命令获取特定 PID 的进程名称

    在基于 ubuntu 的 docker os 中 ps PID USER TIME COMMAND 1 postgres 0 00 postgres 47 postgres 0 00 postgres checkpointer proces
  • 启动 psexec 后获取进程 ID

    我有一个使用 psexec 在远程计算机上调用记事本的脚本 有什么办法可以在启动后获取进程ID吗 这是我所拥有的 PCname MyPC SessionID 2 Program Notepad exe FilePath C temp Fil

随机推荐

  • 关于IP地址、网络号、主机号、子网掩码之间的关系

    IP地址类似于我们的身份证号码 国家为了唯一确定我们每个人的身份 xff0c 会为我们每个人分配一个唯一确定身份的号码 xff0c 同理 xff1a 为了确切地标识Internet xff08 互联网 xff09 中的每一台主机和路由器 x
  • Android原生编解码接口 MediaCodec 之——踩坑

    关键帧 MediaCodec 有两种方式触发输出关键帧 xff0c 一是由配置时设置的 KEY FRAME RATE 和KEY I FRAME INTERVAL参数自动触发 xff0c 二是运行过程中通过 setParameters 手动触
  • [xshell6过期解决方案]xshell6评估过期 如何继续使用(亲测有效) 100%成功

    过完年来上班第一天打开xshell提示评估过期了 很是尴尬 搞了老半天才弄好 下面来分享一下我的解决过程 大家严格按照下面的流程走就可以了 基本都可以成功 如果没成功 那一定是你的姿势不对 1 我之前下载的是evaluation版本 xff
  • # Ubuntu 配置自带vnc桌面共享

    Ubuntu 配置自带桌面共享 1 在setting gt gt shareing gt gt remote 选择on 如果用ubunutu直接远程连接的话已经可以了 xff0c 2 在ubuntu下使用系统自带的remmina连接 vnc
  • netconf学习-安装ncclient客户端提示'install_requires'错误

    环境说明 xff08 1 xff09 操作系统 xff1a centos7 7 xff08 2 xff09 python版本 xff1a 2 7 5 问题描述 在学习netconf的时候需要编写netconf自动化 xff0c 此时就需要用
  • Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C#)(Mono)

    Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式 xff08 C xff09 Baumer工业相机Baumer工业相机图像数据转为Bitmap的技术背景Baumer工业相机使用BGAPISDK将图
  • OpenStack版本

    OpenStack的每个主版本系列以字母表顺序 xff08 A Z xff09 命名 xff0c 以年份及当年内的排序做版本号 xff0c 从第一版的Austin xff08 2010 1 xff09 到目前最新的稳定版Liberty xf
  • PX4FLOW光流模块DIY(含部分代码讲解)

    暑假有时间整理一下以前做的东西 xff0c 发发博客 xff0c 既给网友们学习也方便自己交流 今天讲讲我两年前从github学习的PX4FLOW光流模块 光流是视觉导航的重要部分 在运动检测和许多slam技术都使用到了光流 xff0c 但
  • 一路(16)相随,一起(17)前行

    2016年对于楼主来说 xff0c 是艰难的一年 xff0c 也是幸运的一年 xff0c 我想把我的故事说给你听 xff01 迈入IT行业已经快一年了 xff0c 但是实际上真正练习的时间只有仅仅的四个多月 xff0c 之前的专业是电子方面
  • 英文突然间隔变大

    之前总是遇到一个尴尬的问题 xff0c 就是写文档的时候间距突然变大 xff0c 调整段落间距并未没有效果 xff0c 例如这种 xff1a 解决办法 xff1a Shift 43 空格
  • JAVA从入门到精通(2)

    一 Java中的关键字 1 关键字 xff1a 具有一些特殊用途的词 2 注 xff1a 在程序中应用关键词需要慎重 xff01 3 常用的关键词 xff08 举例说明 xff09 interface xff1a 接口 class 类 pu
  • myeclipse闪退的问题

    之前遇到myeclipse的闪退 xff0c 探索了之后 xff0c 找到了方法 xff0c 今天早上又遇到这种问题 xff0c 按照上次的方法尝试是没有问题的 决定和大家分享 删除 workspace xff08 工作空间 xff09 m
  • 【损失函数系列】softmax loss损失函数详解

    1 损失函数 xff1a 损失函数 xff08 loss function xff09 是用来评测模型的预测值f x 与真实值Y的相似程度 xff0c 损失函数越小 xff0c 就代表模型的鲁棒性越好 xff0c 损失函数指导模型学习 根据
  • JAVA从入门到精通(14)-- 包装类

    一 包装类 1 基本数据类型是不具备对象的特征的 xff0c 比如基本数据类型不能调用方法 功能简单 xff0c 为了让基本数据类型具备对象的特性 xff0c Java为每个基本数据类型提供了一个包装类 2 3 包装类主要提供了两大类方法
  • JAVA从入门到精通(16)-- Java版JSON入门

    一 JSON课程介绍 1 JSON是行业内使用最为广泛的数据传输格式 定义 xff1a JSON是一种与开发语言无关的 轻量级的数据格式 全称是JavaScript Object Notation 优点 xff1a 易于人的阅读和编写 xf
  • JAVA从入门到精通(17)-- GSON

    一 GSON介绍 1 介绍 xff1a GSON最早由Google提出的开源的项目 xff0c 主页在github上 xff0c 解析json 二 GSON生成JSON数据 1 加入依赖 xff0c 创建包和类 2 创建Gson对象 Man
  • JAVA从入门到精通(18)-- Servlet

    一 Servlet定义 1 现有JSP还是先有Servlet xff1f 先有的Servlet xff0c 因为JSP的前身就是Servlet 2 定义 xff1a Servlet是在服务器上运行的小程序 一个Servlet就是一个Java
  • pixhawk自学笔记之uorb学习总结

    注 xff1a 这是看过好多文章总结出来的 xff0c 转载了较多人的博客 xff0c 希望有知道原出处的人把地址留下 xff0c 我贴上来 在此谢谢各位前辈的总结 xff08 我会在后续笔记中贴出在我自己的程序中对于uorb的使用 xff
  • pixhawk自学笔记之px4程序启动顺序

    在了解px4启动之前我们需要了解一下bootloader Bootloader是在操作系统内核运行之前运行 xff0c 可以初始化硬件设备 xff0c 建立内存空间映射图等 xff0c 整个系统的加载启动任务就是完全由Bootloader来
  • PID概述以及在无人机中的应用

    PID控制是将误差信号的比例P xff0c 积分I xff0c 微分D通过线性组合构成控制量 xff0c 称之为PID控制 但是在很多情况下 xff0c 往往不一定需要三个单元 xff0c 但是比例单元是必不可少的 PID控制器难点在于参数