【飞控理论】四旋翼飞行器控制原理

2023-05-16

该篇博客是对锡月科技无人机飞行控制原理教学内容的整理

1、四旋翼飞行器的两种结构:

  •  “×”字模式: Pitch和 Roll与1,3、2,4两组电机呈 45°夹角 。
  • “十”字模式: Pitch对应2,4电机的对轴,Roll对应1,3电机的对轴,夹角为0。

(基本选用X模式)

2、四旋翼飞行器的几种姿态

导言:

思考一下:

1. 四个电机转速完全相同,无人机能平衡嘛?

答:四旋翼重心不一定在中心上,所以无法平衡。

2. 达到平衡状态后不改变四个电机的转速,无人机能一直平衡下去嘛?

答:因为有外界的干扰,四旋翼四个旋翼的转速要一直处于调节状

态才能保持平衡。

六种飞行姿态:

1、垂直运动

在四旋翼完成4轴平衡的条件下,同时增加四个电机的输出功率,旋翼转速增加使得总的拉力增大,当总拉力足以克服四旋翼无人机受到的重力时,四旋翼飞行器便离地垂直上升;反之,同时减小四个电机的输出功率,四旋翼飞行器则垂直下降,直至平衡落地,实现了沿 z轴的垂直运动。当外界扰动量为零时,在旋翼产生的升力等于飞行器的自身的重力时,飞行器便保持悬停状态。

2、俯仰运动

在四旋翼完成4轴平衡的条件下在图中,电机1、4的转速上升,电机2、3的转速下降(改变量大小应相等,在PID程序的实现中也有体现)。由于旋翼1、4的转速即升力上升,旋翼 2、3的转速即升力下降,产生的不平衡力矩使机身绕Roll轴旋转,同理,当电机1、4的转速下降,电机 2、3的转速上升,机身便绕Roll轴向另一个方向运动,实现飞行器的俯仰运动。

3、翻滚运动

在图中,在四旋翼完成4轴平衡的条件下,提高3、4号电机的转速,减慢1、2号电机的转速,则可使机身绕Pitch轴的正向或者反向进行运动实现飞行器的翻滚运动

4、航向运动

在图中,当电机1和电机3的转速上升,电机2和电机4的转速下降时,旋翼1和旋翼3对机身的反扭矩大于旋翼2和旋翼4对机身的反扭矩,机身便在富余反扭矩的作用下绕z轴转动,实现飞行器的航向运动,转向与电机1、电机3的转向相反。

5、前后运动

如果想要实现四旋翼无人机在水平面内前后、左右的运动,必须在水平面内对飞行器施加一定的力。在图中,增加1、4号电机转速,使拉力增大,相应减小2、3号电机转速,使拉力减小,同时反扭矩仍然要保持平衡。按俯仰理论,飞行器首先发生一定程度的倾斜,从而使旋翼拉力产生水平分量,因此可以实现无人机的前飞运动。向后飞行与向前飞行正好相反。

6、侧向运动

与前后运动对称,与翻滚运动同轴。

无人机姿态计算公式:

3、四旋翼的自动控制参数

油门基础量  

油门基础量的选择:

1. 大约占电机最高转速的70%左右。

2. 能够提供给四旋翼一个起飞的油门,注意并不是靠地效的反作用力是四旋翼

脱离地面的量。

油门基础量与控制量的占比:

油门基础量占比为80%左右或以上,控制量只是根据外界干扰和重心偏移

所修正的一个油门转速,所以只需要较小的控制量就能使四旋翼保持平衡。

为什么油门基础量这么大:

如果油门基础量较小,控制量较大,会发生什么情况?

答: 一旦控制飞行时,调节平衡能力就较差,且受到外界干扰后,控制量较大,

四旋翼处于较不稳定状态。

PID控制器

关于PID的详细原理戳上面的链接

PID控制器(比例-积分-微分控制器),由比例单元(P)、积分单元(I)和微分单元(D)组成。透过KpKiKd三个参数的设定。PID

控制器主要适用于基本上线性,且动态特性不随时间变化的系统。

参数及其影响范围:

1、稳定性(P和I降低系统稳定性,D提高系统稳定性)

在平衡状态下,系统受到某个干扰后,经过一段时间其被控量可

以达到某一稳定状态;

2、准确性(P和I提高稳态精度,D无作用)

系统处于稳态时,其稳态误差;

3、快速性(PD提高响应速度,I降低响应速度):系统对动态响

应的要求。一般由过渡时间的长短来衡量。

PID调参方法:

对液压泵转速进行控制还要:
1、变频器-作为电机驱动(对应主控和电调);2、差动变压器-作为输出反馈(对应无人机姿态监视)。
PID怎么对误差控制,听我细细道来:
所谓“误差”就是命令与输出的差值。比如你希望控制液压泵转速为1500转(“命令电压”=6V),而事实上控制液压泵转速只有1000转(“输出电压”=4V),则误差: e=500转(对应电压2V)。如果泵实际转速为2000转,则误差e=-500转(注意正负号)。
该误差值送到PID控制器,作为PID控制器的输入。PID控制器的输出为:误差乘比例系数Kp+Ki*误差积分+Kd*误差微分。
Kp*e + Ki*∫edt + Kd*(de/dt) (式中的t为时间,即对时间积分、微分)
上式为三项求和(希望你能看懂),PID结果后送入电机变频器或驱动器。
从上式看出,如果没有误差,即e=0,则Kp*e=0;Kd*(de/dt)=0;而Ki*∫edt 不一定为0。三项之和不一定为0。
总之,如果“误差”存在,PID就会对变频器作调整,直到误差=0。
评价一个控制系统是否优越,有三个指标:快、稳、准。
所谓快,就是要使压力能快速地达到“命令值”(不知道你的系统要求多少时间)
所谓稳,就是要压力稳定不波动或波动量小(不知道你的系统允许多大波动)
所谓准,就是要求“命令值”与“输出值”之间的误差e小(不知道你的系统允许多大误差)
对于你的系统来说,要求“快”的话,可以增大Kp、Ki值
要求“准”的话,可以增大Ki值
要求“稳”的话,可以增大Kd值,可以减少压力波动
仔细分析可以得知:这三个指标是相互矛盾的。
如果太“快”,可能导致不“稳”;
如果太“稳”,可能导致不“快”;
只要系统稳定且存在积分Ki,该系统在静态是没有误差的(会存在动态误差);
所谓动态误差,指当“命令值”不为恒值时,“输出值”跟不上“命令值”而存在的误差。不管是谁设计的、再好的系统都存在动态误差,动态误差体现的是系统的跟踪特性,比如说,有的音响功放对高频声音不敏感,就说明功放跟踪性能不好。
调整PID参数有两种方法:1、仿真法;2、“试凑法”
仿真法我想你是不会的,介绍一下“试凑法”
“试凑法”设置PID参数的建议步骤:
1、把Ki与Kd设为0,不要积分与微分;
2、把Kp值从0开始慢慢增大,观察压力的反应速度是否在你的要求内;
3、当压力的反应速度达到你的要求,停止增大Kp值;
4、在该Kp值的基础上减少10%;
5、把Ki值从0开始慢慢增大;
6、当压力开始波动(可能产生溢出效果),停止增大Ki值;
7、在该Ki值的基础上减少10%;
8、把Kd值从0开始慢慢增大,观察压力的反应速度是否在你的要求内 

PID公式及参数解析: 

?(k)是指设定值和当前值的误差,??为控制周期,??为比例系数,??为积 分系数,??为微分系数,?(0)为电机调速的基础量。

 

 

PID编程方法:

当前角度误差 = 期望角度 实际角度 ;

PID_P= Kp * 当前角度误差 ;

PID_I+= Ki * 当前角度误差 ;

PID_I项 进行积分限幅 ;

//积分限幅是指对积分次数进行限制防止积分值太大从而导致出错

//当前角度的微分(原理上为当前角度误差 上一次角度

//误差,换一个角度来讲角度的微分就是角速度,所以一

//般用陀螺仪的角速度数据来替代角度的微分)

PID_D= Kd * 当前角速度的微分(陀螺仪数据) ;

单环PID总输出 = PID_P+ PID_I+ PID_D;

单环PID总输出限幅 ;

 

飞行器姿态控制要点

飞行器姿态调控使用了两重(角速度和角度作为被调控量)PID调控

 

  • 增加了控制变量,增加抗干扰性
  • 内环粗调,外环细调
  • 内环起到超前调节的总用,增加鲁棒性
  • 提高了系统工作频率,减小震荡周期,调节时间缩短,系统的快速性增强串级PID

串级PID编程:

当前角度误差 = 期望角度 实际角度 ;

外环PID_P= Kp * 当前角度误差 ;

外环PID_I+= Ki * 当前角度误差 ;

外环PID_I项 进行积分限幅 ;

外环PID_D= Kd * (本次角度误差 上次角度误差)/ 控制周期 ;

外环PID总输出 = 外环PID_P+ 外环PID_I+ 外环PID_D;

外环PID总输出限幅 ;当前角速度误差 = 外环PID总输出 当前角速度 ;(期望角速度为0;

内环PID_P= Kp * 当前角速度误差 ;

内环PID_I+= Ki * 当前角速度误差;

内环PID_I项 进行积分限幅 ;

内环PID_D= Kd * (本次角速度误差 上次角速度误差)/ 控制周期 ;

内环PID总输出 = 内环PID_P+ 内环PID_I+ 内环PID_D;

内环PID总输出限幅 ;

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

【飞控理论】四旋翼飞行器控制原理 的相关文章

  • C++开发精髓 阅读笔记

    第三章 pstack的使用 将C 43 43 类对象实例指针作为线程函数的参数 bind函数 span class token keyword auto span newCallable span class token operator
  • js逆向工具-油猴Tampermonkey脚本hook案例

    目录 一 油猴下载与安装二 油猴脚本免费使用网站三 油猴脚本编写介绍1 添加新脚本2 油猴脚本注释内容解释3 编写油猴脚本的基本步骤4 油猴脚本调试测试 四 hook之js逆向案例1 hook之window属性案例2 hook之cookie
  • js逆向案例-rus4逻辑学习

    目录 一 RS4特点二 网站请求流程特点三 网站加载js的顺序四 正式逻辑的研究1 cookie如何定位 xff1f 2 扣函数缺啥补啥注意事项 xff1f 3 如何获取 96 ts动态变量 96 值 xff1f 4 如何定位 96 MmE
  • js逆向案例-初学signature

    一 反爬点 案例网址 xff0c 向下滚动加载页面时的请求参数反爬signature xff0c 明显的特征 xff1a acrawler js以及window jsvmprt 34 二 反爬分析 参考文章1 xff0c 参考文章2 xff
  • Android逆向基础入门

    目录 一 基础App数据抓取1 App常用抓包工具2 fiddler抓包工具3 mitmdump抓包工具4 charles抓包工具5 uiautomatorviewer appium自动化工具6 Airtest自动化工具 二 js逆向与ap
  • 自动化测试工具-Airtest

    目录 一 Airtest介绍与安装二 Airtest基于图像识别自动控制手机App流程三 Airtest基于Poco的UI组件自动化控制App流程四 Airtest实现手机群控操作 一 Airtest介绍与安装 主要介绍区别 xff0c 以
  • Docker桌面版安装与使用(windows)

    目录 一 Docker概念二 下载安装三 docker镜像安装与操作四 制作自己的python镜像容器五 目录挂载六 多容器通信七 Docker Compose管理多个容器运行八 发布和部署九 备份数据迁移 一 Docker概念 1 Doc
  • Gradio 机器学习和数据科学开源 Python 库

    Gradio是一个开源的 Python 库 xff0c MIT的开源项目 xff0c 用于构建机器学习和数据科学演示和 Web 应用 Gradio的定位类似于Streamlit xff0c 但是更轻量 xff0c 因为它推荐的应用场景都是对
  • k8s安装

    目录 一 K8s概念二 minikube安装三 部署应用到集群中四 Service五 k8s部署爬虫1 意义 一 K8s概念 参考文章 xff0c 参考视频它是一个为 容器化 应用提供集群部署和管理的开源工具 xff0c 由 Google
  • 编程工具-GPT来AI编程代码

    一 安装介绍 1 https www cursor so 下载安装 xff0c 重要的说三遍 xff08 目前免费 xff01 免费 xff01 免费 xff01 xff09 xff0c 支持多平台 Mac Windows Linux xf
  • 某wipo专利_六宫格/cookie/css

    这里写目录标题 一 案例分析二 六宫格验证码三 列表页搜索式302四 详情页css链接cookie刷新 一 案例分析 案例网址 xff1a 案例网址 反爬点 xff1a 六宫格验证码 cookie反爬 时间强制等待 session数据强绑定
  • Python之urlencode()使用

    urlencode 传入参数类型 xff1a 字典功能 xff1a 将存入的字典参数编码为URL查询字符串 xff0c 即转换成以key1 61 value1 amp key2 61 value2的形式导入 xff1a from urlli
  • Python之Md5使用等加密

    目录 一 Python之md5使用二 Python之sha1使用三 Python之base64使用四 Python之rsa使用五 Python之aes des 一 Python之md5使用 功能 xff1a MD5签名是一个哈希函数 xff
  • Python之quote()使用

    quote 传入参数类型 xff1a 字符串功能 xff1a 将单个字符串编码转化为 xx 的形式导入 xff1a from urllib parse import quotePs xff1a url多个字符串编码用urlenocde 函数
  • ( 数组和矩阵) 645. 错误的集合 ——【Leetcode每日一题】

    645 错误的集合 难度 xff1a 简单 集合 s 包含从 1 到 n 的整数 不幸的是 xff0c 因为数据错误 xff0c 导致集合里面某一个数字复制了成了集合里面的另外一个数字的值 xff0c 导致集合 丢失了一个数字 并且 有一个
  • Kalman滤波(Part-1:信号模型基础)

    Kalman Filters Dynamical Signal Models 一阶高斯 马尔可夫过程 first order Gauss Markov process 描述采样点之间 xff08 相邻 xff09 的相关性 xff1a s
  • 【STM32】关于keil5中下载按钮灰色及出现#error “Please select first the target STM32F4xx devic....错误的解决方法

    解决首次运行报错问题 近期在网上购买了一个WIFI模组 xff0c 例程是使用HAL库编写的 xff0c 首次编译的时候出现USER stm32f4xx h 193 error 35 error directive 34 Please se
  • 【STM32】F429单片机的时钟系统浅析

    先把429的时钟树附上 xff1a 乍一看是不是很懵逼 xff0c 我也很懵逼 一堆乱七八糟的玩意 xff0c ST公司是真的狗 本文是基于库函数SetSysClock 展开的 xff0c 配合该函数使用时钟树效果更佳O O 讲解之间说一个
  • x-easypdf 基于pdfbox/fop 封装的框架

    x easypdf 是一个基于 pdfbox fop 二次封装的框架 xff0c 目前拥有两大模块 xff1a pdfbox 模块 与 fop 模块 pdfbox 模块 主打 pdf 编辑功能 xff0c 以组件化的形式进行 pdf 的构建
  • 【STM32】利用定时器实现最基本的定时功能(HAL)

    定时器简介 STM32F429单片机有许多定时器Timer xff0c 主要分成三类 xff0c 基本定时器 xff1b 通用定时器和高级定时器 三种类型的定时器功能由少变多 xff0c 高级定时器包含了低级定时器的功能 基本定时器 xff

随机推荐

  • 【STM32】通俗易懂的讲解回调函数

    转载 xff1a https blog csdn net vincent040 article details 50832955 回调函数在程序开发中是一个非常重要的概念 xff0c 所谓的回调其实就是不同程序模块之间的接口和约定 xff0
  • 【树莓派】设置树莓派开机自动运行python脚本

    近期因科研需要 xff0c 需命令树莓派开机后无需进行任何操作自动运行一个python脚本 xff0c 经查阅部分资料后实现了该功能 xff0c 为方便以后查看特此记录一下 1 打开cmd xff0c 输入 sudo vim span cl
  • 部分机器人领域顶会顶刊官网及22年顶会召开时间

    顶刊 Science Robotics AAAS The International Journal of Robotics Research IJRR Journal of Forestry Research JFR IEEE Trans
  • 服务器非root下安装Python cyglfw3库

    服务器非root下安装Python cyglfw3库 在服务器中跑PVNet的代码时遇到的 xff0c 废了比较大的劲才解决 xff0c 特意记录一下解决过程 如果你有sudo权限直接使用sudo apt get install libgl
  • FFB6D搭建环境

    文章目录 FFB6D搭建环境搭建前的准备 根据需要选择性浏览 安装apex安装normal speed安装opencv3 安装pybind11安装normal speed 安装RandLA运行代码前的准备运行代码有疑问多多交流 xff0c
  • win32Day06:控件

    1 什么是控件 xff1f 控件是具备特殊功能的窗口 xff0c 并且有模板 控件的特性 xff1a 一定是子窗口 和创建主窗口一样 xff0c 都是使用CreateWindow函数来创建 xff08 控件这种 xff09 子窗口和主窗口的
  • SIFT3D点云关键点提取详细介绍

    1 引言 SIFT3D的理论基础完全是从图像特征SIFT2D中迁移类比过来的 xff0c 类似的还有Harris3D和Harris6D的理论也是来源于Harris2D的 xff0c 这些点云特征在PCL库中都有具体的实现 Harris3D和
  • 【视觉注意力机制集锦】引言

    视觉注意力机制集锦之引言 1 注意力机制 1 1 注意力机制简介 卷积神经网络具有很强的拟合数据的能力 xff0c 但是由于优化算法和计算能力的限制 xff0c 在实践中 xff0c 卷积网络很难达到通用近似的能力 特别是在处理规模较大的输
  • 期刊论文发表一定要有老师吗

    期刊论文发表一定要有老师吗 不一定 xff0c 具体要看论文的情况以及各方面的要求 xff0c 一般研究生和博士生论文很多都有老师 xff0c 本科论文很多是毕业生自己完成即可 xff0c 大多也是可以自己完成的 xff0c 如果要求有老师
  • QT菜单样式Ribbon Control for Qt, Office ribbon control

    基于Qt xff08 最低要求Qt5 xff0c 支持C 43 43 11的编译器 xff09 开发的一个轻量级的Ribbon控件 Office样式UI 使用Qt Creator直接打开SARibbon pro xff0c 并编译即可 xf
  • C/C++:基本语法看这一篇就够了

    前言 本文来自菜鸟教程的C语言教程和C 43 43 教程的学习笔记 xff0c 对其中的示例有所删减与变更 xff0c 建议以以下两个链接为准 虽说C 43 43 是C的扩展 xff0c 但貌似二者存在差集 xff0c 而本文只展示了兼容部
  • Qt之简易版网络调试助手

    简述 qt中为网络编程提供了一个QtNetwork类 xff0c 使用QtNetwork可以实现ftp文件传输 xff0c 基于tcp ip协议的客户端和 xff08 服务端 xff09 开发等等 xff0c 本文基于QtNetwork中的
  • ubuntu18.04安装docker以及过程中遇到的问题

    一 在ubuntu18 04上安装 1 更新索引包和安装相关依赖 xff1a sudo apt update sudo apt install apt span class token operator span transport spa
  • # 解决onos localhost 登陆onos后台时 需要输入密码问题

    登陆后台要求输入密码 xff0c 但尝试各种密码均无法登陆 一般从网上拷贝来的onos安装包 xff0c 使用时容易出现此类问题 xff1a 登录后台时会要求输入密码 xff0c 但一般各种密码都无效 问题解决 onos命名其实是一个she
  • visual c++与visual studio有什么区别

  • 【基于pyAudioKits的Python音频信号处理(八)】语音增强:谱减法、维纳滤波和卡尔曼滤波

    pyAudioKits是基于librosa和其他库的强大Python音频工作流支持 API速查手册 通过pip安装 xff1a pip install pyAudioKits 本项目的GitHub地址 xff0c 如果这个项目帮助到了你 x
  • 3.K8S网络之pod中容器到容器之间的通信

    文章目录 1 引入1 1 创建一个网络名称空间1 2 root网络名称空间1 3 docker网络名称空间 4 pod容器到容器之间的通信通信的原理 1 引入 在Linux中 xff0c 网络命名空间提供了一个逻辑的网络堆栈 xff0c 包
  • C++基础(八)--空指针

    在C和C 43 43 中 xff0c 用0和NULL都可以表示空指针 声明指针之后 xff0c 对指针赋值之前 xff0c 让它指空 xff0c 表示没有指向任何地址 使用空指针的后果 xff08 1 xff09 如果对空指针进行解引用 x
  • 【嵌入式Linux】嵌入式Linux驱动开发基础知识之驱动设计的思想:面向对象/分层/分离

    文章目录 前言1 分离设计驱动程序分析 程序分层通用驱动程序 面向对象个性化驱动程序 分离 APP 程序分析 前言 韦东山嵌入式Linux驱动开发基础知识学习笔记 文章中大多内容来自韦东山老师的文档 xff0c 还有部分个人根据自己需求补充
  • 【飞控理论】四旋翼飞行器控制原理

    该篇博客是对锡月科技无人机飞行控制原理教学内容的整理 1 四旋翼飞行器的两种结构 xff1a 字模式 xff1a Pitch和 Roll与1 3 2 4两组电机呈 45 夹角 十 字模式 xff1a Pitch对应 2 4电机的对轴 xff