PID控制算法
PID控制算法
四轴如何起飞的原理
四轴飞行器的螺旋桨与空气发生相对运动,产生了向上的升力,当升力大于四轴的重力时四轴就可以起飞了。
四轴飞行器飞行过程中如何保持水平:
我们先假设一种理想状况:四个电机的转速是完全相同的
是不是我们控制四轴飞行器的四个电机保持同样的转速,当转速超过一个临界点时(升力刚好抵消重力)四轴就可以平稳的飞起来了呢?
答案是否定的,由于四个电机转向相同,四轴会发生旋转。我们控制四轴电机1和电机3同向,电机2电机4反向,刚好抵消反扭矩,巧妙的实现了平衡:

实际上由于电机和螺旋桨本身制造的差异我们无法做到四个电机转速完全相同,如果我们控制同样的转速很有可能飞行器起飞之后就侧翻了。这时候大家可能会想到要用遥控器来控制电机,我们来尝试一下:

由于电机的不平衡,在人眼的观察下发现飞机向右侧翻,我们控制右侧电机1电机2提高转速增加升力,飞机归于平衡。由于 飞机是一个动态系统,在接下来我们会一直重复:
观察->大脑计算->控制->观察->大脑计算->控制 这个过程。

但事实上这是不可能的,因为人无法长时间精确的同时控制四个电机。我们需要一个自动反馈系统替代人操作来完成飞机的自稳定,我们人只需要控制飞机的方向和高度就可以了。这个系统中反馈由姿态传感器替代眼睛,而大脑则由单片机来替代。这时候该PID控制系统出场了!
什么是PID?
PID控制器由偏差的比例(P)、积分(I)和微分(D)来对被控对象进行控制,是应用最为广泛的一种自动控制器。

- 比例(P)控制
比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。
- 积分(I)控制
在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的 或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积 分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳 态误差。 积分项输出:

- 微分(D)控制
微分调节就是偏差值的变化率。使用微分环节能够实现系统的超前控制。如果输入偏差值线性变化,则在调节器输出侧叠加一个恒定的调节量。大部分控制系统不需要调节微分时间。因为只有时间滞后的系统才需要附加这个参数。如果画蛇添足加上这个参数反而会使系统的控制受到影响。微分项输出:

综上所述得到一个一条公式,这个就是模拟PID:

而PID中又可以只使用PI项构成比例-积分控制器,使用PD项构成比例-微分控制器。在Crazepony四轴飞行器中我们使用了增量式PD控制,以ROLL方向角度控制为例:
- 测得ROLL轴向偏差:
偏差=目标期望角度-传感器实测角度
DIF_ANGLE.X = EXP_ANGLE.X - Q_ANGLE.Roll;
- 比例项的计算:
比例项输出 = 比例系数P * 偏差
Proportion = PID_Motor.P * DIF_ANGLE.X;
- 微分项计算: 由于陀螺仪测得的是ROLL轴向旋转角速率,角速率积分就是角度,那么角度微分即角速率,所以微分量刚好是陀螺仪测得的值。
微分输出=微分系数D*角速率
DifferentialCoefficient = PID_Motor.D * DMP_DATA.GYROx;
- 整合结果总输出为:
ROLL方向总控制量=比例项输出+微分量输出
ROLL 和PIT轴向按照以上公式计算PID输出,但YAW轴比较特殊,因为偏航角法线方向刚好和地球重力平行,这个方向的角度无法由加速度计直接测得,需要增加一个电子罗盘来替代加速度计。如果不使用罗盘的话,我们可以单纯的通过角速度积分来测得偏航角,缺点是由于积分环节中存在积分漂移,偏航角随着时间的推移会偏差越来越大。我们不使用罗盘就没有比例项,只仅使用微分环节来控制。

- YAW轴输出:
微分输出=微分系数D*角速率
YAW方向控制量 = PID_YAW.D * DMP_DATA.GYROz;
- 电机的输出: 油门控制Throttle是电机输出的基准值,增加油门即可提高四轴高度。最后整合ROLL/PIT/YAW三轴输出量进行电机控制:

Motor[2] = (int16_t)(Thr - Pitch - Roll - Yaw ); //M3
Motor[0] = (int16_t)(Thr + Pitch + Roll - Yaw ); //M1
Motor[3] = (int16_t)(Thr - Pitch + Roll + Yaw ); //M4
Motor[1] = (int16_t)(Thr + Pitch - Roll + Yaw ); //M2
如图四轴绕ROW轴向右下倾斜5度,那么电机1电机2应该提高升力,电机3电机0减小升力恢复平衡状态,所以有以下规则:
- Roll方向旋转,则电机1电机2同侧出力,电机0电机3反向出力
- Pitch方向旋转,则电机2电机3同侧出力,电机0电机1反向出力
- Yaw方向旋转,则电机1电机3同侧出力,电机0电机2反向出力
PID控制算法的更多相关文章
- 数字PID控制算法
增量式PID控制算法 量式PID控制算法 2009-07-18 10:33 (转载 出处blog.ednchina.com/tengjingshu )blog.ednchina.com/tengjin ...
- PID控制算法的简单分析和仿真!
PID算法简单剖析如下: 1.首先我们来看一下PID系统的基本组成模块: 如图所示,图中相关参数的表示如下: r(t):系统实际上需要的输出值,这是一个标准值,在我们设定了之后让这个系统去逼近的一个值 ...
- [转]PID控制算法原理
PID控制算法是工业界使用极其广泛的一个负反馈算法,相信这个算法在做系统软件时也有用武之处,这里摘录了知乎上的一篇文章,后面学习更多后自己总结一篇 以下为原文: PID控制应该算是应用非常广泛的控制算 ...
- PID控制算法的C语言实现十 专家PID与模糊PID的C语言实现
本节是PID控制算法的C语言实现系列的最后一节,前面8节中,已经分别从PID的实现到深入的过程进行了一个简要的讲解,从前面的讲解中不难看出,PID的控制思想非常简单,其主要问题点和难点在于比例.积分. ...
- PID控制算法的C语言实现十一 模糊算法简介
在PID控制算法的C语言实现九中,文章已经对模糊PID的实质做了一个简要说明.本来打算等到完成毕业设计,工作稳定了再着力完成剩下的部分.鉴于网友的要求和信任,抽出时间来,对模糊PID做一个较为详细的论 ...
- PID控制算法的C语言实现九
(1)微分先行PID控制算法 微分先行PID控制的特点是只对输出量yout(k)进行微分,而对给定值rin(k)不进行微分.这样,在改变给定值时,输出不会改变,而被控量的变化通常是比较缓和的.这种输出 ...
- PID控制算法的C语言实现八 变积分的PID控制算法C语言实现
变积分PID可以看成是积分分离的PID算法的更一般的形式.在普通的PID控制算法中,由于积分系数ki是常数,所以在整个控制过程中,积分增量是不变的.但是,系统对于积分项的要求是,系统偏差大时,积分作用 ...
- PID控制算法的C语言实现一 PID算法原理
本系列是转载............. 全部的程序有一个共同点:就是我没认真去调pid的参数 在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设 ...
- 杂谈PID控制算法——第二篇:调·三个量
上面一篇文章讲了一下PID算法中的三个常量大致的在PID算法中起的一个作用,但在实际的使用中,究竟应该如何调节(或者用更加专业的话说是整定)PID控制算法的三个.首先可以将KP,KI,KD三个常量全部 ...
随机推荐
- Python 全栈开发:str(字符串)索引和切片
str(字符串)索引和切片 str(字符串)索引: #计算机中大部分索引以0为开始 s = 'mylovepython' s1 = s[0] s2 = s[4] s3 = s[-1] print(s1 ...
- Java NIO学习与记录(五): 操作系统的I/O模型
操作系统的I/O模型 在开始介绍NIO Reactor模式之前,先来介绍下操作系统的五种I/O模型,了解了这些模型,对理解java nio会有不小的帮助. 先来看下一个服务端处理一次网络请求的流程图: ...
- MNIST手写数字识别 Tensorflow实现
def conv2d(x, W): return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME') 1. strides在官方定义中是一 ...
- eclipse左边的项目栏消失的处理方法
window —–> Show View —–> other —–> package Explorer
- STM32F103RE引脚功能整理
- PSR2规范
为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的.各个成员项目间的共性组成了这组代码规范.当开发者们在多个项目中合作时,本指南将会成为所有这些项目中共用 ...
- SPSS学习系列之SPSS Statistics(简称SPSS)是什么?
不多说,直接上干货! IBM SPSS Statistics 为业务经理和分析人员提供解决基本业务和研究问题所需的核心统计过程.该软件提供的工具使用户能够快速查看数据.为其他测试拟定假设情况.执行澄清 ...
- git --mixed --soft --hard之间的区别
git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和add信息git reset --soft:回退到某个 ...
- CentOS7服务管理(重启,停止,自动启动命令)
我们对service和chkconfig两个命令都不陌生,systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体. systemctl is-enable ...
- Session 与 Cookie
Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们本身只是HTTP中的一个配置项,在servlet规范中也只对应一个类而已. 理解 Cookie 通俗地说就是当一 ...