四旋翼中的PID调节方法 | betaflight固件如何调节PID
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的更多相关文章
- 《前端之路》- TypeScript (四) class 中各类属性、方法,抽象类、多态
目录 一.TypeScript 中的类 二.TypeScript 中类的继承 三.TypeScript 中公共,私有与受保护的修饰符 3-1.属性的 public 3-2.属性的 private 3- ...
- 子PID namespace中获取父namespace中pid的方法
在那篇< 使用独立PID namespace防止误杀进程>中的最后,我碰到了一个难题,那就是父PID namespace中的进程无法使用进入子PID namespace中通过echo $$ ...
- 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘
孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...
- Java中四种遍历Map对象的方法
方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...
- MFC中窗口启动后,CEdit编辑框默认光标位置设置,顺序的调节方法
MFC中窗口启动后,CEdit编辑框默认光标位设置,顺序的调节方法 在编辑界面按下ctrl+D键,就会出现所有控件的Tab键顺序,按照自己想要的顺序依次点击控件,就可以重新安排顺序.数值1就是默认停留 ...
- PID控制最通俗的解释与PID参数的整定方法
转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...
- Django中redis的使用方法(包括安装、配置、启动)
一.安装redis: 1.下载: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压 tar -zxvf redis-3.2. ...
- jQuery中的事件绑定方法
在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...
- inux中shell截取字符串方法总结
shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...
随机推荐
- Solution -「NOI.AC 省选膜你赛」array
题目 题意简述 维护一个长度为 \(n\) 的序列 \(\{a_n\}\),并给出 \(q\) 个操作: 将下标为 \(x\) 的数修改为 \(y\). 给定 \(l,r,k\),求最大的 \(m ...
- seaborn学习笔记(四):箱型图、小提琴图
html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100% } body { ...
- python3发邮件脚本
官方文档中建议保存token,且token是每2小时更新一次. 所以token先保存在本地token.txt文件夹中,设定计划任务每1小时删除一下token.txt.虽然造成了浪费,对于发消息不多的人 ...
- python中特殊参数self的作用
特殊参数self的作用:self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行. self代表的是类的实例本身,方便数据的流转.对此,我们需要记住两点: 第一点: ...
- Vue 源码解读(7)—— Hook Event
前言 Hook Event(钩子事件)相信很多 Vue 开发者都没有使用过,甚至没听过,毕竟 Vue 官方文档中也没有提及. Vue 提供了一些生命周期钩子函数,供开发者在特定的逻辑点添加额外的处理逻 ...
- HttpClient的使用(get、post请求)
添加pom依赖 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <d ...
- 三大数据库 sequence 之华山论剑 (中篇)
sequence 用法四 AUTO INCREMENT 通过 DEFAULT 还是需要手动创建 sequence.有没有更简单的用法呢? 当然,就是通过 AUTO INCREMENT 方式,自动创建 ...
- 决策树CART回归树——算法实现
决策树模型 选择最好的特征和特征的值进行数据集划分 根据上面获得的结果创建决策树 根据测试数据进行剪枝(默认没有数据的树分支被剪掉) 对输入进行预测 模型树 import numpy as np de ...
- 解决gpg failed to sign the data fatal: failed to write commit object解决方案
今天有位新同事在comit代码的时候一直报这个错误: gpg failed to sign the data fatal: failed to write commit object. 看到网上说gp ...
- linux – 使用find -name命令的通配符和双引号
转至:https://www.icode9.com/content-3-209958.html 双引号(和单引号)是否抑制了通配符扩展?如果是这样,那么为什么以下呢? find -name " ...