本文方法来自于全权老师的《多旋翼飞行器设计与控制》一书
首先我们来看怎样通过机载传感器得到机体的姿态角;
姿态角变化率θ˙,ϕ˙,ψ˙与机体角速度bω之间的关系如下:
⎣⎡ϕ˙θ˙ψ˙⎦⎤=⎣⎡100tanθsinϕcosϕsinϕ/cosθtanθcosϕ−sinϕcosϕ/cosθ⎦⎤⎣⎡ωxbωbbωbb⎦⎤
在多旋翼飞行过程中,俯仰角和滚转角一般很小,那么上式可以近似为:
⎣⎡ϕ˙θ˙ψ˙⎦⎤≈⎣⎡ωxbωybωzb⎦⎤
姿态角还可以通过加速度计和磁力计的测量值得到;
加速度测量的是比力,满足下列形式
[axbayb]=[v˙xb+gsinθv˙yb−gcosθsinϕ]
我们假设多旋翼飞行器工作在低速状态下,上式可近似为:
{axb≈gsinθayb≈−gcosθsinϕ
三轴加速度计固连在多旋翼机体上,其坐标轴与机体坐标轴一致。因此,俯仰角和滚转角观测量可以由加速度计测量值近似得到:(得到的是姿态角的低频分量,因为低速运动的假设,运动模态集中在低频段)
⎩⎨⎧θm=arcsin(gaxbm)ϕm=−arcsin(gcosθmaybm)
其中
bam=[axbmaybmazbm]T
偏航角测量原理:
假设磁力计测量值为
bmm=[mxbmybmzb]T。考虑到磁力计可能不是水平放置,所以需要利用俯仰角与滚转角将磁力计的测量值投影到水平面。
{mxc=mxbcosθm+mybsinϕmsinθm+mzbcosϕmsinθmmyc=mybcosϕm−mzbsinϕm
其中mxc,mye∈R表示磁力计读数在水平面内的投影。定义ψmag∈[−π,π],则有:
ψmag=arctan2(myc,mxe)
三轴陀螺仪的动态响应快,测量精度高,但求解姿态角时需要对角速度积分,会产生累积误差;三轴加速度计和三轴磁力计可以得到稳定的姿态角,无累积误差,但是动态响应差,测量噪声大。
高低通滤波(即线性互补滤波器)的基本思想是利用各自的特征得到更稳定的姿态角
下面以俯仰角为例来介绍高低通滤波器的一般设计方法:
俯仰角θ∈R的拉氏变换表示为:
θ(s)=τs+11θ(s)+τs+1τsθ(s)
其中,τs+11表示低通滤波器的传递函数,τ∈R+表示时间常数,τs+1τs表示高通滤波器的传递函数。
考虑加速度计得到的俯仰角无漂移,但噪声大,可将俯仰角测量值建模为如下形式:
θm=θ+nθ
其中nθ∈R表示高频噪声,θ表示俯仰角真值。考虑到角速度积分得到的俯仰角噪声小但漂移大,可以建模为:
sωy0m(s)=θ(s)+cs1
其中ωybm(s)/s表示对角速度ωybm进行积分得到的俯仰角的拉氏变换,c/s表示常值漂移的拉氏变换,ωybm是陀螺仪的测量值。因此针对俯仰角,高低通滤波器的标准形式为:
θ^(s)=τs+11θm(s)+τs+1τs(s1ωybm(s))
接下来详细说明高低通滤波能够精确估计姿态角的原理:
上式可以写为如下形式:
θ^(s)=θ(s)+(τs+11nθ(s)+τs+1τscs1)
可以看出高频噪声nθ通过低通滤波器τs+11后基本衰减为0,低频信号c/s通过高通滤波器τs+1τs后也基本衰减为0.因此可以认为:
θ^(s)≈θ(s)
在整个过程中,低通滤波器将θm无漂移的优势保留了下来,高通滤波器将ωybm(s)/s噪声小的优势保留了下来。
接下来看高低通滤波具体的算法实现:
我们使用一阶向后差分法将滤波器转换为离散形式,即使用s=(1−z−1)/Ts,其中Ts∈R+表示滤波器的采样周期。这时,滤波器的形式变为如下:
θ^(z)=τTs1−z−1+11θm(z)+τTs1−z−1+1τωym(z)
将上式转化为离散时间差分方程的形式:
θ^(k)=τ+Tsτ(θ^(k−1)+Tsωybm(k))+τ+TsTsθm(k)
令α=τ+Tsτ,上式可以写成;
θ^(k)=α(θ^(k−1)+Tsωybm(k))+(1−α)θm(k)
下面使用传感器实测的数据来验证高低通滤波的实际效果(低通滤波器截止频率设置为50Hz,传感器采样频率为200Hz)

可以看到陀螺仪直接积分得到的俯仰角直接发散掉了,而通过加速度计直接计算得到的俯仰角含有大量噪声,高低通滤波器输出的俯仰角则融合了上述两种方法各自的长处,精确得到了俯仰角的测量值。