小四轴编程入门教程之一:陀螺仪和加速度计
在小四轴中,陀螺仪是一种用于测量小四轴旋转速度的传感器,它测量的是角速度,是指物体在单位时间内转过的角度大小。通过测量物体在X/Y/Z三个轴上的角速度,我们就可以得到物体在X/Y/Z三个轴上一段时间内转过的角度。
那么,在小四轴上,陀螺仪的作用是什么呢? 我们知道,把一个物体悬浮在空中的方法可以是给物体的四个角施加拉力。如果物体某个方向的力度不够,那么物体就会因为重力的作用朝这个方向倾斜。通过在该物体上装上陀螺仪,就可以知道物体倾斜的方向,然后据此调整物体四个角的拉力,就可以达到让物体悬浮的目的。
至此,我们基本了解了陀螺仪在小四轴中的作用。但是,有一个问题我们不能忽略,那就是误差的问题。我们在使用传感器测量角速度时候,假定我们每一毫秒读取一次传感器数据,然后把该数据当作物体在这一毫秒内转过的角度。由于物体倾斜的过程并不是匀速的,所以计算出来的角度和物体实际转过的角度是有误差的。这样一来,随着时间的增加,所累加的误差也会越来越大。这样一来,即使物体在水平状态,但是由于陀螺仪的计算误差,从运算结果来看,物体并不在水平状态。
这个时候,我们引入了加速度计。加速度计是用于测量物体的加速度的。它的一个好处就是可以借助重力加速度来帮助我们来计算一个静止物体相对于地面的倾角。当一个物体和地面完全水平的时候,物体的倾角是0。但是,由于加速度计测量的不仅仅是重力的作用,对于一个运动的物体,它的测量数据是重力和其它力共同作用的的结果。由于在空中飞行的小四轴是运动的物体,所以我们无法根据加速度计所得到的数据直接来判断小四轴是否处于水平状态。
我们知道,要把小四轴悬浮在空中,就要在它的四个角通过电机施加升力。而每个电机应该给多少升力则取决于小四轴的倾斜状态。当小四轴处于水平状态,四个电机给一样的升力,当小四轴朝某个方向跌落,则该方向的电机给予更大的升力。要做到这一点,我们就要时刻测量小四轴的倾角。
但是,根据上面的描述,我们知道无论是陀螺仪,还是加速度计,都无法准确地给出飞行中的小四轴的倾斜状态。人们想到一个方法,就是用加速计测量的数据来修正陀螺仪的数据。这就是我们下一节要讲到的:
小四轴编程入门教程之二:数据的滤波和融合
在上一节,我们讲述了陀螺仪和加速度计的作用。在这一节,我们讲述如何对陀螺仪和加速度数据进行滤波和融合。
首先,我们来谈小四轴的滤波。滤波的方法有很多种,在小四轴上,对于陀螺仪和加速度计,我们一般采用不同的滤波方法。对于陀螺仪,大家最常见的就是滑动平均法。即把最新的10个或者20个数据进行平均。在次基础上,对不同的数采用不同的加权,又能变种出很多种不同的滤波方法。对小四轴初学者来说,用最简单的滑动平均法就可以。对于加速度计,我们通常采用掐尾法,即去掉低位的数据以避免由于小四轴震动而引起的误差。
接下来,我们来谈小四轴的融合。所谓融合,就是把陀螺仪测量出来的数据和加速度计测量出来的数据以一定比重混合在一起。和大家在做蛋糕过程中,加多少牛奶,多少面粉方法类似。
小四轴融合常用的方法有:四元数法,互补滤波法,卡尔曼法等。通过调整合适的参数比例,把陀螺仪测量出来的物体角度和加速度计测量出来的角度进行互相修正。
由于该节涉及到的数学知识比较多,这里只是大略提及了各个概念,而不一一进行深入分析。对于各种滤波和融合的算法C语言实现方法,大家可以直接阅读我们的源代码。
小四轴编程入门教程之三:PID的实现
四轴飞行器的位置式PID控制和增量式PID控制
在开始本文的描述前,我们先来看看什么叫PID控制器。P是Proportional的简称,I是Integral的简称,D是Derivative的简称,合并起来,PID控制器指的就是是比例,积分和微分控制器,用公式表示如下(e是指设定值和当前值的误差,t是指当前的时间)。
公式一:
以离散的数字方式表示如下(其中,k表示某个时刻,e(k)就表示某个时刻的误差值)。
公式二:
以四轴飞行器为例,假定我们每1ms读取一次陀螺仪和加速度的数值,并计算到姿态pitch和roll,再假定我们的目前姿态是水平状态,即pitch=0,roll=0,那么我们就可以得到某个时刻的PID计算公式如下图(其中A代表的是姿态角)。
公式三:
上述公式就是我们在四轴飞行器源代码里面经常看到的编程方法,通常,我们把微分控制的姿态差直接用陀螺仪的数据来表示,因为从陀螺仪读取出来的数据代表的就是现在和上一次的角速度差,乘以1ms的时间差,即为角度差,因而公式变为。
公式四:
对于简单的四轴飞行,积分不是必要的条件,而且积分使用不好的情况下,会对四轴飞行器的稳定性产生很大影响,所以对于四轴飞行器初学者来说,我们可以先去除积分项,把公式简化成下面的样子。
公式五:
就这样,一个简单的四轴飞行器的PID控制公式就出现在我们面前了。把该公式变换成代码,即可以实现四轴飞行器的PID控制。
从上面的描述,我们可知,这是一个位置式的PID控制器,即我们是把当前位置和水平位置作为误差来进行PID控制,从而实现四轴飞行器的水平飞行的。增量式PID和位置式PID的不同就在于增量PID控制是把位置的变化量作为控制量。这样一来,我们可以得到下述的计算公式。
公式六:
从上面公式,我们可以看出,积分项累加的结果就是当前姿态减去初始姿态,假定初始姿态为水平状态,那么姿态增量的积分就是当前的姿态。比例控制的是当前姿态相对于上一姿态的增量,根据我们之前的描述,可以用陀螺仪数据来表示。假定我们忽略微风项的控制,那么公式可以简化为:
公式七:
把公式七和公式五做对比,我们可以知道,在四轴飞行器中,位置式的PD控制相当于增量式PID的PI控制。把位置式PID控制和增量式PID控制组合在一起,就可以组成串级PID控制。
上文详细描述了位置式和增量式PID控制,并引出了串级PID控制的概念,如需转载,请勿用于商业目的,并注明:该文章出自圆点博士无人机www.bspilot
更多推荐
小四轴编程入门教程
发布评论