当前位置:首页 > 工业控制 > 工业控制
[导读] 全国各地已经陆续开放低空管制,北京也将在2015年全面开放低空领域,这对低空飞行器将是一个十分重大的好消息!低空飞行器也将迎来一个新的发展春天。实际上,近年四轴飞行器发展相当迅速,国内的航拍水平越来越高,

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

本文将分析一种常见的四轴飞行器姿态解算方法,Mahony的互补滤波法。此法简单有效,希望能给学习四轴飞行器的朋友们带来帮助。关于姿态解算和滤波的理论知识,推荐秦永元的两本书,一是《惯性导航》,目前已出到第二版了;二是《卡尔曼滤波与组合导航原理》。程序中的理论基础,可在书中寻找。

下面开始进入正题:

先定义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的互补滤波函数,确实很巧妙,利用叉乘误差来修正四轴的姿态,姿态解算速度越快,则解算的精度越高。在许多国内开源程序中,也是用到了这种方法。在解四元数微分方程时,该程序用到了一阶毕卡解法。同样可用于解四元数微分方程的还有龙格-库塔法,由于篇幅有限,此处就不介绍龙格-库塔法了,有兴趣的网友请自行查阅相关资料。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

随着科技的不断进步,6轴传感器在现代机器人技术、航空航天、汽车工程等领域的应用越来越广泛。它能够提供三维空间中的线性加速度和角速度信息,为各种精密控制和导航提供关键数据。本文将详细探讨6轴传感器的工作原理、组成部分、应用...

关键字: 6轴传感器 加速度计 陀螺仪

随着现代科技的不断进步,传感器技术已成为众多领域不可或缺的关键要素。其中,六轴传感器以其独特的功能和广泛的应用场景,逐渐成为了传感器领域中的佼佼者。本文将对六轴传感器的优势进行深入探讨,并分析其在不同领域的应用前景。

关键字: 陀螺仪 六轴传感器 加速度计

在不断发展的工程和技术进步的环境中,精度和性能至关重要。ADI为工业自动化、医疗、汽车、通信系统等各个各领域提供广泛产品,从高性能加速度计和多功能模拟开关到精密的射频(RF)放大器和微机电系统(MEMS)开关,这些产品提...

关键字: 加速度计 放大器 微机电系统开关

北京2023年8月31日 /美通社/ -- 进入2023年,ChatGPT推动世界步入一个全新时代——大模型时代,它不仅引发了AI产业的整体升级换代,同时也让各种大模型层出不穷,背后的关键原因在于,大模型能普遍提升生产力...

关键字: 模型 向量 开源 GP

陀螺仪又叫角速度传感器,是不同于加速度计(G-sensor)的,他的测量物理量是偏转、倾斜时的转动角速度。螺旋仪是一种用来传感与维持方向的装置,基于角动量守恒的理论设计出来的。陀螺仪主要是由一个位于轴心且可旋转的转子构成...

关键字: 手机应用 陀螺仪

MEMS陀螺仪即硅微机电陀螺仪,绝大多数的MEMS陀螺仪依赖于相互正交的振动和转动引起的交变科里奥利力。MEMS (Micro-Electro-Mechanical Systems)是指集机械元素、微型传感器、微型执行器...

关键字: 陀螺仪 角速率测试

MEMS(Micro Electro Mechanical Systems)加速度计就是使用MEMS技术制造的加速度计。由于采用了微机电系统技术,使得其尺寸大大缩小,一个MEMS加速度计只有指甲盖的几分之一大小。MEMS...

关键字: MEMS 加速度计

加速度计是一种惯性传感器,能够测量物体的加速力。加速力就是当物体在加速过程中作用在物体上的力,就比如地球引力,也就是重力。加速力可以是个常量,比如g,也可以是变量。MEMS(Micro Electro Mechanica...

关键字: MEMS 加速度计

硅微加速度传感器是MEMS器件中的一个重要分支,具有十分广阔的应用前景。由于硅微加速度传感器具有响应快、灵敏度高、精度高、易于小型化等优点,而且 该种传感器在强辐射作用下能正常工作,使其近年来发展迅速。Mems的加速度计...

关键字: MEMS 加速度计

瓦尔登堡(德国),2023 年 5 月 24 日 — 伍尔特电子进一步扩充其 MEMS 紧凑型传感器产品系列,配备 3 轴加速度计并集成陀螺仪。WSEN-ISDS 有多种测量范围和数据速率可以选择,因此用途非常广泛。这款...

关键字: 运动传感器 加速计 陀螺仪
关闭
关闭