四旋翼飞行器Quadrotor飞控之 PID调节(參考APM程序)-程序员宅基地

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

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

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

MCUFreescale MK60D

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

433MHz传输数据模块

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

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

机架:普通红白f450机架

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

电调:天行者40A

桨:仿APC1047

电池:DUPU 2200mah 25c

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

 

软件方面最基本的是姿态解算,终于用的是MPU6050DMPDigital 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_errori值异号时将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加上PP太小。不能修正角速度误差表现为非常“软”倾斜后难以修正。打舵响应也差。

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

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

2.3加上DD的效果十分明显,加快打舵响应,最大的作用是能非常好地抑制舵量回中后的震荡。可谓立竿见影。太大的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參数调节完成!祝爽飞!

 


转载于:https://www.cnblogs.com/clnchanpin/p/6939455.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34375054/article/details/94626749

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法