四旋翼飞行器Quadrotor飞控之 PID调节(参考APM程序)

2023-05-16

做四轴也有一段时间了,最近一直在做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

电路很简单用洞洞板搭的简易测试电路。

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

下面进入正题。PID算法很大程度上参考了APM(国外成熟开源飞控项目,官网<a href="http://copter.ardupilot.com/" rel="nofollow" "="" target="_blank" class="gj_safe_a" style="word-wrap: break-word; color: rgb(49, 132, 219); cursor: url(http://bbs.loveuav.com/source/plugin/wz_shub/template/img/1_1.cur), url(http://bbs.loveuav.com/source/plugin/wz_shub/template/img/1_1.cur), auto;">点击打开链接)的控制算法。它是采用的角度P和角速度PID的双闭环PID算法。角度的误差被作为期望输入到角速度控制器中。双闭环PID相比传统的单环PID来说性能有了极大的提升,笔者也曾经调试过传统的PID控制算法,即便参数经过了精心调整和双环控制算法相比在控制效果上的差距依旧很大。无论是悬停的稳定性,打舵时的快速跟随性和回正时的快速性上都是后者的效果明显优于前者。

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


横滚(Roll)和俯仰(Pitch)的控制算法是一样的,控制参数也比较接近。首先得到轴姿态的角度差(angle error),将这个值乘以角度系数p后限幅(限幅必须有,否则剧烈打舵时容易引发震荡)作为角速度控制器期望值(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太大,在平衡位置容易震荡,打舵回中或给干扰(用手突加干扰)时会震荡。合适的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米的高度(高度太低会有地面效应干扰,太高不容易看清姿态且容易摔坏),避开人群的地方比较适合,如有意外情况,立刻关闭油门!!!

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

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

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

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

6、横滚和俯仰调好后就可以调整偏航的参数了。合适参数的判断标准和之前一样,打舵快速响应,舵量回中飞机立刻停止转动(参数D的作用)。

至此,双环PID参数调节完毕!祝爽飞!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • stm32 摄像头寻迹+平衡车

    链接 xff1a http download csdn net download u010925447 9866006
  • 【书籍推荐】自己动手写操作系统

    于渊 编著 尤晋元 审校 2005年8月出版 ISBN 7 121 01577 3 48 00元 xff08 含光盘1张 xff09 374页 用理论指导动手实践 xff0c 用实践深化理解理论 xff01 本书在详细分析操作系统原理的基础
  • 贝塔、伽马分布

    最近开始自学PRML xff0c 为此又补了概率论中的一些知识点 相较于古典概率通过各种估计手段来确定参数的分布 xff0c 贝叶斯学派则是使用后验概率来确定 xff0c 为了方便计算后验概率 xff0c 引入共轭先验分布来方便计算 xff
  • elementUI中el-dropdown的command如何传递多个参数

    el dropdown的command事件默认传递一个参数 xff0c 即每个下拉选项el dropdown item中设定的command的值 xff0c 那么如何传递多个参数呢 xff1f 实现方法 xff1a 动态设置el dropd
  • 记录ubuntu18.04下搭建nuttx RTOS的过程

    官方参考链接 xff1a https nuttx apache org docs latest quickstart install html Getting started 61 61 gt Installing 主要记录一下按照链接指导
  • 词袋

    brief描述子 一般Sb 61 48 Lb为256 brief描述子不具备旋转尺度不变性 词袋 提取大量图片的描述子 xff0c 将描述子用k means聚类成K堆 xff0c 这是第n层 xff0c 把每一堆再次聚类形成下一层 xff0
  • 板子和电脑配置ros通信

    它们需要连在同一个路由器上 1 获取板子和电脑的ip 比如板子名为RV1126 RV1109 xff0c ip为192 168 5 48 电脑名为qian hw xff0c ip为192 168 5 25 2 在电脑端设置 xff1a ba
  • 通过跟踪效果来看vins输出结果

    下面是vins跑出来的结果 xff0c vio输出是绿线轨迹 线速度是0 28m s xff0c 拐角的地方是我根据蓝线把vio轨迹掰正了 vio在初始阶段走的比较弯曲 xff0c 后有一段笔直的轨迹 xff0c 这里旋转非常慢 xff0c
  • vins-fusion 融合rtk原理

    vins fusion融合rtk原理 xff1a 使用优化的方式融合 xff0c 假设融合后的位姿是fusion T n vio输出的位姿是vio T n xff0c rtk输出的位姿是rtk T 只有最后一帧 那么 fusion T的初值
  • Docker 方式搭建 Prometheus + grafana

    prometheus 官方仓库 prometheus 官方文档 GETTING STARTED 参考 基于docker 搭建Prometheus 43 Grafana的过程详解 按照官方仓库文档中写的 Docker images Docke
  • 报错:The following signatures couldn‘t be verified because the public key is not available: NO_PUBKEY

    apt update 最后报错 sudo apt update 报错 91 packages can be upgraded Run 39 apt list upgradable 39 to see them W An error occu
  • ubuntu上 eclipse+arm-linux-gcc+jlink+s3c2440a开发环境搭建

    0 环境搭建概述 所需工具 xff1a xff08 1 xff09 Eclipse Eclipse的本身只是一个框架平台 xff0c 但是众多插件的支持 xff0c 使得Eclipse拥有较好的灵活性 xff08 2 xff09 CDT C
  • 在函数里修改全局变量

    names 61 39 Lilei 39 def change name global name 全局变量我来撑控 names 61 39 Hi 39 print names change name 39 Hi 39 print names
  • 守护进程详解及创建,daemon()使用

    转载于 xff1a http www cnblogs com mickole p 3188321 html 侵删 一 xff0c 守护进程概述 Linux Daemon xff08 守护进程 xff09 是运行在后台的一种特殊进程 它独立于
  • 在VsCode中如何使用Git

    大部分前端都是用VsCode作为代码编辑器 xff0c 那么我们如何在VsCode中使用Git呢 xff1f 准备工作 xff1a 1 在vscode中安装插件GitLens 使用教程 xff1a 1 点击文件 新建窗口 2 克隆git仓库
  • 关于C++继承类和对象

    继承是C 43 43 中一个很好的特性 xff0c 它能够从已有的类派生出新的类 xff0c 而继承类继承了原有类 xff08 称为基类 xff09 的特征 继承类有三种 xff0c 公有继承 保护继承 私有继承 使用公有继承 xff0c
  • 是程序员就去Leetcode刷题吧

    leetcode 是一个美国的在线编程网站 xff0c 上面主要收集了各大IT公司的笔试面试题 xff0c 对于应届毕业生找工作是一个不可多得的好帮手 这个网站的的好处在于它会告诉你测试数据以及你的输出和正确的输出是什么 xff0c 方便大
  • 四旋翼飞行器的控制规律及算法实现

    四旋翼飞行器的控制规律及算法实现 http bbs loveuav com forum php mod 61 viewthread amp tid 61 211 amp fromuid 61 19507 出处 爱无人机 专注无人机开发与设计
  • 基于数据融合和串级PID的小型四旋翼无人机高度测量与控制系统

    作者 xff1a Tomy 摘要 xff1a 简单介绍了一种基于 Mahony 算法无人机姿态解算算法 xff0c 并在这个的基础上设计了一 种融合惯导加速度计和气压计的小型无人机高度测量系统 xff0c 同时利用该高度测量系统设计了 基于
  • 四旋翼飞行器Quadrotor飞控之 PID调节(参考APM程序)

    做四轴也有一段时间了 xff0c 最近一直在做PID方面的工作 现在四轴基本可以实现室内比较稳定的飞行 xff0c 操控手感也可以接受 稍后上试飞视频 在此把一些PID方面的经验总结总结和大家分享一下 首先介绍一下大概的硬件组成 xff1a