roll横滚,pitch俯仰,yaw航向

一、PID的作用概述

1、P产生响应速度和力度,是I和D的基础

过小响应慢(虽然无震荡)
过大会产生振荡且不断发散

2、D抑制过冲和振荡,抵抗外界的突发干扰,阻止系统的突变。

过小系统会过冲
过大会减慢响应速度(虽然不引起过冲)

3、I在有系统误差和外力作用时消除偏差、提高精度,同时也会增加响应速度,产生过冲

过小时消除偏差的速度慢
过大会产生振荡

P----完美的P值能使得gyro的噪音尽可能的低。P值线有一些涟漪是正常的,但是要在一个合理的范围内。较高的P值会会增加噪音以至于影响gyro的曲线,会使增加曲线的涟漪(较慢频率的震荡)。
D----完美的D值是与P值有联系的,更确切的说是在的到完美P值之前得到的,其与P值的重要性相等。然而D值的噪音一般来说都会比P值要大,所以通常都会是D值保持一个较低的值。
I-----I值的调节其实可以忽略,这个值的调节一般在飞行的时候调节。- -般将I值保持较低的值,除非在飞行的时候感觉比较飘或者下降的时候感觉到飞机震荡再去增加I值。较低的I值能使的飞行时特别是激烈飞行时,飞机更流畅。

二、betaflight固件如何调节PID

原帖地址:https://github.com/betaflight/betaflight/wiki/PID-Tuning-Guide

2.1 介绍

总的来讲,要达到良好的调试效果,我们需要在保证机身没有振荡的情况下尽可能用最大的P值,实际上,P值大小与你在一个轴上的控制量成正比。P越小控制量越小,P越大控制量越小。但是问题是如果P的值太高,飞机会开始超调,即超过预期的最终状态。这就会导致飞机不断的过度来回矫正,于是飞机就开始震颤。如果使用高质量的电调和快速的PID循环周期时间能帮助飞控更快更有效的作出矫正。

I 和D仅仅是用来帮助处理当P的调节无法处理的振荡和剩下的一些问题:
I会回顾当前时间那些P值无法矫正的一些累积的错误(漂移),然后对其进行调节。这就是为什么增加I值可以解决一些比如当你改变油门大小的时候俯仰一起变化(但你必须先尝试增加你的P值,如果你的P值太低,那么I需要做的就太多,因为P并没有完成它所有的工作)的问题。

D 会观察当前通道是否太快达到了其预期的值。如果你快速的给飞机一个停止横滚的指令,一个高的P值(就像我们希望的那样)往往会让翻滚过头一点点然后“反弹”。如果你看到很多这样的情况,你可能需要增加一点D的值。增加D的值也可以帮助在快速的转向或是低油门快速下降(“洗浆”进入下洗气流)时出现的一些小振荡。非常重要的是请不要将D调的太大。只有在必要的时候才需要调整它,因为D值太大会引起噪声,噪声会引起电机升温并且可能引起电机烧毁!

2.2 调节步骤

确保你的电机是平衡的,同时你的飞机尽可能的没有振动。如果你没有办法从黑匣子里面读取到非常清晰的陀螺仪曲线的情况下,就去调试PID就像是在没有一个结识的地基就开始造房子一样。以下视频介绍了一种简单的方式如何检查你电机上的振动。如有必要,调整你的低通滤波器使陀螺仪获得清晰的曲线。
https://www.youtube.com/watch?v=vjEsYei12Jw

这些步骤必须要在Acro(手动)模式完成,即使你通常是使用Angel/Horizon模式(自稳/半自稳)的飞手。Angel/Horizon模式有它们自己的叠加PID参数,会影响到飞机的调整(手动参数叠加自稳参数才是自稳模式下的表现,自稳参数对于实际PID参数有叠加影响)。以下所示实例的PID值对应于Rewrite PID控制器(PID控制器#1)。当刚开始调试时,设置TPA的值为0。如果需要,TPA可以以后增加。
先从比BetaFlight固件提供的默认P值略低一点开始,Pitch和Roll的P推荐从4.0开始较好。同时降低I和D的值,为了保证在I和D的影响最小的情况下调整P的值。推荐I值设置为20,D的值设置为5作为初始值。为了消除Yaw轴产生震荡影响PID调试,对于yaw的PID,最好的减小P到默认值的一半,然后将I值降低一点点。Yaw可以放到最后调试。
经过一段时间的飞行调试,增加Roll的P值,直到你推满油门时看见并听见飞机产生非常快速的抖动。然后再设置P值到大概刚才引起抖动的P值的70%。
重复第三步调试Pitch轴
测试一下你的飞机是否能够保持你给定的横滚角度,并且不会慢慢的出现漂移,然后你可以快速的拉满油门爬升,然后收油使得飞机自由落体,快速的来回几次,此时飞机的水平角度应该不会出现明显的变化。如果飞机不能保持水平状态并出现漂移,此时增加一点I值。如果你没有发现飞机出现漂移情况,不要改变I值。等到你调整完全部的PID值之后,你可以通过调整I值的大小来改变一下飞机的手感(I值不会真正影响到最后调试好的P和D值)

重复第五步调试Pitch轴
只有当你的飞机在筋斗/滚转,或者洗桨下落,或者自由落体以后,飞机出现一点点反弹震荡时,才在对应的Roll或者Picth轴上增加D值来克服这种反冲震荡。如果你的飞机没有出现这个情况,请保持一个很低的D值。等你完成了这个调试过程,那么你的PID调试工作差不多完成了80~90%。
通常会把Yaw方向的P放到最后来调整,但是如果你不去调整这个值,还是有可能给飞机带来震荡。你可以把Yaw的P值从默认值的一半开始调整,如果你在迅速向前飞行,或者在punch-out(满油拉起-自由落体)这一过程中,没有发现飞机出现任何震荡,你就可以加5.0的幅值开始增加你的Yaw的P值。直到你在迅速往前飞或者 punch-out(满油拉起-自由落体)从你的FPV镜头开始出现抖动模糊,降低Yaw的P值一点点。如果需要更精细的调整 则需要查看黑匣子里的Yaw P曲线,也许会看到一点点震荡,放大Yaw的陀螺仪曲线查看这个P值是否真的在震荡,如果Yaw的陀螺仪曲线看上去很平整,你就已经调整好啦。

注意:相对于Pitch和Roll的P值,本质上来说Yaw的P值的有效控制力很低,所以Yaw P值的调整区间范围很大,你的调试值和真正好的那个值,偏差很大都不会有太大问题。所以相对于Pitch和Roll的值来说,Yaw的P会出现一个很高的P和I值,和一个很低的D值。如果需要更精细的调整,那么需要条用黑匣子的记录,大部分的P值超调带来的震荡都是由Roll和Picth,如果你调整过后在满油门的时候曲线里面还有震荡,那么就需要看一下是否是Yaw P带来的震荡,如果是,那么减少一点Yaw P值。

最后,来微调P值和I值,就看飞机的自旋是否稳定,一个很低的I值会导致飞机总是在慢慢的漂移,一个比较低的I值会导致这个I值所控制的轴线能够非常自由的调整姿态,但是又能够保持住当前的姿态。一个比较高的I值会导致这个I值控制的轴线能够非常好的保持住当前的姿态,但是你会觉得飞机在转动的时候有一个比较大的惯性(或者说阻尼)来阻止飞机姿态的变化。一个非常高的I值会带来一种机械感,并且会导致震荡。当然也可以通过导出黑匣子里的记录来做精细调整,这会是你的PID调整到达一个完美的状态。
当你在手动模式下完成了所有的调试以后,你就可以去调试Level/Horizon模式的PID,如果你确实会去飞这两种模式(如果你一定要这么做的话)

记住不要过分的去追求一个很干净的陀螺仪曲线,如果你的多轴飞行表现特别好也能够跟上你的手感,就这样出去飞吧!

注意事项:
如果你想从黑匣子记录里面找到过高的P值带来的震荡,这种震荡不会是你想的那种大范围的弧线或者高高低低的尖峰或者低谷。最容易注意到的高P值震荡通常都会在较高的油门值处出现,看起来就像一条紧绷的正弦曲线。在调试的时候你可能听不到也观察不到这种震荡,但是黑匣子记录里面可以很清晰的看到这种震荡。等到你都能听到或者观察到这种震荡时,这种曲线在黑匣子里面已经可以非常明显的找到了。这也是为啥我们一开始建议你直接用观察和听这种方式来粗略的调整p值,然后你再在震荡的基础上降低到70%左右设置值,然后再看曲线来调整。

有种不理想的飞行状态叫bounce-back(反弹震荡),当你快速回中俯仰和横滚时,飞机并不会来一个非常“干净”的停止,也许以下因素是造成这种现象的原因:
1:D值太低
2:P值太高
3:一个非常低的P值(一个很低的P值也会造成飞机的慢慢的震动,因为你想停止的时候,飞机没法提供足够的掌控能力)

如果I值调的不好通常不会带来太大麻烦,所以如果你没有太多时间大致调整一下也是可以的。但是D值是一个很关键的影响因素,并且事实上,如果D值没有调好,那造成的影响非常非常的糟糕。如果噪声抑制不是太好并且P值配合也不好的话,会导致飞机飞的很奇怪,飞行的手感很差不听使唤。

如果你需要更多资讯,可以看看下面的资源
Joshua Bardwell's Practical PID Tuning (Betaflight / Cleanflight)
https://www.youtube.com/playlist?list=PLwoDb7WF6c8ldO8tz0IUi9FNcJdvE2Mh

参考 https://www.moz8.com/forum.php?mod=viewthread&tid=109506

四旋翼中的PID调节方法 | betaflight固件如何调节PID的更多相关文章

  1. 《前端之路》- TypeScript (四) class 中各类属性、方法,抽象类、多态

    目录 一.TypeScript 中的类 二.TypeScript 中类的继承 三.TypeScript 中公共,私有与受保护的修饰符 3-1.属性的 public 3-2.属性的 private 3- ...

  2. 子PID namespace中获取父namespace中pid的方法

    在那篇< 使用独立PID namespace防止误杀进程>中的最后,我碰到了一个难题,那就是父PID namespace中的进程无法使用进入子PID namespace中通过echo $$ ...

  3. 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘

    孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...

  4. Java中四种遍历Map对象的方法

    方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...

  5. MFC中窗口启动后,CEdit编辑框默认光标位置设置,顺序的调节方法

    MFC中窗口启动后,CEdit编辑框默认光标位设置,顺序的调节方法 在编辑界面按下ctrl+D键,就会出现所有控件的Tab键顺序,按照自己想要的顺序依次点击控件,就可以重新安排顺序.数值1就是默认停留 ...

  6. PID控制最通俗的解释与PID参数的整定方法

    转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...

  7. Django中redis的使用方法(包括安装、配置、启动)

    一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-3.2. ...

  8. jQuery中的事件绑定方法

    在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...

  9. inux中shell截取字符串方法总结

    shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

随机推荐

  1. GIL解释器锁 & 进程池与线程池

    今日内容 GIL 全局解释器锁(重要理论) 验证 GIL 的存在及功能 验证 python 多线程是否有用 死锁现象 进程池与线程池(使用频率高) IO模型 详细参考: https://www.bil ...

  2. suse 12 升级 OpenSSH-7.2p2 到 OpenSSH-8.4p1

    文章目录 1.查看当前当前环境信息 1.1.查看openssh当前版本 1.2.查看当前linux发行版 2.部署telnet-server 2.1.下载telnet-server 2.2.配置tel ...

  3. TCP三次握手原理

    本文主要讲述的是 1.TCP协议三次握手原理,以及为什么要三次握手,两次握手带来的不利后果. 2.TCP协议四次挥手原理,为什么要四次挥手. TCP协议三次握手原理: 首先,给张图片,建立TCP三次握 ...

  4. WPF 自定义文本框输入法 IME 跟随光标

    本文告诉大家在 WPF 写一个自定义的文本框,如何实现让输入法跟随光标 本文非小白向,本文适合想开发自定义的文本框,从底层开始开发的文本库的伙伴.在开始之前,期望了解了文本库开发的基础知识 本文实现的 ...

  5. .NET6: 开发基于WPF的摩登三维工业软件 (7)

    做为一个摩登的工业软件,提供可编程的脚本能力是必不可少的能力.脚本既可以方便用户进行二次开发,也对方便对程序进行自动化测试.本文将结合AnyCAD对Python脚本支持的能力和WPF快速开发带脚本编辑 ...

  6. python-利用random模块生成测试数据封装方法总结

    1.前言: 在测试中经常有需要用到参数化,我们可以用random模块,faker模块生成测试数据,也可以用到pymysql,此文主要针对random模块生成任意个数的随机整数,随机字符串,随机手机号, ...

  7. MySQL explain结果Extra中"Using Index"与"Using where; Using index"区别探究

    问题背景 最近用explain命令分析查询sql执行计划,时而能看到Extra中显示为"Using index"或者"Using where; Using Index&q ...

  8. BugKu-baby_flag.txt

    下载zip压缩包解压得到图片(你们不要再打啦!hhh)使用winhex或者010查看,最下面看到一串数字 怀疑可能是十六进制转换字符串,然后使用在线网站进行转换,得到一串base64编码, 再进行ba ...

  9. React 函数组件中对window添加事件监听resize导致回调不能获得Hooks最新状态的问题解决思路

    React 函数组件中对window添加事件监听resize导致回调不能获得Hooks最新状态的问题解决思路 这几天在忙着把自己做的项目中的类组件转化为功能相同的函数组件,首先先贴一份该组件类组件的关 ...

  10. 《Symfony 5全面开发》教程01、Symfony介绍

    大家好,我是伟伟权,你正在观看的是<Symfony5全面开发>视频教程. Symfony是一款优秀的PHP框架,我们到Symfony官网来查看一下Symfony的介绍.Symfony是一组 ...