飞行器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值一样自行调试

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2021版idea激活码99年_在线激活

    (2021版idea激活码99年)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~K…

    2022年3月22日
    125
  • java面试题高级_Java高级面试题整理(附答案)[通俗易懂]

    java面试题高级_Java高级面试题整理(附答案)[通俗易懂]javajava8java开发Java高级面试题整理(附答案)这是我收集的10道高级Java面试问题列表。这些问题主要来自Java核心部分,不涉及JavaEE相关问题。你可能知道这些棘手的Java问题的答案,或者觉得这些不足以挑战你的Java知识,但这些问题都是容易在各种Java面试中被问到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。1…

    2022年7月18日
    14
  • 佳能打印机 打不出黑色怎么办

    佳能打印机 打不出黑色怎么办打印黑白表格的时候,只有一点黑色的痕迹测试打印的时候,顶部黑色一个无法显示深度清洗一次之后深度清洗两次之后

    2022年8月5日
    7
  • 如何用ubuntu命令打开pycharm_ubuntu安装pycharm教程

    如何用ubuntu命令打开pycharm_ubuntu安装pycharm教程linux中打开pycharm的方法:方法一:在Linux终端进入pycharm安装路径下的bin目录下,输入如下命令:./pycharm.sh方法二:设置桌面快捷方式,然后通过快捷方式启动。设置快捷方式的方法:终端输入:sudogedit/usr/share/applications/Pycharm.desktop粘贴模板:[DesktopEntry]Type=ApplicationNa…

    2022年8月28日
    5
  • Flume+Kafka整合案例实现

    Flume+Kafka整合案例实现 一、为什么要集成Flume和Kafka我们很多人在在使用Flume和kafka时,都会问一句为什么要将Flume和Kafka集成?那首先就应该明白业务需求,一般使用Flume+Kafka架构都是希望完成实时流式的日志处理,后面再连接上Flink/Storm/SparkStreaming等流式实时处理技术,从而完成日志实时解析的目标。第一、如果Flume直接对接实时计算框架,当数据采集速…

    2022年6月23日
    31
  • canvas孙悟空脚踩白云今年是猴年

    效果查看:http://hovertree.com/texiao/html5/30/使用HTML5的canvas画的孙悟空,CSS3画的白云飘飘。刚擒住了几个妖又降住了几个魔魑魅魍魉怎么他就这

    2021年12月22日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(1条)

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

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

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