飞行器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)


相关推荐

  • SVN—SVN服务器搭建和使用[通俗易懂]

    本系列会总结一些svn和git的安装和使用,以及最后svn的项目如何迁移到git上,整个系列会持续输出。 要学习svn,那么首先开始搭建svn服务器和客户端。 下面要讲的有:svn下载和安装svn配置文件svn服务器的使用1:svn服务器和客户端安装包下载和安装 Subversion是优秀的版本控制工具, 现在Subversion已经迁移到apache网站上了,下载地址: http://

  • Arduino单片机控制步进电机

    Arduino单片机控制步进电机步进电机是一种将电脉冲转化为角位移的执行机构。当步进电机的驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步长)。通过控制脉冲个数来控制角位移量,达到准确定位的目的;通过控制脉冲频率来控制电机转动的速度和加速度,达到调速的目的。下面是连接图,右上角是Arduino与驱动器的连线,VCC、脉冲、方向、使能是单片机提供的4个引脚,字面意思是对于驱动器而言,与Ar…

  • ios发的gif图不动_怎么暂停gif

    ios发的gif图不动_怎么暂停gif其实网上GitHub有很多第三方的,但是用起来比较麻烦,这里介绍最简单的一种方式,自己就可以实现,(点击按钮开始播放动态图)1,集成SDWebImage之后,引入头文件#import"U

  • PCBlayout设计「建议收藏」

    PCBlayout设计「建议收藏」一、PCB设计流程一般来说PCB基本设计流程:前期准备->PCB结构设计->PCB布局->布线->布线优化和丝印->网络和DRC检查和结构检查->制板。1、前期准备包括准备元件库和原理图,在开始进行布板时,得先完成原理图的设计。我们公司基本是用Protel99画图,我们常用的元件库也都基本具备,也是我们公司常用的标准。对于一些元件没有元件库的,需要自己根据元件

    2022年10月27日
  • Java Map集合的详解「建议收藏」

    Java Map集合的详解「建议收藏」一,Map先说一下Map吧~如果程序中存储了几百万个学生,而且经常需要使用学号来搜索某个学生,那么这个需求有效的数据结构就是Map。Map是一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是整数。在Map中键(key)可以使任意类型的对象。Map中不能有重复的键(Key),每个键(key)都有一个对应的值(value)。一个键(key)和它对应的值构成ma

  • 分享.NET 轻量级的ORM

    分享.NET 轻量级的ORM

发表回复

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

评论列表(1条)

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

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

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