加速度计和陀螺仪指引——数学模型和基本算法
- 格式:pdf
- 大小:380.10 KB
- 文档页数:23
MEMS 加速度计和MEMS 陀螺仪区别常见MEMS
加速度传感器介绍
MEMS 加速度计和MEMS 陀螺仪区别
最大的区别就是:工作原理和应用的区别(具体概念看下百科),前者是利用加速度,后者是利用惯性;前者是用在测斜调平,后者是知道通过知道角速率,可以知道物体的姿态,以便进行姿态控制。
两种东西通常是结合到一起应用。
比如IMU(惯性测量单元):就是由三轴陀螺仪和三轴加速度计组合而成。
结合一起的原因就是:加速度计多用在静态或者匀慢速运动中,而陀螺仪应多用在动态中,而惯性器件随着时间的延长,会有零漂。
所以加速度计会给出一定的修正。
现在为了满足各种需要,有组合导航,即卫星导航和惯导组合
(GNSS/INS)。
陀螺仪和加速度计原理陀螺仪和加速度计是惯性传感器的两种常见类型,它们经常被用于测量和监测物体的运动状态。
陀螺仪测量物体的角速度,而加速度计测量物体的线性加速度。
陀螺仪的工作原理基于角动量守恒定律。
当物体绕某一轴旋转时,它具有角动量,即物体的质量乘以角速度。
陀螺仪通过使用旋转部件,如陀螺或振荡器,来测量角速度。
当物体进行旋转时,旋转部件会受到作用力,这会导致旋转部件发生位移。
通过测量位移,就可以计算物体的角速度。
然而,陀螺仪存在一个问题,即在长时间的使用中,由于摩擦和其他因素的影响,它会产生漂移,即测量值与真实值之间的误差会逐渐增加。
为了解决这个问题,通常需要使用其他传感器或算法来进行校准和修正。
与陀螺仪相比,加速度计更为简单。
加速度计的工作原理基于牛顿第二定律,即物体的加速度与施加在物体上的力成正比。
加速度计通过测量物体的加速度来确定物体的线性运动状态。
加速度计通常使用微小的弹簧系统或微机电系统(MEMS)来测量物体的加速度。
当物体发生加速或减速时,弹簧系统或MEMS传感器会受到作用力,从而引起位移。
通过测量位移,就可以计算物体的加速度。
然而,与陀螺仪类似,加速度计也存在一些问题。
例如,它对重力的感知会产生误差。
为了解决这个问题,通常需要使用其他传感器或算法来进行校准和修正。
综上所述,陀螺仪和加速度计是常见的惯性传感器,它们可以用于测量物体的角速度和线性加速度。
它们的工作原理分别基于角动量守恒定律和牛顿第二定律。
尽管它们各自具有一些问题,但在现代技术中,它们通常与其他传感器和算法结合使用,以提高测量精度和准确性。
加速度计陀螺仪姿态解算
加速度计和陀螺仪是常用的传感器,用于测量物体的加速度和角速度。
姿态解算是指根据加速度计和陀螺仪的测量值,推导出物体的姿态(即物体的旋转角度和旋转速度)。
加速度计测量的是物体的加速度,通过积分可以得到物体的速度和位移。
但是由于加速度计存在噪声和漂移等问题,长时间积分会导致误差累积,从而影响姿态解算的准确性。
陀螺仪测量的是物体的角速度,可以直接得到物体的旋转角度和旋转速度。
但是陀螺仪也存在漂移问题,即使没有旋转,陀螺仪的输出值也会有一定的变化。
为了解决加速度计和陀螺仪的问题,常常将它们结合起来进行姿态解算。
一种常用的方法是将加速度计的测量值和陀螺仪的测量值进行融合,得到更准确的姿态解算结果。
常见的融合方法有卡尔曼滤波和互补滤波。
卡尔曼滤波是一种最优估计方法,可以根据加速度计和陀螺仪的测量值,估计出物体的姿态。
互补滤波是一种简单的滤波方法,通过加权平均加速度计和陀螺仪的测量值,得到物体的姿态。
在实际应用中,还可以结合磁力计的测量值进行姿态解算,以提高解算的准确性。
磁力计可以测量物体的磁场方向,通过与加速度计和陀螺仪的测量值进行融合,
可以得到更准确的姿态解算结果。
总之,加速度计和陀螺仪的姿态解算是通过融合它们的测量值,得到物体的旋转角度和旋转速度。
融合方法可以采用卡尔曼滤波、互补滤波等,还可以结合磁力计的测量值进行进一步优化。
陀螺仪加速度计的工作原理好嘞,今天咱们聊聊陀螺仪和加速度计这俩家伙,它们可是现代科技的“顶梁柱”。
你要是觉得它们听起来高大上,那就真是小看了它们的日常工作。
想象一下,当你在玩手机游戏,手机屏幕上那些炫酷的动作、流畅的操作,背后可少不了它们的功劳。
陀螺仪就像一个聪明的导航员,它能知道你手机的倾斜角度。
比如说你横着玩游戏,陀螺仪会“呐喊”一声:嘿,别忘了,我在这里!然后,屏幕就会跟着你手机的姿势来个大变身,简直酷毙了!再说说加速度计,它可不是一个普通的计数器。
想象一下,你在坐过山车,哇,那个速度真是飞起!这时候,加速度计就开始忙活了。
它能测量你设备的加速、减速,甚至是静止状态。
要是你一不小心把手机掉到地上,加速度计马上就会告诉它:“喂,快点紧急刹车!”就像老司机一样,掌控着整个局面。
你知道吗?这东西可不是凭空冒出来的,它的原理简直像魔法一样。
说到工作原理,这就有意思了。
陀螺仪利用一个快速旋转的转子,那个转子就是它的“心脏”。
转子在旋转的时候,它的转轴会保持一个固定的方向。
想象一下,转子像个勇敢的骑士,无论周围怎么变化,它都坚持自己的立场。
这就让陀螺仪能保持方向感,不管你在什么地方。
就是这股坚持,让它在飞行器、航海等领域大展拳脚,真是神奇的玩意儿!而加速度计则是通过一种叫做“质量块”的小部件来工作的。
它就像一个小小的“游泳健将”,在加速或减速的时候,质量块会向不同的方向移动。
这个移动的过程被传感器捕捉到,结果就变成了你手机里那些好玩又神奇的运动数据。
你可以把它想象成一个在跳舞的小人儿,随着节奏变化,不断地在不同方向上舞动。
这种简单而又灵活的设计,让加速度计在智能手表、健身追踪器等设备中广泛应用。
说真的,这两者在一起,就像是一对完美的搭档,缺一不可。
陀螺仪提供方向,加速度计提供位置,它们互相配合,就能让你的手机、无人机、甚至是汽车都能在复杂的环境中保持稳定。
每次你在开车的时候,车上的陀螺仪和加速度计都在“忙活”。
陀螺仪”和“加速度计”工作原理2016-09-17 16:14:40没有夏天的四叶草修改:小马hoty 时间:2016/1/10最近看到加速度计和陀螺仪比较火,而且也有很多人都在研究。
于是也在网上淘了一个mpu6050模块,想用来做自平衡小车。
可是使用起来就发愁了。
网上关于mpu6050的资料确实不少,但是大家都是互相抄袭,然后贴出一段程序,看完之后还是不知道所以然。
经过翻阅各个方面的资料,以及自己的研究在处理mpu6050数据方面有一些心得,在这里和大家分享一下。
1、加速度和陀螺仪原理当然,在开始之前至少要弄懂什么是加速度计,什么是陀螺仪吧,否则那后边讲的都是没有意义的。
简单的说,加速度计主要是测量物体运动的加速度,陀螺仪主要测量物体转动的角速度。
这些理论的知识我就不多说了,都可以在网上查到。
这里推荐一篇讲的比较详细的文章《AGuide To using IMU (Accelerometer and Gyroscope Devices) inEmbeddedApplications》,在网上可以直接搜索到。
2、加速度测量在开始之前,不知大家是否还记得加速度具有合成定理?如果不记得可以先大概了解一下,其实简单的举个例子来说就是重力加速度可以理解成是由x,y,z三个方向的加速度共同作用的结果。
反过来说就是重力加速度可以分解成x,y,z三个方向的加速度。
加速度计可以测量某一时刻x,y,z三个方向的加速度值。
而自平衡小车利用加速度计测出重力加速度在x,y,z轴的分量,然后利用各个方向的分量与重力加速度的比值来计算出小车大致的倾角。
其实在自平衡小车上非静止的时候,加速度计测出的结果并不是非常精确。
因为大家在高中物理的时候都学过,物体时刻都会受到地球的万有引力作用产生一个向下的重力加速度,而小车在动态时,受电机的作用肯定有一个前进或者后退方向的作用力,而加速度计测出的结果是,重力加速度与小车运动加速度合成得到一个总的加速度在三个方向上的分量。
陀螺仪、加速度之我见作者:茶不思可能一个模块一个模块的讲有些啰嗦,而且这些模块的使用方法网上也有很多教程,我以后就不在说这个了.大家有问题就搜索下吧,很容易找到.我目前用到的外设有:timer,usart,iic,spi,flash,gpio,exit,暂时就这么多.今天想跟大家谈谈加速度计和陀螺仪,不少人在问加速度计陀螺仪的数据读出来了怎么用,咱们就从这两个传感器的特点开始了解下,了解了特点,用法就很容易了.以下仅代表个人观点,有哪里不对,还请指出....做个比喻吧,加速度计,以下简称加计,大家可以把它想象成一个铁块,这个铁块是个立方体,有前后左右上下六个面,每个面连接有一个弹簧,弹簧另一端假设固定在一个卡车的集装箱里面,这样这个铁块就被这六个弹簧吊在集装箱里面了,由于铁块有重力,所以汽车不动时,上面的弹簧被拉长,下面的弹簧被压缩,这里假设是通过测量弹簧的拉力来输出加速度(实际有可能是电容什么的,这里不做讨论,了解特性就好),六个弹簧,两两一组,正好3个轴,这就是3轴加速度了,静止不动时,只有Z轴也就是上下两根弹簧有读数,其他两对弹簧是平衡的.现在假设汽车在做加速运动,那么不仅仅上下两根弹簧不平衡了,前后两根弹簧也会有变化,前面的弹簧拉长,后面的弹簧压缩,就有了前后方向的加速度.左右也是一个道理.知道了加计的大致原理,那么加计有什么特点呢?让我们大家想象一种情况,就是这辆卡车行驶在颠簸的路上,集装箱里面的铁块肯定不会稳稳的吊着了,他会随着汽车左摇右摆,上下颠簸,而且有一点大家注意,铁块的此时的摆动,不是完全和汽车同步的,由于惯性等原因,铁块会在里面"乱动",荡来荡去,此时的加速度输出会是怎么样的呢?肯定也是随着铁块"荡来荡去",所以我们得出加计的一大特点,就是对震动很"敏感",如果把飞控板放在桌子上静止不动,可以说随便一个姿态算法的输出都不错,哪怕不滤波.可以当电机一转动起来,震动来了,加计就有了很大的干扰,此时如果处理不好,姿态就乱掉了.然后我们再说说陀螺仪,陀螺仪顾名思义,肯定和陀螺有很大关系,没错,特点也和陀螺一样.还是假设在这个车里面,我们放上一个小时候玩的陀螺,不管用了什么方法,让它高速旋转起来,大家都知道,这样陀螺是不会倒的,他会尽量保持当前的姿态,陀螺仪正是利用这个特点.我们看两段视频来了解下.通过视频,大家可以看到,陀螺在高速旋转时,是会尽量保持转轴不变的.那么我们就可以想到陀螺仪的特点了,就是对震动是"不敏感"的,因为它会尽量保持自己不被震动改变,但是陀螺会不断累积误差,造成"漂移".好了,这里我们知道了加计和陀螺仪的特点,再考虑怎么使用,就简单多了,总的来说就是加计短时间不可靠,因为震动,陀螺仪长时间不可靠,因为"漂移".那么对于加计的数据和陀螺仪的数据,我们就应该短时间相信陀螺仪,长时间相信加速度.好了,到了这里,再怎么做也就清晰了,对加速度的数据,我们要滤波,平均值滤波等等,方法很多,对陀螺仪数据,我们积分,短时间内,这个积分得到的角度还是准确的,而过一段时间,就用处理过的加速度数据来矫正陀螺仪积分的角度,抑制"漂移".这样利用两个传感器的特点,取长补短,来达到一个相对稳定的输出.以上都是个人看法,有什么不对还请大家指出,大家多多讨论.。
加速度计和陀螺仪指南——数学模型和基本算法本帖转自/thread-1695-1-1.html本帖翻译自IMU(加速度计和陀螺仪设备)在嵌入式应用中使用的指南。
这篇文章主要介绍加速度计和陀螺仪的数学模型和基本算法,以及如何融合这两者,侧重算法、思想的讨论.介绍本指南旨在向兴趣者介绍惯性MEMS(微机电系统)传感器,特别是加速度计和陀螺仪以及其他整合IMU(惯性测量单元)设备。
IMU单元例子:上图中MCU顶端的ACC Gyro 6DOF,名为USBThumb,支持USB/串口通信在这篇文章中我将概括这么几个基本并且重要的话题:- 加速度计(accelerometer)检测什么- 陀螺仪(gyroscope,也称作 gyro)检测什么- 如何将传感器ADC读取的数据转换为物理单位(加速度传感器的单位是g,陀螺仪的单位是度/秒)- 如何结合加速度传感器和陀螺仪的数据以得到设备和地平面之间的倾角的准确信息在整篇文章中我尽量将数学运算降低到最少。
如果你知道什么是正弦、余弦、正切函数,那无论你的项目使用哪种平台你应该都会明白和运用这篇文章中的思想,这些平台如Arduino、Propeller、Basic Stamp、Ateml芯片、PIC芯片等等。
总有些人认为使用IMU单元需要复杂的数学运算(复杂的FIR或IIR滤波,如卡尔曼滤波,Parks-McClellan滤波等)。
你如果研究这些会得到很棒且很复杂的结果。
我解释事情的方式,只需要基本的数学。
我非常坚信简单的原则。
我认为一个简单的系统更容易操作和监控,另外许多嵌入式设备并不具备能力和资源去实现需要进行矩阵运算的复杂算法。
我会用我设计的一个新IMU模块——Acc_Gyro Accelerometer + Gyro IMU作为例子。
在下面的例子中我们会使用这个设备的参数。
用这个模块作为介绍非常合适,因为它由3个设备组成:- LIS331AL (datasheet) – 3轴 2G 模拟加速度计- LPR550AL (datasheet) –双轴(俯仰、翻滚)500°/s 加速度传感器- LY550ALH (datasheet) –单轴(偏航)陀螺仪最后这个设备在这篇介绍中不使用,不过他在DCM Matrix implementation中有重要作用它们一起组成了一个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 = 586AdcRy = 630AdcRz = 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.03VVoltsRz = 561 * 3.3 / 1023 =~1.81V每个加速度计都有一个零加速度的电压值,你可以在它的说明书中找到,这个电压值对应于加速度为0g。
通过计算相对0g电压的偏移量我们可以得到一个有符号的电压值。
比方说,0g电压值 VzeroG= 1.65V,通过下面的方式可以得到相对0g电压的偏移量:DeltaVoltsRx = 1.89V - 1.65V = 0.24VDeltaVoltsRy = 2.03V - 1.65V = 0.38VDeltaVoltsRz = 1.81V - 1.65V = 0.16V现在我们得到了加速度计的电压值,但它的单位还不是g(9.8m/s^2),最后的转换,我们还需要引入加速度计的灵敏度(Sensitivity),单位通常是 mV/g。
比方说,加速度计的灵敏度 Sensitivity= 478.5mV / g = 0.4785V /g。
灵敏度值可以在加速度计说明书中找到。
要获得最后的单位为g的加速度,我们使用下列公式计算:RX = DeltaVoltsRx /SensitivityRX = 0.24V / 0.4785V / G =~0.5gRY = 0.38V / 0.4785V / G =~0.79gRZ = 0.16V / 0.4785V / G =~0.33g当然,我们可以把所有的步骤全部放在一个式子里,但我想通过介绍每一个步骤以便让你了解怎么读取一个ADC值并将其转换为单位为g的矢量力的分量。
Rx = (AdcRx * Vref / 1023 – VzeroG) / Sensitivity (公式2)Ry = (AdcRy * Vref / 1023 – VzeroG) / SensitivityRz = (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 / Rcos(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)我们花了大段的篇幅来解释加速度计模型,最后所要的只是以上这几个公式。