飞行器pid控制(旋翼飞控)

先说下什么是四旋翼飞行器名称:四旋翼飞行器组件:一个机架,一个陀螺仪,四个无刷直流电机,一个电池,一块单片机(能飞起来的最基本配置)原理:利用四个电机旋转产生的反作用力托起飞行器上升,利用单片机和飞行控制算法控制电机使飞行器稳定然互简单介绍下串级PID算法名字:串级PID算法作用:采集飞行器姿态角,输出调控量是飞行器稳定先说一下姿态角,现在我们想象一个平铺在空间的一个“十”字,这个字左右晃,上下晃…

大家好,又见面了,我是你们的朋友全栈君。

先说下什么是四旋翼飞行器

名称:四旋翼飞行器
组件:一个机架,一个陀螺仪,四个无刷直流电机,一个电池,一块单片机(能飞起来的最基本配置)
原理:利用四个电机旋转产生的反作用力托起飞行器上升,利用单片机和飞行控制算法控制电机使飞行器稳定

串级PID算法

然互简单介绍下串级PID算法
名字:串级PID算法
作用:采集飞行器姿态角,输出调控量使飞行器稳定

姿态角

先说一下姿态角,现在我们想象一个平铺在空间的一个“十”字,这个字左右晃,上下晃,和绕着原点转圈就叫做三个姿态角。前两个叫俯仰,滚转,绕原点转圈的角叫偏航
(下文暂用x,y,z表示)对于仅仅保持稳定,只用x,y角就足够了,那么这三个角怎么测量出来呢?
用陀螺仪,这里我们说MPU6050,,陀螺仪就是一个芯片,唯一的作用就是可以输出三个长度为3的一维数组x[3],y[3],z[3],x,y,z代表三个角,长度为3是因为分别为角度,角速度,角加速度,串级pid只用角度与角速度。

那么具体怎么利用这三个角度控制飞行器稳定呢?

先来个简单的,比如平铺在空间中的十字,我们通过陀螺仪检测到左边往下偏10度,那么x=10,如果右边往下偏10度,x=-10,上边往下偏,y=10,下边往下偏y=-10,注意左边往下偏右边就往上偏,右边往下偏左边就往上偏,这跟个杠杆似得就不用赘述了吧。这两个变量的值会在单片机中以全局变量表示,我们可以直接使用。
如果我们检测到x=10,那么我们就需要加大左边电机的速度,减小右边电机的速度,最终使x,y维持在0,这样飞行器就稳定了,其余角度都同理。
这里的x和y值即是误差,通过误差反过来调控输入的系统叫做负反馈系统
而串级PID算法研究的就是这个要减小和增加的电机转速到底是多少。先介绍下电机转速
首先,电机速度是由PWM波控制的,占空比越大,速度越大,把PWM波占空比的变化用一个int变量speed值从0到1000的变化映射出来,这样0就代表速度0,1000就代表速度最大值。(占空比就是一个周期内高电平时间与周期的比值)
这样构成飞控系统的输入量,输出量就都出来了,输入量是陀螺仪采集的角度,输出量是speed的值,四个电机对应四个speed,分别是speed1,speed2,speed3,speed4。

串级PID衍生于PID,PID就是比例、积分和微分

下面先介绍下PID

PID分两种,增量式和位置式,增量式直接输出调控量的增量,适合于自带积分的步进电机,四旋翼使用位置式PID

P:的作用是按比例增大控制量,比如检测到x=10,此时speed1应该增加10但是10太小,我们就可以把调节量放大,如果P是5那么调节量就扩大为50了
可是只用比例会出现一个问题,那就是比如我想要调节量为33,而P是5的话我们计算得出的调节量只能为5的整数倍,30或35,与33永远有一个误差
如果体现在图像上就是曲线在平衡位置上上下下的折线移动

I:为了消除静差我们必须引入积分量,积分的特点是,只要有一点误差他就会发挥作用(因为是直接程序判断x或y与0的大小关系控制积分器开启的)
并且如果误差不消除或者变号(变号就是正变负或负变正,比如由机翼向右偏变成向左偏),积分就会越来越大,对调节量的增福会越来越大(所以记得设置一个上限)
当然你可能会疑惑积分累加出来的值怎么消除,当机翼由左偏到被比例和积分调节的向右偏时,调节量变号了,你再累加不就相当于累减了吗,就自然消除了
所以积分的调节量就在0左右波动,这样曲线就会由在平衡点上下打折线变成小波浪了

D:至于微分值是是利用上一次的误差值改变这一次的调节量,他的作用就是预测,他的值最有意思的地方就是,和你的机翼所处的位置无关,也即是说即使你的机翼往左偏
微分值也有可能调控让机翼更加往左偏,那既然这样我们为什么还要用微分值呢,其实微分值是检测两个不同的算法周期(一会重点解释这个)误差变化量的大小
假设算法周期是一秒
假设第一秒,飞机x=30,经过算法调节第二秒x=25,第三秒x=10,那么对于微分来说第一秒误差变化量为5,第二秒误差变化量为15
那么他就会阻止x继续变小,即使x变小是为了使飞机稳定,如果第一秒x=15,第2秒x=10那么他就会帮助x变小
这就是微分作用的本质,不分敌我,一心阻止误差变化的扩大,这个的作用其实就是预测误差变化,再由我们具体事件具体分析

怎么利用它

其实了解比例积分微分的本质,具体怎么利用就仁者见仁智者见智了

那么什么是串级PID呢,就是同时利用角度与角速度作为误差输入,两个PID套在一起作为系统,电机速度调控作为输出
外环角度误差先经过一个PID得出的调控量与内环角速度环的差值作为内环的输入误差,该误差再经过一个PID后得出实际电机速度调控量

具体哪里用PI哪里用PD哪里用PID可以根据自己实际情况自己调整,建议外环PI,内环PID。

下面说一下算法周期

就是通过定时器控制,经过多久取一次陀螺仪数据,多久取一次内环计算数据,多久取一次外环计算数据,这个必须要严格控制好,具体值可以和PID值一样自行调试

一年前做过四轴,只凭回忆整理,如有疏漏,谢指正,望谅解。
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127538.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • XXE详解

    XXE详解xxe漏洞的学习与利用总结前言对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识。xml基础知识要了解xxe漏洞,那么一定得先明白基础知识,了解xml文档的基础组成。XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许…

  • 用EasyRecovery挽救数据

    用EasyRecovery挽救数据

  • SenticNet情感词典介绍[通俗易懂]

    SenticNet情感词典介绍[通俗易懂]在进行情感分析时,一个好的情感词典能够让我们的工作事半功倍,较为出名的情感词典有SentiWordNet,GeneralInquirer等,这篇博客将介绍另外一个出色情感词典,SenticNet。简介当谈论SenticNet时,我们正在谈论概念层面的情感分析,即通过语义和语言学来完成极性探测、情感识别等任务,而不是单纯的依靠词共现频率。SenticNet可以看作是以下其中一种:1…

  • checkbox选中触发事件_jquery select change事件

    checkbox选中触发事件_jquery select change事件aspx页面部分代码:                                 CommandName=”LookDetail”>        AutoPostBack=”True”>         asdf         asdfasdf         wrwwewewee                          cs部分代码:cs部分代码:///  ///设计器支

  • executescalar mysql_ExecuteScalar[通俗易懂]

    executescalar mysql_ExecuteScalar[通俗易懂]这两个答案和一点点思考使我想到了一个接近答案的东西。首先再澄清一下:该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQLServer2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报…

  • 【HTML基础】CSS样式表「建议收藏」

    【HTML基础】CSS样式表「建议收藏」1.理解HTML与CSS各自的功能及配合原则;2.掌握HTML与CSS的三种组合方式。

发表回复

您的电子邮箱地址不会被公开。

评论列表(1条)

  • 匿名
    匿名 2022年8月19日 下午3:36

    写得太好了!看了很多篇其它的 不是太理解 谢谢博主

关注全栈程序员社区公众号