做四轴也有一段时间了。近期一直在做PID方面的工作。

如今四轴基本能够实现室内比較稳定的飞行,操控手感也能够接受。稍后上试飞视频。在此把一些PID方面的经验总结总结和大家分享一下。

首先介绍一下大概的硬件组成:

MCU:Freescale MK60D

传感器(IMU):GY-86模块(MPU6050 + HMC5883L + MS5611)

433MHz传输数据模块

DC-DC可调式开关稳压模块

遥控设备:JR XG7发射机 + JR 611B接收机

机架:普通红白f450机架

电机:朗宇2212kv880高效能电机(黑色)

电调:天行者40A

桨:仿APC1047

电池:DUPU 2200mah 25c

电路非常easy用洞洞板搭的简易測试电路。

软件方面最基本的是姿态解算,终于用的是MPU6050的DMP(Digital Motion Process)输出,遥控器控制的目标姿态也是四元数表示的。为了有较好的线性度,将两者的姿态差转换为欧拉角后再进行PID的控制。

以下进入正题。

PID算法非常大程度上參考了APM(国外成熟开源飞控项目。官网点击打开链接)的控制算法。它是採用的角度P和角速度PID的双闭环PID算法。角度的误差被作为期望输入到角速度控制器中。

双闭环PID相比传统的单环PID来说性能有了极大的提升,笔者也以前调试过传统的PID控制算法,即便參数经过了精心调整和双环控制算法相比在控制效果上的差距依然非常大。

不管是悬停的稳定性,打舵时的高速尾随性和回正时的高速性上都是后者的效果明显优于前者。

大概介绍一下APM算法的大概流程。这个PID控制流程图能够在APM官网找到。笔者參考的是APM3.1.0的代码和图上2.9版本号的有一点点出入,不影响大局(控制频率100hz)。

横滚(Roll)和俯仰(Pitch)的控制算法是一样的,控制參数也比較接近。首先得到轴姿态的角度差(angle error)。将这个值乘以角度系数p后限幅(限幅必须有。否则剧烈打舵时easy引发震荡)作为角速度控制器期望值(target_rate)。target_rate与陀螺仪得到的当前角速度作差,得到角速度误差(rate_error)乘以kp得到P。在I值小于限幅值(这个值大概在5%油门)或者rate_error与i值异号时将rate_error累加到I中。前后两次rate_error的差作为D项。值得注意的是加须要入20hz(也能够採用其他合适频率)滤波,以避免震荡。

将P,I,D三者相加并限幅(50%油门)得到终于PID输出。

偏航(Yaw)的控制算法和前两者略有不同。是将打舵量和角度误差的和作为角速度内环的期望值,这样能够获得更好的动态响应。

角速度内环和横滚与俯仰的控制方法一致,參数(积分限幅值会非常小,默认仅仅有万分之8)上有不同。

把APM的算法移植过来。限幅值也移过来之后就能够进行PID參数调整了。

一般先进行横滚或俯仰方向的调整。

把四轴固定起来。仅仅留一个待调整方向的旋转自由度(简直就是旋转“烤四轴”有木有)。笔者稍后奉上调试时使用的装置。强烈建议调试时带上厚的防护手套,不然的话我的手早就被被打烂了。调个飞机还负伤就不值得了。

左右两个直线轴承,用几颗自攻螺丝拧在桌子上(可怜的桌子),插上铝合金管(外径12mm。壁厚2mm,注意要调整两个直线轴承的位置使它们同轴),两头用角铁限位也是拧在桌子上。把四轴用胶带+扎带绑在上面就可以開始“烤四轴”。

大概过程(注意修正反向):

1、预计大概的起飞油门。

2、调整角速度内环參数。

3、将角度外环加上,调整外环參数。

4、横滚俯仰參数一般可取一致,将飞机解绑,抓在手中測试两个轴混合控制的效果(注意安全)。有问题回到“烤四轴”继续调整,直至飞机在手中不会抽搐。

5、大概设置偏航參数(不追求动态响应,起飞后头不偏就可以),起飞后再观察横滚和俯仰轴向打舵的反应,如有问题回到“烤四轴”。

6、横滚和俯仰ok以后。再调整偏航轴參数以达到好的动态效果。

过程具体解释:

1、要在飞机的起飞油门基础上进行PID參数的调整。否则“烤四轴”的时候调试稳定了,飞起来非常可能又会晃荡。

2、内环的參数最为关键!

理想的内环參数可以非常好地尾随打舵(角速度控制模式下的打舵)控制量。

在平衡位置附近(正负30度左右),舵量突加,飞机高速响应;舵量     回中,飞机立马停止运动(差点儿没有回弹和震荡)。

2.1首先改变程序,将角度外环去掉。将打舵量作为内环的期望(角速度模式,在APM中叫ACRO模式。在大疆中叫手动模式)。

2.2加上P。P太小。不能修正角速度误差表现为非常“软”倾斜后难以修正。打舵响应也差。

P太大,在平衡位置easy震荡,打舵回中或给干扰(用手突加干扰)时会震荡。

合适的P能较好的对打舵进行响应。又不太会震荡。可是舵量回中后会回弹好几下才干停止(没有D)。

2.3加上D,D的效果十分明显,加快打舵响应,最大的作用是能非常好地抑制舵量回中后的震荡。可谓立竿见影。太大的D会在横滚俯仰混控时表现出来(虽然在“烤四轴”时的表现可能非常好),详细表现是四轴抓在手里推油门会抽搐。假设这样。仅仅能回到“烤四轴”减少D。同一时候P也仅仅能跟着减少。D调整完后可以再次加大P值,以可以尾随打舵为推断标准。

2.4加上I,会发现手感变得柔和了些。因为笔者“烤四轴”的装置中四轴的重心高于旋转轴,这决定了在四轴偏离水平位置后会有重力分量使得四轴会继续偏离平衡位置。

I的作用就能够使得在一定角度范围内(30度左右)能够修正重力带来的影响。表现打舵使得飞机偏离平衡位置,舵量回中后飞机立马停止转动,若没有I或太小,飞机会因为重力继续转动。

3、角度外环仅仅有一个參数P。将外环加上(在APM中叫Stabilize模式,在大疆中叫姿态模式)。

打舵会相应到期望的角度。

P的參数比較简单。太小,打舵不灵敏。太大,打舵回中易震荡。以合适的打舵反应速度为准。

4、至此,“烤四轴”效果应该会非常好了,可是两个轴混控的效果怎样还不一定。有可能会抽(两个轴的控制量叠加起来,特别是较大的D,会引起抽搐)。假设抽了。减少PD的值。I基本不用变。

5、加上偏航的修正參数后(直接给双环參数,角度外环P和横滚差点儿相同,内环P比横滚大些。I和横滚差点儿相同,D能够先不加)。拿在手上试过修正和打舵方向正确后能够试飞了(试飞非常危急。!

。!选择在宽敞、无风的室内,1米的高度(高度太低会有地面效应干扰,太高不easy看清姿态且easy摔坏),避开人群的地方比較适合,如有意外情况,立马关闭油门。!。

5.1试飞时主要观察这么几个方面的情况,一般经过调整的參数在平衡位置不会大幅度震荡,须要观察:

5.1.1在平衡位置有没有小幅度震荡(可能是因为机架震动太大导致姿态解算错误造成。也可能是角速度内环D的波动过大,前者能够加强减震措施。传感器下贴上3M胶,必要时在两层3M泡沫胶中夹上“减震板”,注意:铁磁性的减震板会干扰磁力计读数;后者能够尝试减少D项滤波的截止频率)。

5.1.2观察打舵响应的速度和舵量回中后飞机的回复速度。

5.1.3各个方向(记得測试右前。左后等方向)大舵量突加输入并回中时是否会引起震荡。如有。尝试减小内环PD也可能是因为“右前”等混控方向上的舵量太大造成。

6、横滚和俯仰调好后就能够调整偏航的參数了。合适參数的推断标准和之前一样。打舵高速响应。舵量回中飞机立马停止转动(參数D的作用)。

至此。双环PID參数调节完成!祝爽飞!

四旋翼飞行器Quadrotor飞控之 PID调节(參考APM程序)的更多相关文章

  1. 四轴飞行器1.5 各种PID对比分析及选择

    原创文章,欢迎转载,转载请注明出处 这篇文章主要介绍我对PID的理解,以及选择PID算法的过程. 一 PID的理解和学习过程 二 飞控的PID效果 先上个飞控PID的响应的视频:介绍在后面 地址:ht ...

  2. 用一颗学美术的心来理解PID调节

    用一颗学美术的心来理解PID调节 泡利 3 个月前 相信大家小时候都画过美术作品吧?(什么?你还是宝宝?)没关系,不管你是文科.理科.工科.艺术还是家里蹲的,这篇文章对你来说一定会简单到爆炸的. 这种 ...

  3. Atitit. 解决80端口 System 占用pid 4,,找到拉个程序或者服务占用http 80服务

    Atitit. 解决80端口  System 占用pid 4,,找到拉个程序或者服务占用http服务 这个是http.sys系统服务占用了... net stop http ,三,没法儿终止 1. 寻 ...

  4. 四旋翼中的PID调节方法 | betaflight固件如何调节PID

    roll横滚,pitch俯仰,yaw航向 一.PID的作用概述 1.P产生响应速度和力度,是I和D的基础 过小响应慢(虽然无震荡) 过大会产生振荡且不断发散 2.D抑制过冲和振荡,抵抗外界的突发干扰, ...

  5. 四旋翼基础算法学习2-IMU输入滤波算法

    前言: 处理器读取陀螺仪加速度计数据后首先需要对数据进行滤波处理,此文分析比较几种常用的滤波算法. 参考学习:四轴加速度计滤波 IMU: IMU使用MPU9250(即MPU6500),设置加速度量程± ...

  6. 14-ESP8266 SDK开发基础入门篇--上位机串口控制 Wi-Fi输出PWM的占空比,调节LED亮度,8266程序编写

    https://www.cnblogs.com/yangfengwu/p/11102026.html 首先规定下协议  ,CRC16就不加了哈,最后我会附上CRC16的计算程序,大家有兴趣自己加上 上 ...

  7. C语言程序设计·谭浩强(第四版)第二章课后习题的答案,算法——程序的灵魂

    C语言程序小练习 1.用C语言设计程序算出1-1/2+1/3-14+1/5...+1/99-1/100的值 #include<stdio.h> int main() { ; double ...

  8. 人工智能与智能系统3-> 机器人学3 | 移动机器人平台

    机器人学的基本工具已经了解完毕,现在开始了解移动机器人,这部分包括机器人平台.导航.定位. 所谓机器人平台就是指机器人的物理结构及其驱动方式.本文将学习两种典型移动机器人平台(四旋翼和轮式车)的运动与 ...

  9. 机器人学 —— 飞行机器人(Introduction)

    UPNN课程 aerial robotics 教授: VJ  Kummer 1.四旋翼飞行器的控制对象是各个旋翼对应的电机 2.飞行器的能源主要消耗于hovering. 3.飞行器在设计时需要考虑各个 ...

随机推荐

  1. Java Pattern Matcher 正则表达式需要转义的字符

    见:http://blog.csdn.net/bbirdsky/article/details/45368709 /** * 转义正则特殊字符 ($()*+.[]?\^{},|) * * @param ...

  2. hdu 1754 I Hate It 线段树 点改动

    // hdu 1754 I Hate It 线段树 点改动 // // 不多说,裸的点改动 // // 继续练 #include <algorithm> #include <bits ...

  3. VC6 编译和使用 STLPort

    1.下载 STLport:   http://www.stlport.org/   http://downloads.sourceforge.net/project/stlport/STLport/S ...

  4. jQuery Video Extend

    HTML5视频扩展插件 能够加入Logo 加入标记 用法: 下载:jquery-video-extend <script src="js/jquery-2.1.4.min.js&quo ...

  5. Geeks - Range Minimum Query RMQ范围最小值查询

    使用线段树预处理.能够使得查询RMQ时间效率在O(lgn). 线段树是记录某范围内的最小值. 标准的线段树应用. Geeks上仅仅有两道线段树的题目了.并且没有讲到pushUp和pushDown操作. ...

  6. 最长公共子序列(Swift版本)

    class Mark {     var count: Int     var type: Int         init(count: Int, type: Int) {         self ...

  7. tensorflow利用预训练模型进行目标检测(一):安装tensorflow detection api

    一.tensorflow安装 首先系统中已经安装了两个版本的tensorflow,一个是通过keras安装的, 一个是按照官网教程https://www.tensorflow.org/install/ ...

  8. [SCOI 2009] 生日快乐

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1024 [算法] 直接DFS,即可 [代码] #include<bits/std ...

  9. QT-helloworld-Qt设计师编写

    前言:Qt设计师界面类就是C++类和ui文件的结合,它将这两个文件一起生成了,而不用再逐一添加. 目标:在对话框中显示出“helloworld”字样. 一.新建项目 1.1 选择项目模板 文件→新建文 ...

  10. css元素垂直居中方法

    1.Line-height 适用情景:单行文字垂直居中技巧 这个方式应该是最多人知道的了,常见于单行文字的应用,像是按钮这一类对象,或者是下拉框.导航此类元素最常见到的方式了.此方式的原理是在于将单行 ...