智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 15058|回复: 9
打印 上一主题 下一主题

一种常见的四轴飞行器姿态解算方法分析

  [复制链接]

17

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
355
威望
205
贡献
114
兑换币
101
注册时间
2013-7-1
在线时间
18 小时
毕业学校
天津理工
跳转到指定楼层
1#
发表于 2014-6-11 11:34:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 forele 于 2014-6-11 11:35 编辑

 全国各地已经陆续开放低空管制,北京也将在2015年全面开放低空领域,这对低空飞行器将是一个十分重大的好消息!低空飞行器也将迎来一个新的发展春天。实际上,近年四轴飞行器发展相当迅速,国内的航拍水平越来越高,顺丰及亚马逊已在尝试将无人机用于快递行业。越来越多的人开始关注并研究四轴飞行器。

本文引用地址:eepw.com.cn/article/247809.htm

  本文将分析一种常见的四轴飞行器姿态解算方法,Mahony的互补滤波法。此法简单有效,希望能给学习四轴飞行器的朋友们带来帮助。关于姿态解算和滤波的理论知识,推荐秦永元的两本书,一是《惯性导航》,目前已出到第二版了;二是《卡尔曼滤波与组合导航原理》。程序中的理论基础,可在书中寻找。
  同时欢迎到论坛发帖交流:forum.eepw.com.cn/forum/368/1
  下面开始进入正题:
  先定义Kp,Ki,以及halfT 。
  Kp,Ki,控制加速度计修正陀螺仪积分姿态的速度
  halfT ,姿态解算时间的一半。此处解算姿态速度为500HZ,因此halfT 为0.001
  #define Kp 2.0f
  #define Ki 0.002f
  #define halfT 0.001f
  初始化四元数
  float q0 = 1, q1 = 0, q2 = 0, q3 = 0;
  定义姿态解算误差的积分
  float exInt = 0, eyInt = 0, ezInt = 0;
  以下为姿态解算函数。
  参数gx,gy,gz分别对应三个轴的角速度,单位是弧度/秒;
  参数ax,ay,az分别对应三个轴的加速度原始数据
  由于加速度的噪声较大,此处应采用滤波后的数据
  void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az)
  {
  float norm;
  float vx, vy, vz;
  float ex, ey, ez;
  将加速度的原始数据,归一化,得到单位加速度
  norm = sqrt(ax*ax + ay*ay + az*az);
  ax = ax / norm;
  ay = ay / norm;
  az = az / norm;
  把四元数换算成“方向余弦矩阵”中的第三列的三个元素。根据余弦矩阵和欧拉角的定义,地理坐标系的重力向量,转到机体坐标系,正好是这三个元素。所以这里的vx、vy、vz,其实就是当前的机体坐标参照系上,换算出来的重力单位向量。(用表示机体姿态的四元数进行换算)
  vx = 2*(q1*q3 - q0*q2);
  vy = 2*(q0*q1 + q2*q3);
  vz = q0*q0 - q1*q1 - q2*q2 + q3*q3;
  这里说明一点,加速度计由于噪声比较大,而且在飞行过程中,受机体振动影响比陀螺仪明显,短时间内的可靠性不高。陀螺仪噪声小,但是由于积分是离散的,长时间的积分会出现漂移的情况,因此需要将用加速度计求得的姿态来矫正陀螺仪积分姿态的漂移。
  在机体坐标参照系上,加速度计测出来的重力向量是ax、ay、az;陀螺积分后的姿态来推算出的重力向量是vx、vy、vz;它们之间的误差向量,就是陀螺积分后的姿态和加速度计测出来的姿态之间的误差。
  向量间的误差,可以用向量积(也叫外积、叉乘)来表示,ex、ey、ez就是两个重力向量的叉积。这个叉积向量仍旧是位于机体坐标系上的,而陀螺积分误差也是在机体坐标系,而且叉积的大小与陀螺积分误差成正比,正好拿来纠正陀螺。由于陀螺是对机体直接积分,所以对陀螺的纠正量会直接体现在对机体坐标系的纠正。
  叉乘是数学基础,百度百科里有详细解释。
  ex = (ay*vz - az*vy);
  ey = (az*vx - ax*vz);
  ez = (ax*vy - ay*vx);
  将叉乘误差进行积分
  exInt = exInt + ex*Ki;
  eyInt = eyInt + ey*Ki;
  ezInt = ezInt + ez*Ki;
  用叉乘误差来做PI修正陀螺零偏,通过调节Kp,Ki两个参数,可以控制加速度计修正陀螺仪积分姿态的速度
  gx = gx + Kp*ex + exInt;
  gy = gy + Kp*ey + eyInt;
  gz = gz + Kp*ez + ezInt;
  四元数微分方程,没啥好说的了,看上面推荐的书吧,都是理论的东西,自个琢磨琢磨
  实在琢磨不明白,那就把指定的参数传进这个函数,再得到相应的四元数,最后转化成欧拉角即可了。不过建议还是把理论弄清楚一点。
  q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
  q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
  q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
  q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;
  四元数单位化
  norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
  q0 = q0 / norm;
  q1 = q1 / norm;
  q2 = q2 / norm;
  q3 = q3 / norm;
  }
  姿态解算后,就得到了表示姿态的四元数。但四元数不够直观,一般将其转化为欧拉角。转化时根据旋转轴的次序不同,公式也不同。以下给出其中一种公式:
  读完程序,深刻的意识到了理论基础的重要性。Mahony的互补滤波函数,确实很巧妙,利用叉乘误差来修正四轴的姿态,姿态解算速度越快,则解算的精度越高。在许多国内开源程序中,也是用到了这种方法。在解四元数微分方程时,该程序用到了一阶毕卡解法。同样可用于解四元数微分方程的还有龙格-库塔法,由于篇幅有限,此处就不介绍龙格-库塔法了,有兴趣的网友请自行查阅相关资料。

回复

使用道具 举报

5

主题

295

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3583

活跃会员奖章优秀会员奖章在线王奖章

威望
1705
贡献
1114
兑换币
1160
注册时间
2015-9-15
在线时间
382 小时
推荐
发表于 2016-2-24 15:27:04 | 只看该作者
好贴怎么没人顶
回复 支持 1 反对 0

使用道具 举报

79

主题

473

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
10031
QQ
威望
4406
贡献
3613
兑换币
1840
注册时间
2010-10-14
在线时间
1006 小时
2#
发表于 2014-6-11 12:56:28 | 只看该作者
不错
回复 支持 反对

使用道具 举报

20

主题

514

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4659
威望
2079
贡献
1144
兑换币
1442
注册时间
2013-9-19
在线时间
718 小时
3#
发表于 2014-6-12 09:55:35 | 只看该作者
收藏了~
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
403
威望
227
贡献
116
兑换币
86
注册时间
2012-2-27
在线时间
30 小时
毕业学校
某小学
4#
发表于 2014-7-24 14:01:24 | 只看该作者
不错
回复 支持 反对

使用道具 举报

1

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
威望
214
贡献
126
兑换币
144
注册时间
2014-5-3
在线时间
36 小时
毕业学校
重庆三峡学院
5#
发表于 2014-7-29 10:29:49 | 只看该作者
请问楼主传的参数是直接读到得数据吗?
还有就是这个测试过没啊?我使用这个还想并没有能够解算出姿态角啊!得到四元数后就用的三角函数到欧拉角!但是没有成功啊
回复 支持 反对

使用道具 举报

0

主题

239

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2214

优秀会员奖章活跃会员奖章

威望
1016
贡献
692
兑换币
680
注册时间
2013-10-8
在线时间
253 小时
6#
发表于 2014-8-23 20:55:35 | 只看该作者
楼主 你好 请问那个姿态速度hz 是怎么算的? 还有那个ki kp 怎么算的
回复 支持 反对

使用道具 举报

28

主题

2228

帖子

1

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
15817

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章资源大师奖章

QQ
威望
7430
贡献
4213
兑换币
5193
注册时间
2013-12-9
在线时间
2087 小时
7#
发表于 2015-12-9 20:49:20 | 只看该作者
不错不错
回复 支持 反对

使用道具 举报

5

主题

833

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6207

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

威望
3103
贡献
1968
兑换币
1747
注册时间
2014-5-8
在线时间
568 小时
8#
发表于 2015-12-18 10:23:05 | 只看该作者
慢慢来
回复 支持 反对

使用道具 举报

5

主题

833

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6207

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

威望
3103
贡献
1968
兑换币
1747
注册时间
2014-5-8
在线时间
568 小时
9#
发表于 2015-12-18 10:23:15 | 只看该作者
慢慢来
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-18 07:51 , Processed in 0.091480 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表