四轴飞行器PID调试一周总结

Arduino  + XXD 电调 +1000KV电机、 使用PID来调节稳定性,今天上午终于调节 x,y轴稳定。 回想遇到的问题,真的是试出来的值。

PID算法很简单,写的话不需要10分钟就能写出来,不过要想找对P,I,D三个参数的值 运气好的话自不用说,运气不好调一个月都不一定能调稳。 使用MPU6050调试,在室内是一个轴一个轴地调试,就是架在凳子上,让一个轴能够自由旋转,类似下面这样

使用欧拉角来调节PID三个参数,一开始遇到一个这个问题,就是当我设定值为0度的时候也就是水平放置的时候表现的还算可以,一直小幅震荡,也没有太大发散的现象,可是当我设定值不是0度而是偏转一定角度的时候就表现的啥也不是。  导致这个问题的原因是: 我的油门太小了,。。 因为一开始调的时候扇叶转的很快,不敢将油门加大,只用了 1100的油门(满量程是1900,就是程序中的占空比),油门太小导致飞行器还没有摆脱重力的影响,所以根本都不可能调对。这是放不开的第一个地方。

接下来的时候我们就将基础油门加大了,至少可以摆脱重力的影响了,然后又是几天的P、I、D参数整定。

先调P,如果能摆到平衡位置而且还发散震荡 ,说明P调大了,缩小一些,缩小到能够小幅等幅震荡为止 , 这里给大家说个小技巧,就是先用手将轴转到大约设定的角度,看看轴是不是小幅等幅震荡,如果小幅震荡说明P调好了,反之,如果轴转的过猛,太大了,如果力度感觉不足,那就是太小了 。  这个时候我们肯定不能要求快速性和静态误差。

静态误差的消除,调I。  P调的可以了,就缓慢增加 I ,我们的I都是0.01的增加,具体的做法是I先加一个比较大的值,这个时候四轴反应跟吃x药一样剧烈,然后再缓慢缩小,直到四轴开始平静下来,关于平静下来我也没有一个标准,当然如果你降低的过程中能够快速摆到平衡位置而且还不震荡不超调那说明你走运了。不走运的做法是,I往下降的时候能够等幅震荡,即使这个等幅震荡的幅度还是很大只要能够等幅震荡就可以了,反正只要不发散就已经可以了,等不等幅都是主观感应,也不需要太准,毕竟人又不是仪器。

上面两个参数调好了已经很不容易了,然后开始调D (有的开源飞控都不需要D啊,但是对于我们粗略调试来说不用D上面两个值简直就是没法用)。 刚开始调D,惯例又是没放开,因为调P,调I的时候得出的经验是我能预计到正切值的范围肯定在这附近。但是D完全不是这一回事啊,我一次 +1 +5 +10 仍然有震荡,而且快速性根本不好地说,调平稳需要5~10s !!  直到我都怀疑程序写错算法不对了,然后又是查资料又是开别人的飞控。看了匿名飞控,蔡大代码的PID部分之后发现,那几行核心代码都大差不差啊,为什么就是不行呢! 直到今天早上吧,放开了又调了一次,D生生被我加到了200  -)_(-   ,稳了!  曲线大概是这个样子

上升时间不超过 0.5s 而且还能稳定在设定值那里,达到了网上成熟的飞控平稳效果。

PID算法本身而言很简单,背后的理论虽然都在课堂上交给老师了,但在用起来这么爽之后反而激发了自己的求知欲望。  PID核心算法摘自维基,如下伪代码

previous_error = 0
integral = 0
start:
   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 start

总结除了关键的地方就是被一些潜在的意识所束缚,调试飞行器的过程中理论分析也是必不可少。

时间: 2024-08-12 22:17:13

四轴飞行器PID调试一周总结的相关文章

四轴飞行器飞行原理与双闭环PID控制

四轴轴飞行器是微型飞行器的其中一种,相对于固定翼飞行器,它的方向控制灵活.抗干扰能力强.飞行稳定,能够携带一定的负载和有悬停功能,因此能够很好地进行空中拍摄.监视.侦查等功能,在军事和民用上具备广泛的运用前景. 四轴飞行器关键技术在于控制策略.由于智能控制算法在运行复杂的浮点型运算以及矩阵运算时,微处理器计算能力受限,难以达到飞行控制实时性的要求:而PID控制简单,易于实现,且技术成熟,因此目前主流的控制策略主要是围绕传统的PID控制展开. 1 四轴飞行器的结构与基本飞行原理 四轴飞行器结构主要

超酷MWC四轴飞行器DIY全套教程

本帖最后由 hitor 于 2013-8-17 22:06 编辑一.自己玩四轴的经历介绍.      各位模友大家好,我是哈工大航院的一名学生.我接触四轴的时间较早,由于我室友大二做科创就是做四轴的,那时候我们俩一人负责一个项目,他做四轴我做电动独轮车,我不太喜欢我的项目,烧了好多钱,最后也只能草草了事.我对四轴倒是很感兴趣,所以他一焊电路.写程序或是调试PID参数,我都像跟班似的死死的盯着他做的东西,有不懂的就向他请教,时间长了我也掌握了四轴的一些基本知识.几个月前我突发了做四轴的想法,但我不

四轴飞行器设计报告

单片机应用技术实训设计报告(四轴飞行器) 所属系部: 电气信息工程系 班 级: (2014)通信技术1班 姓 名: 彭世秋 指导老师: 施 芸 摘 要 为了满足四轴飞行器的设计要求,设计了以微控制器为核心的控制系统和算法.首先进行了各单元电路方案的比较论证,确定了硬件设计方案.四轴飞行器采用了固连在刚性十字架交叉结构上的4个无刷电机驱动的一种飞行器,以ARM公司的Context-M3 CPU內核为基础,围绕新的Context-M3 CPU內核演化而来的意法半导体公司的STM32F103高容量单片

四轴飞行器1.3 MPU6050(大端)和M4的FPU开启方法

 原创文章,欢迎转载,转载请注明出处      最近时间花在最多的地方就是STM32的I2C上了.之前就知道STM32的I2C并不好用,因为之前用过模拟的I2C,也写过AVR的I2C也就是TWI的硬件驱动,所以想试试写STM32的硬件I2C...为了避免库带来的麻烦,之前和特意将STM32F4的标准库升级到了1.3.0,但是貌似问题依旧.于是在网上找到了ST转为I2C写的CPAL的库,拿着它的英文手册和例子看了下,觉得很不错,功能相当的齐全,按照手册配置用起来应该不错,于是开始加载到自己的项目中

四轴飞行器1.4 姿态解算和Matlab实时姿态显示

原创文章,欢迎转载,转载请注明出处 MPU6050数据读取出来后,经过一个星期的努力,姿态解算和在matlab上的实时显示姿态终于完成了. 1:完成matlab的串口,并且实时通过波形显示数据 2:添加RTT查看CPU使用率的扩展功能,MPU6050读取数据的优化 3:四元素表示的坐标变化,四元素与欧拉角的关系和Madgwick的IMUupdate算法 4:飞控数据采集线程和数据处理线程的安排,类似于生产者与消费者的关系. 先放个效果视频... 如果看不了视频,请打开视屏网址:http://v.

教你从零开始制作四轴飞行器

航模非玩具,请遵守法律法规及论坛四句箴言!安全飞行! *阅读不同的教程帖有助于更快地入门 *玩模型需要一颗淡定的心,请做好逐字逐句阅读数百页说明书甚至自学外语的准备,如果不能静下心来阅读.琢磨.研究,那么模型这个爱好不适合你 发帖不易,顶贴容易,且看且珍惜 8.17更新:3楼,什么是进角? 1.  如果你想享受飞行的乐趣,不想被装机,修机折磨,并且又有一定的经济条件的话,那么大疆精灵是你不二的选择.如果你想体验飞行和动手的双重乐趣,或者RMB是个问题,那么自己动手吧! 2.  善用论坛搜索功能事

四轴飞行器1.2.2 RT-Thread 串口

本来是打算说根据RT-Thread的设备管理提供的驱动接口些串口驱动的,但是仔细一看,我去,串口驱动写好了,只需要调用就可以了.下面我们说说具体怎么使用的.      首先在rt_hw_board_init()函数里面有个rt_hw_usart_init(),这个就是串口初始化的函数了,而且RTT已经写好了三个串口的初始化,只需要修改下宏定义就可以使用,RTT实在用心良苦啊,这都帮我们写好了.      个人的一点看法,可能不是很全面,能力有限.其实我对函数rt_hw_usart_init()的

玩转四轴飞行器清华大学出版社

玩转四轴飞行器清华大学出版社 本书内容及体系结构: 第1章 什么是飞行器 本章主要介绍了飞行器的种类,同时介绍了四轴飞行器的飞行原理和组成部分.通过学习本章内容,读者可以了解飞行器的种类,了解四轴飞行器的组成部分. 第2章 四轴飞行器的材料准备 本章按照四轴飞行器的不同部件进行分类,并在不同的分类中讲解了其中部件的种类,然后告诉读者如何选择自己需要的四轴飞行器.通过学习本章内容,读者可以了解四轴飞行器各部分的器材及如何选择. 第3章 硬件的组装 本章主要介绍如何组装F450类的四轴飞行器.通过学

MWC四轴飞行器代码解读

MWC v2.2 代码解读annexCode() 红色是一些暂时没去顾及的部分,与我现在关心的地方并无太大关系. 函数对rcDate进行处理(去除死区,根据油门曲线,roll/pitch曲线,油门值,动态PID调整参数,在无头模式对于rcdata进行优化),生成rccommand值用于姿态控制.记录最大循环时间,最小循环时间,解锁时间,最大气压值.用LED表示一些传感器运行的状态.若定义了低压报警则进行电压测量. rccommand[油门]在0-1000之间  rccommand[roll/pi