AHRS和imu的比较和加速度陀螺仪的融合.docx

上传人:b****5 文档编号:5024558 上传时间:2022-12-12 格式:DOCX 页数:21 大小:261.90KB
下载 相关 举报
AHRS和imu的比较和加速度陀螺仪的融合.docx_第1页
第1页 / 共21页
AHRS和imu的比较和加速度陀螺仪的融合.docx_第2页
第2页 / 共21页
AHRS和imu的比较和加速度陀螺仪的融合.docx_第3页
第3页 / 共21页
AHRS和imu的比较和加速度陀螺仪的融合.docx_第4页
第4页 / 共21页
AHRS和imu的比较和加速度陀螺仪的融合.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

AHRS和imu的比较和加速度陀螺仪的融合.docx

《AHRS和imu的比较和加速度陀螺仪的融合.docx》由会员分享,可在线阅读,更多相关《AHRS和imu的比较和加速度陀螺仪的融合.docx(21页珍藏版)》请在冰豆网上搜索。

AHRS和imu的比较和加速度陀螺仪的融合.docx

AHRS和imu的比较和加速度陀螺仪的融合

AHRS(航姿参考系统)和IMU(惯性测量单元)的区别

分类:

算法学习2014-05-2815:

12565人阅读评论(0)收藏举报

AHRS(航姿参考系统)和IMU(惯性测量单元)的区别【转】

  刚开始的时候我总是搞不清楚AHRS和 IMU的区别。

不知道这有什么区别。

后来慢慢的慢慢的,我理解了~AHRS 俗称航姿参考系统,AHRS由加速度计,磁场计,陀螺仪构成,AHRS的真正参考来自于地球的重力场和地球的磁场~~他的静态终精度取决于对磁场的测量精度和对重力的测量精度 ,而则陀螺决定了他的动态性能。

  

  这就是AHRS~在这种前提下。

说明AHRS离开了地球这种有重力和磁场环境的时候是没法正常工作的~~而且特别注意。

磁场和重力场越正交,则航姿测量效果越好~~也就是说如果磁场和重力场平行了,比如在地磁南北极。

这里的磁场是向下的,即和重量场方向相同了。

这个时候航线交是没法测出的~~这是航姿系统的缺陷所在。

在高纬度的地方航线角误差会越来越大~~

 

    (IMU)Inertialmeasurementunit,(非内蒙古大学——InnerMongoliaUniversity)学名惯性测量单元,大学的理论力学告诉我们,所有的运动都可以分解为一个直线运动和一个旋转运动,故这个惯性测量单元就是测量这两种运动,直线运动通过加速度计可以测量,旋转运动则通过陀螺。

 

  我假设IMU的陀螺和加速度计的测量是没有任何误差的~~那么通过陀螺则可以精确的测量物体的姿态。

通过加速度计可以二次积分得出位移,实现完整的6DOF,也就是说你带着一台这种理论型的IMU在宇宙任何位置运动。

我们都可以知道他当前的姿态和相对位移~~这将不局限于任何场。

 

       从上面的描述何以看出。

实际上AHRS比IMU还多一个磁场传感器,而为什么AHRS的级别却低于IMU而需要依赖于重力场和磁场呢~~这是由传感器器件架构所决定的。

AHRS的传感器通常是成本低廉的mems传感器。

这种传感器的陀螺仪和加速度计的噪声相对来说很大,以平面陀螺为例用ADI的陀螺仪进行积分一分钟会漂移2度左右,这种前提下如果没有磁场和重力场来修正三轴陀螺的话。

那么基本上3分钟以后物体的实际姿态和测量输出姿态就完全变样了~~所以在这种低价陀螺仪和加速度计的架构下必须运用场向量来进行修正~~

 

  而IMU实际上也是这样的。

因为我们知道没有绝对精确的传感器,只有相对精确的传感器,IMU的陀螺仪用的是光纤陀螺或者机械陀螺~~这种陀螺的成本很高。

精度相对mems陀螺也很高~~精度高不代表准确,

 

  IMU的姿态精度参数通常是一小时飘多少度,比如xbow的低端的有一小时3度的。

 

  而用加速度计积分做位置的话。

AHRS是不现实的(1分钟就能飘出几十米。

而且是成二次方的速度递增)。

AHRS通常要结合GPS和气压计做位置~~我听说的IMU积分做位置的是一天多少海里。

这样的一个参数数量级。

也许在海上还能用的到~~

 

  这就是AHRS和IMU在我的理解里的一个差异。

自己给自己梳理

 

  我再补充一点个人理解和博主讨论,我认为AHR和IMU的最大区别是IMU是相对于理想姿态或相对姿态的测量,AHRS是相对于大地水平的姿态测量,博主举的在宇宙中定姿态的例子就很说明问题,在宇宙中是没有固定的相对物来做姿态参考的,使用IMU来测量姿态也只能相对于飞行器的初始姿态,或理想姿态来测量和描述,AHRS是相对于大地水准面以及垂直于水准面的重力垂线来测量和描述被测物体姿态,所以在高纬度地区误差大总之,个人认为AHRS应该是IMU的一个特例应用,是IMU应用的一个子集

 

【感谢】

加速度计和陀螺仪指南

分类:

算法学习2014-05-2911:

19647人阅读评论(0)收藏举报

写得太好了,又忍不住转载了!

原文的地址:

http:

//www.geek- 

本帖翻译自IMU(加速度计和陀螺仪设备)在嵌入式应用中使用的指南。

这篇文章主要介绍加速度计和陀螺仪的数学模型和基本算法,以及如何融合这两者,侧重算法、思想的讨论

介绍

本指南旨在向兴趣者介绍惯性MEMS(微机电系统)传感器,特别是加速度计和陀螺仪以及其他整合IMU(惯性测量单元)设备。

 

IMU单元例子:

上图中MCU顶端的ACCGyro6DOF,名为USBThumb,支持USB/串口通信

在这篇文章中我将概括这么几个基本并且重要的话题:

-加速度计(accelerometer)检测什么

-陀螺仪(gyroscope,也称作gyro)检测什么

-如何将传感器ADC读取的数据转换为物理单位(加速度传感器的单位是g,陀螺仪的单位是度/秒)

-如何结合加速度传感器和陀螺仪的数据以得到设备和地平面之间的倾角的准确信息

在整篇文章中我尽量将数学运算降低到最少。

如果你知道什么是正弦、余弦、正切函数,那无论你的项目使用哪种平台你应该都会明白和运用这篇文章中的思想,这些平台如Arduino、Propeller、BasicStamp、Ateml芯片、PIC芯片等等。

总有些人认为使用IMU单元需要复杂的数学运算(复杂的FIR或IIR滤波,如卡尔曼滤波,Parks-McClellan滤波等)。

你如果研究这些会得到很棒且很复杂的结果。

我解释事情的方式,只需要基本的数学。

我非常坚信简单的原则。

我认为一个简单的系统更容易操作和监控,另外许多嵌入式设备并不具备能力和资源去实现需要进行矩阵运算的复杂算法。

我会用我设计的一个新IMU模块——Acc_GyroAccelerometer+GyroIMU作为例子。

在下面的例子中我们会使用这个设备的参数。

用这个模块作为介绍非常合适,因为它由3个设备组成:

-LIS331AL(datasheet)–3轴2G模拟加速度计

-LPR550AL(datasheet)–双轴(俯仰、翻滚)500°/s加速度传感器

-LY550ALH(datasheet)–单轴(偏航)陀螺仪最后这个设备在这篇介绍中不使用,不过他在 DCMMatriximplementation中有重要作用

它们一起组成了一个6自由度的惯性测量单元。

这是个花哨的名字!

然而,在花哨的名字后面是个非常有用的设备组合,接下来我们会详细介绍之。

第一部分加速度计

要了解这个模块我们先从加速度计开始。

当我们在想象一个加速度计的时候我们可以把它想作一个圆球在一个方盒子中。

你可能会把它想作一个饼干或者甜圈,但我就把它当做一个球好了:

 

我们假定这个盒子不在重力场中或者其他任何会影响球的位置的场中,球处于盒子的正中央。

你可以想象盒子在外太空中,远离任何天体,如果很难想象,那就当做盒子在航天飞机中,一切东西都处于无重力状态。

在上面的图中你可以看到我们给每个轴分配了一对墙(我们移除了Y+以此来观察里面的情况)。

设想每面墙都能感测压力。

如果我们突然把盒子向左移动(加速度为1g=9.8m/s^2),那么球会撞上X-墙。

然后我们检测球撞击墙面产生的压力,X轴输出值为-1g。

 

请注意加速度计检测到得力的方向与它本身加速度的方向是相反的。

这种力量通常被称为惯性力或假想力 。

在这个模型中你你应该学到加速度计是通过间接测量力对一个墙面的作用来测量加速度的,在实际应用中,可能通过弹簧等装置来测量力。

这个力可以是加速度引起的,但在下面的例子中,我们会发现它不一定是加速度引起的。

如果我们把模型放在地球上,球会落在Z-墙面上并对其施加一个1g的力,见下图:

 

在这种情况下盒子没有移动但我们任然读取到Z轴有-1g的值。

球在墙壁上施加的压力是由引力造成的。

在理论上,它可以是不同类型的力量-例如,你可以想象我们的球是铁质的,将一个磁铁放在盒子旁边那球就会撞上另一面墙。

引用这个例子只是为了说明加速度计的本质是检测力而非加速度。

只是加速度所引起的惯性力正好能被加速度计的检测装置所捕获。

虽然这个模型并非一个MEMS传感器的真实构造,但它用来解决与加速度计相关的问题相当有效。

实际上有些类似传感器中有金属小球,它们称作倾角开关,但是它们的功能更弱,只能检测设备是否在一定程度内倾斜,却不能得到倾斜的程度。

到目前为止,我们已经分析了单轴的加速度计输出,这是使用单轴加速度计所能得到的。

三轴加速度计的真正价值在于它们能够检测全部三个轴的惯性力。

让我们回到盒子模型,并将盒子向右旋转45度。

现在球会与两个面接触:

Z-和X-,见下图:

 

0.71g这个值是不是任意的,它们实际上是1/2的平方根的近似值。

我们介绍加速度计的下一个模型时这一点会更清楚。

在上一个模型中我们引入了重力并旋转了盒子。

在最后的两个例子中我们分析了盒子在两种情况下的输出值,力矢量保持不变。

虽然这有助于理解加速度计是怎么和外部力相互作用的,但如果我们将坐标系换为加速度的三个轴并想象矢量力在周围旋转,这会更方便计算。

 

请看看在上面的模型,我保留了轴的颜色,以便你的思维能更好的从上一个模型转到新的模型中。

想象新模型中每个轴都分别垂直于原模型中各自的墙面。

矢量R是加速度计所检测的矢量(它可能是重力或上面例子中惯性力的合成)。

RX,RY,RZ是矢量R在X,Y,Z上的投影。

请注意下列关系:

,R^2=RX^2+RY^2+RZ^2(公式1)

此公式等价于三维空间勾股定理。

还记得我刚才说的1/2的平方根0.71不是个随机值吧。

如果你把它们代回上式,回顾一下重力加速度是1g,那我们就能验证:

1^2=(SQRT(1/2))^2+0^2+(SQRT(1/2))^2

在公式1中简单的取代:

R=1,Rx=-SQRT(1/2),Ry=0,Rz=-SQRT(1/2)

经过一大段的理论序言后,我们和实际的加速度计很靠近了。

RX,RY,RZ值是实际中加速度计输出的线性相关值,你可以用它们进行各种计算。

在我们运用它之前我们先讨论一点获取加速度计数据的方法。

大多数加速度计可归为两类:

数字和模拟。

数字加速度计可通过I2C,SPI或USART方式获取信息,而模拟加速度计的输出是一个在预定范围内的电压值,你需要用ADC(模拟量转数字量)模块将其转换为数字值。

我将不会详细介绍ADC是怎么工作的,部分原因是这是个很广的话题,另一个原因是不同平台的ADC都会有差别。

有些MCU具有内置ADC模块,而有些则需要外部电路进行ADC转换。

不管使用什么类型的ADC模块,你都会得到一个在一定范围内的数值。

例如一个10位ADC模块的输出值范围在0..1023间,请注意,1023=2^10-1。

一个12位ADC模块的输出值范围在0..4095内,注意,4095=2^12-1。

我们继续,先考虑下一个简单的例子,假设我们从10位ADC模块得到了以下的三个轴的数据:

AdcRx=586

AdcRy=630

AdcRz=561

每个ADC模块都有一个参考电压,假设在我们的例子中,它是3.3V。

要将一个10位的ADC值转成电压值,我们使用下列公式:

VoltsRx=AdcRx*VREF/1023

小注:

8位ADC的最大值是255=2^8-1,12位ADC最大值是4095=2^12-1。

将3个轴的值代入上式,得到:

VoltsRx=586*3.3/1023=~1.89V(结果取两位小数)

VoltsRy=630*3.3/1023=~2.03V

VoltsRz=561*3.3/1023=~1.81V

每个加速度计都有一个零加速度的电压值,你可以在它的说明书中找到,这个电压值对应于加速度为0g。

通过计算相对0g电压的偏移量我们可以得到一个有符号的电压值。

比方说,0g电压值VzeroG=1.65V,通过下面的方式可以得到相对0g电压的偏移量:

DeltaVoltsRx=1.89V-1.65V=0.24V

DeltaVoltsRy=2.03V-1.65V=0.38V

DeltaVoltsRz=1.81V-1.65V=0.16V

现在我们得到了加速度计的电压值,但它的单位还不是g(9.8m/s^2),最后的转换,我们还需要引入加速度计的灵敏度(Sensitivity),单位通常是mV/g。

比方说,加速度计的灵敏度Sensitivity=478.5mV/g=0.4785V/g。

灵敏度值可以在加速度计说明书中找到。

要获得最后的单位为g的加速度,我们使用下列公式计算:

RX=DeltaVoltsRx/Sensitivity

RX=0.24V/0.4785V/G=~0.5g

RY=0.38V/0.4785V/G=~0.79g

RZ=0.16V/0.4785V/G=~0.33g

当然,我们可以把所有的步骤全部放在一个式子里,但我想通过介绍每一个步骤以便让你了解怎么读取一个ADC值并将其转换为单位为g的矢量力的分量。

Rx=(AdcRx*Vref/1023–VzeroG)/Sensitivity (公式2)

Ry=(AdcRy*Vref/1023–VzeroG)/Sensitivity

Rz=(AdcRz*Vref/1023–VzeroG)/Sensitivity

现在我们得到了惯性力矢量的三个分量,如果设备除了重力外不受任何外力影响,那我们就可以认为这个方向就是重力矢量的方向。

如果你想计算设备相对于地面的倾角,可以计算这个矢量和Z轴之间的夹角。

如果你对每个轴的倾角都感兴趣,你可以把这个结果分为两个分量:

X轴、Y轴倾角,这可以通过计算重力矢量和X、Y轴的夹角得到。

计算这些角度比你想象的简单,现在我们已经算出了Rx,Ry,Rz的值,让我们回到我们的上一个加速度模型,再加一些标注上去:

 

我们感兴趣的角度是向量R和X,Y,Z轴之间的夹角,那就令这些角度为Axr,Ayr,Azr。

观察由R和Rx组成的直角三角形:

cos(Axr)=Rx/R,类似的:

cos(Ayr)=Ry/R

cos(Azr)=Rz/R

从公式1我们可以推导出R=SQRT(Rx^2+Ry^2+Rz^2)

通过arccos()函数(cos()的反函数)我们可以计算出所需的角度:

Axr=arccos(Rx/R)

Ayr=arccos(Ry/R)

Azr=arccos(Rz/R)

我们花了大段的篇幅来解释加速度计模型,最后所要的只是以上这几个公式。

根据你的应用场合,你可能会用到我们推导出来的几个过渡公式。

我们接下来要介绍陀螺仪模块,并向大家介绍怎么融合加速度计和陀螺仪的数据以得到更精确的倾角值。

但在此之前,我们再介绍几个很常用的公式:

cosX=cos(Axr)=Rx/R

cosY=cos(Ayr)=Ry/R

cosZ=cos(Azr)=Rz/R

这三个公式通常称作方向余弦 ,它主要表达了单位向量(长度为1的向量)和R向量具有相同的方向。

你可以很容易地验证:

SQRT(cosX^2+COSY^2+cosZ^2)=1

这是个很好的性质,因为它避免了我们一直检测R向量的模(长度)。

通常如果我们只是对惯性力的方向感兴趣,那标准化模长以简化其他计算是个明智的选择。

第二部分陀螺仪

对于陀螺仪我们将不会像加速度计一样介绍它的等价盒子模型,而是直接跳到加速度计的第二个模型,通过这个模型我们会向大家介绍陀螺仪是怎么工作的。

 

陀螺仪的每个通道检测一个轴的旋转。

例如,一个2轴陀螺仪检测绕X和Y轴的旋转。

为了用数字来表达这些旋转,我们先引进一些符号。

首先我们定义:

Rxz–惯性力矢量R在XZ平面上的投影

Ryz–惯性力矢量R在YZ平面的上投影

在由Rxz和Rz组成的直角三角形中,运用勾股定理可得:

Rxz^2=Rx^2+Rz^2,同样:

Ryz^2=Ry^2+Rz^2

同时注意:

R^2=Rxz^2+Ry^2,这个公式可以公式1和上面的公式推导出来,也可由R和Ryz所组成的直角三角形推导出来

R^2=Ryz^2+RX^2

在这篇文章中我们不会用到这些公式,但知道模型中的那些数值间的关系有助于理解。

相反,我们按如下方法定义Z轴和Rxz、Ryz向量所成的夹角:

AXZ-Rxz(矢量R在XZ平面的投影)和Z轴所成的夹角

AYZ-Ryz(矢量R在YZ平面的投影)和Z轴所成夹角

现在我们离陀螺仪要测量的东西又近了一步。

陀螺仪测量上面定义的角度的变化率。

换句话说,它会输出一个与上面这些角度变化率线性相关的值。

为了解释这一点,我们先假设在t0时刻,我们已测得绕Y轴旋转的角度(也就是Axz),定义为Axz0,之后在t1时刻我们再次测量这个角度,得到Axz1。

角度变化率按下面方法计算:

RateAxz=(Axz1–Axz0)/(t1–t0).

如果用度来表示角度,秒来表示时间,那这个值的单位就是度/秒。

这就是陀螺仪检测的东西。

在实际运用中,陀螺仪一般都不会直接给你一个单位为度/秒的值(除非它是个特殊的数字陀螺仪)。

就像加速度计一样,你会得到一个ADC值并且要用类似公式2的式子将其转换成单位为度/秒的值。

让我们来介绍陀螺仪输出值转换中的ADC部分(假设使用10位ADC模块,如果是8位ADC,用1023代替255,如果是12为ADC用4095代替1023)。

RateAxz=(AdcGyroXZ*Vref/1023–VzeroRate)/Sensitivity 公式3

RateAyz=(AdcGyroYZ*Vref/1023–VzeroRate)/Sensitivity

AdcGyroXZ,AdcGyroYZ-这两个值由ADC读取,它们分别代表矢量R的投影在XZ和YZ平面内里的转角,也可等价的说,旋转可分解为单独绕Y和X轴的运动。

Vref–ADC的参考电压,上例中我们使用3.3V

VzeroRate–是零变化率电压,换句话说它是陀螺仪不受任何转动影响时的输出值,对AccGyro板来说,可以认为是1.23V(此值通常可以在说明书中找到——但千万别相信这个值,因为大多数的陀螺仪在焊接后会有一定的偏差,所以可以使用电压计测量每个通道的输出值,通常这个值在焊接后就不会改变,如果有跳动,在设备使用前写一个校准程序对其进行测量,用户应当在设备启动的时候保持设备静止以进行校准)。

Sensitivity–陀螺仪的灵敏度,单位mV/(deg/s),通常写作mV/deg/s,它的意思就是如果旋转速度增加1°/s,陀螺仪的输出就会增加多少mV。

Acc_Gyro板的灵敏度值是2mV/deg/s或0.002V/deg/s

让我们举个例子,假设我们的ADC模块返回以下值:

AdcGyroXZ=571

AdcGyroXZ=323

用上面的公式,在代入AccGyro板的参数,可得:

RateAxz=(571*3.3V/1023–1.23V)/(0.002V/deg/s)=~306deg/s

RateAyz=(323*3.3V/1023–1.23V)/(0.002V/deg/s)=~-94deg/s

换句话说设备绕Y轴(也可以说在XZ平面内)以306°/s速度和绕X轴(或者说YZ平面内)以-94°/s的速度旋转。

请注意,负号表示该设备朝着反方向旋转。

按照惯例,一个方向的旋转是正值。

一份好的陀螺仪说明书会告诉你哪个方向是正的,否则你就要自己测试出哪个旋转方向会使得输出脚电压增加。

最好使用示波器进行测试,因为一旦你停止了旋转,电压就会掉回零速率水平。

如果你使用的是万用表,你得保持一定的旋转速度几秒钟并同时比较电压值和零速率电压值。

如果值大于零速率电压值那说明这个旋转方向是正向。

第三部分将它们综合起来。

融合加速度计和陀螺仪的数据。

如果你在阅读这篇文章你可能已经有了或准备购买一个IMU设备,或者你准备用独立的加速度计和陀螺仪搭建一个。

注:

具体的代码实现和算法测试,请阅读这篇文章:

在使用整合了加速度计和陀螺仪的IMU设备时,首先要做的就是统一它们的坐标系。

最简单的办法就是将加速度计作为参考坐标系。

大多数的加速度计技术说明书都会指出对应于物理芯片或设备的XZY轴方向。

例如,下面就是AccGyro板的说明书中给出的XYZ轴方向:

 

接下来的步骤是:

-确定陀螺仪的输出对应到上述讨论的RateAxz,RateAyz值。

-根据陀螺仪和加速度计的位置决定是否要反转输出值

不要设想陀螺仪陀的输出有XY,它会适应加速度计坐标系里的任何轴,尽管这个输出是IMU模块的一部分。

最好的办法就是测试。

接下来的示例用来确定哪个陀螺仪的输出对应RateAxz。

-首先将设备保持水平。

加速度计的XY轴输出会是零加速度电压(AccGyro板的值是1.65V)

-接下来将设备绕Y轴旋转,换句话说就是将设备在XZ平面内旋转,所以X、Z的加速度输出值会变化而Y轴保持不变。

-当以匀速旋转设备的时候,注意陀螺仪的哪个通道输出值变化了,其他输出应该保持不变。

-在陀螺仪绕Y轴旋转(在XZ平面内旋转)的时候输出值变化的就是AdcGyroXZ,用于计算RateAxz

-最后一步,确认旋转的方向是否和我们的模型对应,因为陀螺仪和加速度的位置关系,有时候你可能要把RateAxz值反向

-重复上面的测试,将设备绕Y轴旋转,这次查看加速度计的X轴输出(也就是AdcRx)。

如果AdcRx增大(从水平位置开始旋转的第一个90°),那AdcGyroXZ应当减小。

这是因为我们观察的是重力矢量,当设备朝一个方向旋转时矢量会朝相反的方向旋转(相对坐标系运动)。

所以,如果你不想反转RateAxz,你可以在公式3中引入正负号来解决这个问题:

RateAxz=InvertAxz*(AdcGyroXZ*Vref/1023–VzeroRate)/Sensitivity,其中InvertAxz=1或-1

同样的方法可以用来测试RateAyz,将设备绕X轴旋转,你就能测出陀螺仪的哪个输出对应于RateAyz,以及它是否需要反转。

一旦你确定了InvertAyz,你就能可以用下面的公式来计算RateAyz:

RateAyz=InvertAyz*(AdcGyroYZ*Vref/1023–VzeroRate)/Sensitivity

如果对AccGyro板进行这些测试,你会得到下面的这些结果:

-RateAxz的输出管脚是GX4,InvertAxz=1

-RateAyz输出管脚是GY4,InvertAyz=1

从现在开始我们认为你已经设置好了IMU模块并能计算出正确的Axr,Ayr,Azr值(在第一部分加速度计中定义)以及RateAyz,RateAyz(在

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1