没有合适的资源?快使用搜索试试~ 我知道了~
四轴飞行器姿态控制算法注释
需积分: 37 43 下载量 195 浏览量
2017-06-11
18:34:30
上传
评论 2
收藏 42KB DOCX 举报
温馨提示
试读
34页
四轴飞行器姿态控制算法注释
资源推荐
资源详情
资源评论
从开始做四轴到现在,已经累计使用了三个月的时间,从开始的尝试用四元数法进行
姿态检测,到接着使用的卡尔曼滤波算法,我们走过了很多弯路,我在从上周开始了对德
国人四轴代码的研究和移植,发现德国人的代码的确有他的独到之处,改变了很多我对模
型的想法,因为本人是第一次尝试着制作模型,因此感觉很多想法还是比较简单。经过了
一周的时间,我将德国人的代码翻译并移植到了我目前的四轴上,并进行了调试,今天,
专门请到了一个飞直升机的教练,对我们的四轴进行试飞,并与一个华科尔的四轴进行了
现场比较,现在我们四轴的稳定性已经达到了商品四轴的程度。下面是我这一周时间内对
德国人代码的一些理解:
德国人代码中的姿态检测算法:
首先,将陀螺仪和加速度及的测量值减常值误差,得到角速度和加速度,并对角速度
进行积分,然后对陀螺仪积分和加速度计的数值进行融合。融合分为两部分,实时融合和
长期融合实时融合每一次算法周期都要执行,而长期融合没 个检测周期执行一次,
注意检测周期小于控制周期的
实时融合:
将陀螺仪积分和加表滤波后的值做差
按照情况对差值进行衰减,并作限幅处理
将衰减值加入到角度中。
长期融合:
长期融合主要包括两个部分,一是对角速度的漂移进行估计估计值是要在每一个控制
周期都耦合到角度中的,二是对陀螺仪的常值误差也就是陀螺仪中立点进行实时的修正。
将陀螺仪积分的积分和加速度积分做差:为什么这里要使用加表积分和陀螺仪
积分的积分,因为在 个检测周期内,有一些加速度计的值含有有害的加速度分量,如
果只使用一个时刻的加表值对陀螺仪漂移进行估计,显然估计值不会准确,使用多个周期
的值进行叠加后做座平均处理,可以减小随机的有害加速度对估计陀螺仪漂移过程中所锁
产生的影响
将上面两个值进行衰减,得到估计的陀螺仪漂移
对使考虑了陀螺仪漂移和不考虑陀螺仪漂移得到的角度做差,如果这两个值较大,
说明陀螺仪在前段时间内测到的角速率不够准确,需要对差值误差也就是陀螺仪中立点
进行修正,修正幅度和差值有关
长期融合十分关键,如果不能对陀螺仪漂移做修正,则系统运行一段时间后,速率环
的稳定性会降低。
下面比较一下德国四轴中姿态检测部分和卡尔曼滤波之间的关系:
卡尔曼滤波是一种线性系统的最优估计滤波方法。对于本系统而言,使用卡尔曼滤波
的作用是通过对系统状态量的估计,和通过加速度计测量值对系统状态进行验证,从而得
到该系统的最优状态量,并实时更新系统的各参数矩阵,而最重要的一点,改滤波器能
够对陀螺仪的常值漂移进行估计,从而保证速率环的正常运行,并在加速度计敏感到各种
有害加速度的时候,使姿态检测更加准确。但是卡尔曼滤波器能否工作在最优状态很大程
度上取决于系统模型的准确性,模型参数的标定和系统参数的选取。然而,仅仅通过上位
机观测而得到最优工作参数是不显示的,因为参数的修改会导致整个系统中很多地方发生
改变,很难保证几个值都恰好为最优解,这需要扎实的理论知识,大量的测量数据和系统
的仿真,通过我对卡尔曼滤波器的使用,发现要想兼顾锁有的问题,还是有一定难度的。
而德国人的姿态检测部分是在尝试使用一种简单方法去解决复杂问题,他既没有使用
传统的四元数法进行姿态检测,也么有使用卡尔曼滤波。他的计算量不比最简单的卡尔曼
滤程序波程序的计算量小,但与卡尔曼滤波相比,更加直观,易于理解,参数调节也更加
方便。我个人理解,这个方法是在尝试着对卡尔曼滤波这一复杂相互耦合的多状态变量的
线性系统状态估计过程进行了简单的解耦,从而将姿态的最优估计和陀螺仪漂移的最优估
计分隔开,这样,就可以通过比较直观的观测手段对两个部分的参数进行调整,但是,这
种方法的理论性肯定不如使用四元数法和卡尔曼滤波,在一些特殊的情况下还可能出现问
题,但是,由于卡尔曼滤波器设计的难度,使用这种方法还是比较现实的。
控制算法:
德国人的控制算法的核心是对角速度做 计算, 的作用是使四轴能够产生对于外界
干扰的抵抗力矩, 的作用是让四轴产生一个与角度成正比的抵抗力。
如果只有 的作用,将四轴拿在手上就会发现,四轴能够抵抗外界的干扰力矩的作用,
而且这个抵抗力非常快速,只要手妄图改变四轴的转速,四轴就会产生一个抵抗力矩,但
是,如果用手将四轴扳过一个角度,则四轴无法自己回到水平的角度位置,这就需要 的
调节作用。
对角速度做 积分预算实际得到的就是角度,德国人四轴里面用的也是角度值,如果
四轴有一个倾斜角度,那么四轴就会自己进行调整,直到四轴的倾角为零,它所产生的抵
抗力是与角度成正比的,但是,如果只有 的作用,会使四轴迅速产生振荡,因此,必须
将 和 结合起来一起使用,这时候基本上就会得到德国四轴的效果了。
在对角速度进行了 调节之后,德国人将操纵杆的值融合到结果中去,并对得到的新
的值有进行了一次 计算,这个积分参数很小,使用这个积分的作用因为,四轴在有一个
非常小的倾角的情况下产生的抵抗力矩很小,无法使四轴回到水平位置,这就会导致无论
怎么手动调节微调,四轴都很难做到悬停,会不停得做水平漂移运动,这就必须不停的进
行调整。
下面是我给德国四轴中飞控程序的一些注释:
!
" ##
!
$%&'&(($)* * +
,&-..
/ 01.
2
2
((函数3&4& 设定传感器发出参数的中立数值,因为有漂移所以要使其每次工作
都要测量出来。
((
55555555555555555555555555555555555555555555555
55555555555555555555555555555
((4 "&&&
(6设置中立点6(
&4&
((
55555555555555555555555555555555555555555555555
55555555555555555555555555555
!
(6加速度计中立点6(
4& 7-.
4& 8-.
4& 9-.
(6陀螺仪中立点6(
4& 4)-.
4& : -.
4& ;-.
&1< -.
&1;< -.。。。
(6这个地方我还没有弄得太明白,检测中立点的函数被调用了两次,但是第一次的数
据好像没有保存,只用到了
第二次的数据6(
(6记录中立点6(
= ,%&& "&
/ 011%..
(6记录中立点6(
= ,%&& "&
(6既然只使用了后一次的数据,为什么要进行两次记录中立点的函数6(
$''1&; , =>?=*;1@A'@'4:';'BC4;
!
$%B$&)DE.FF%B$&)GH.
B$&)AI&((如果气压表输出在
E. 外 H. 内,则设定气压初始的偏差。
2
(6将量测值作为陀螺仪的中立点6(
4& 4)-J&4)
4& : -J&:
4& ;-J&;
(6这两个参数在飞控程序中没有用到6(
&&4& : -4& :
&&4& 4)-4& 4)
$11,0&?''0K'':A%1/:1==14=<LDM((
!
(6由于在函数 = ,%&& "&中加速度计的输出乘以了 ==1%B*8,所以
这里必须处以 ==1%B*8,
在这段程序中,所有的对加速度计和陀螺仪的数值的衰减或者放大都是为了让
陀螺仪积分和加速度计数值在同样的角度偏差的情况下能基本匹配,如果不匹配,那
么就谈不上用加速度计来补
偿陀螺仪积分了6(
4& 8-,%&& "&1: (==1%B*8
4& 7-,%&& "&14)(==1%B*8
4& 9-)& 1
2
!
(6如果发现变化不大,则仍然储存上一次的6(
4& 7-
&11,0&?''0K'':A%1/:1==14=<L6N&
11,0&?''0K'':A%1/:1==14=<NL
4& 8-
&11,0&?''0K'':A%1/:1==1:ABBL6N&
11,0&?''0K'':A%1/:1==1:ABBNL
4& 9-
&11,0&?''0K'':A%1/:1==19L6N&
11,0&?''0K'':A%1/:1==19NL
2
(6将所有数据清零,这里带 的变量都是加入了陀螺仪漂移补偿值之后得到的角度6(
%1& 4)-.
%1& 4)-.
%1& : -.
%1& : -.
%1& 1;-.
%"&4)-.
%"&: -.
%"&;-.
&&B$&)-B$&)
@/-.
%1& 1@-.
<&&"&-<O
;14&
,&-.((
(6从 '':A% 中读取陀螺仪积分到达 E.P时候的值,并储存,当得到的姿态角度大于
这个范围时,说明超过了 E.P
,就要进行相应的处理6(
C Q.4)- ''1&J) C 4)6..B
C Q.: - ''1&J) C : 6..B
'R&@O -.
2
(((((((((((((((((((((((((((((((
((函数描述 :求参数的平均数值
((((((((((((((((((((((((((((((
((
55555555555555555555555555555555555555555555555
55555555555555555555555555555
((S,&&%"&
%&& "&
((根据测量值 计算陀螺仪和加速度计数据
((
55555555555555555555555555555555555555555555555
55555555555555555555555555555
!
&& & &
(6将陀螺仪数据减去常值误差,得到实际的叫速率的倍数6(
%"&;-&4& ;#J&;
%"&: -&J&: #4& :
%"&4)-&J&4)#4& 4)
((/,A& KL-%"&4)
/,A& KQL-%"&:
((加速度传感器输出
(6加速度计数据滤波,==1%B*8-得到的 %&& "&14) 是加速度计
数值的 倍6(
(6J&4) 为测量值6(
((S TNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNN
%&& "&14)- %&& "&14)6N==1%B*86
J&4)(
B((具有滤波功能的方法,用当前加速度和上次的加速度平均
%&& "&1: - %&& "&1: 6N==1%B*86
J&: (B
%&& "&1@- %&& "&1@6N
J&@(B
(6计算加速度计的积分,加速度计对运动十分敏感,采用加速度计积分,可以减少瞬
间的运动加速度的影响6(
& 4)N-==1%B*86J&4)
& : N-==1%B*86J&:
& 9N-)& 1#4& 9
((;NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNN
(6偏航方向无法进行滤波,因此直接进行积分得到偏航角度6(
%1& 1;N-%"&;
%1& 1;N-%"&;
(6耦合项应该是另外两个陀螺仪对这个轴上陀螺仪的影响,当四轴在稳定姿态不为水
平的时候,进行偏航运动时
候所进行的补偿6(
(6假设目前的俯仰角是 .P,而横滚角是 .P,这时候如保持俯仰和横滚轴没有任何运
动,而将偏航轴转动 E.P
,那么实际的俯仰角就会变为 .P,横滚角就会变为 .P
但是,按照目前的算法,由于俯仰和横滚方向没有运动,因此就不会有陀螺仪的积分,
俯仰和横滚角是不变的
,这就是采用陀螺仪直接积分测角度的不完善性,这时候
剩余33页未读,继续阅读
资源评论
JQKAgo
- 粉丝: 33
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功