近两年来,车联网、自动驾驶、无人驾驶、汽车智能化、网联化等成为了汽车行业的热点话题,未来汽车一定是朝着安全、可靠及舒适的方向发展。而这一切背后的发展都离不开传感器的作用,今天我们就来聊聊用途越来越广的惯性传感器——IMU。
一、惯性传感器(IMU)简介
IMU全称Inertial Measurement Unit,惯性测量单元,主要用来检测和测量加速度与旋转运动的传感器。其原理是采用惯性定律实现的,这些传感器从超小型的的MEMS传感器,到测量精度非常高的激光陀螺,无论尺寸只有几个毫米的MEMS传感器,到直径几近半米的光纤器件采用的都是这一原理。

最基础的惯性传感器包括加速度计和角速度计(陀螺仪),他们是惯性系统的核心部件,是影响惯性系统性能的主要因素。尤其是陀螺仪其漂移对惯导系统的位置误差增长的影响是时间的三次方函数。而高精度的陀螺仪制造困难,成本高昂。因此提高陀螺仪的精度、同时降低其成本也是当前追求的目标。
陀螺仪的发展趋势:



随着微电子技术的发展,出现了新型的惯性传感器微机械陀螺仪和加速度计。MEMS(Micro-Electro-Mechanical System,微机电系统/微电子机械系统)技术传感器也逐渐演变成为汽车传感器的主要部件。本文这里重点介绍MEMS的六轴惯性传感器。它主要由三个轴加速度传感器及三个轴的陀螺仪组成。
二、MEMS惯性传感器分级、组成及原理
1、MEMS惯性传感器分级

目前不管是传统汽车还是自动驾驶汽车用的惯性传感器通常是中低级的,其特点是更新频率高(通常为:1kHz),可提供实时位置信息。但它有个致命的缺点——他的误差会随着时间的推进而增加,所以只能在很短的时间内依赖惯性传感器进行定位。通常在自动驾驶车辆中与GNSS(全球导航卫星系统)配合一起使用,称为组合惯导。
2、MEMS惯性传感器组成及原理
惯性传感器是对物理运动做出反应的器件,如线性位移或角度旋转,并将这种反应转换成电信号,通过电子电路进行放大和处理。加速度计和陀螺仪是最常见的两大类MEMS惯性传感器。加速度计是敏感轴向加速度并转换成可用输出信号的传感器;陀螺仪是能够敏感运动体相对于惯性空间的运动角速度的传感器。三个MEMS加速度计和三个MEMS陀螺仪组合形成可以敏感载体3个方向的线加速度和3个方向的加速度的微型惯性测量组合(Micro Inertial Messurement Unit,MIMU),惯性微系统利用三维异构集成技术,将MEMS加速度计、陀螺仪、压力传感器、磁传感器和信号处理电路等功能零件集成在硅芯片内,并内置算法,实现芯片级制导、导航、定位等功能。
(1)MEMS加速度计
MEMS加速度计是MEMS领域最早开始研究的传感器之一。经过多年的发展,MEMS加速度计的设计和加工技术已经日趋成熟。

上图为MEMS加速度计,它的工作原理就是靠MEMS中可移动部分的惯性。由于中间电容板的质量很大,而且它是一种悬臂构造,当速度变化或者加速度达到足够大时,它所受到的惯性力超过固定或者支撑它的力,这时候它会移动,它跟上下电容板之间的距离就会变化,上下电容就会因此变化。电容的变化跟加速度成正比。根据不同测量范围,中间电容板悬臂构造的强度或者弹性系数可以设计得不同。还有如果要测量不同方向的加速度,这个MEMS的结构会有很大的不同。电容的变化会被另外一块专用芯片转化成电压信号,有时还会把这个电压信号放大。电压信号在数字化后经过一个数字信号处理过程,在零点和灵敏度校正后输出。
加速度计还有一个自测试功能。当它刚通电时,逻辑控制会向自测试电路发出命令。自测试电路产生一个直流电压加载到MEMS芯片的自测试电路板上,中间可活动电容板就会因静电吸引而下移。接下来的处理过程跟测试真的加速度一样。
目前,国外众多研究机构和惯性器件厂商都开展了MEMS加速度计技术研究,如美国的Draper实验室、Michigan大学、加州大学Berkley分校、瑞士Neuchatel大学、美国Northrop Grumman Litton公司、Honeywell公司、ADI、Silicon Designs、Silicon Sensing、Endevco公司、瑞士的Colibrys公司、英国的BAE公司等。
其中,以Draper实验室为代表的研究机构和大学的主要工作在于提升MEMS加速度计的技术指标。能够提供实用化MEMS加速度计产品的主要厂家有ADI、Silicon Designs、Silicon Sensing、Endevco和瑞士的Colibrys公司。
(2)MEMS陀螺仪角速度计
自20世纪80年代以来,对角速率敏感的MEMS陀螺仪角速度计受到越来越多的关注。根据性能指标,MEMS陀螺仪同样可以分为三级:速率级、战术级和惯性级。速率级陀螺仪可用于消费类电子产品、手机、数码相机、游戏机和无线鼠标;战术级陀螺仪适用于工业控制、智能汽车、火车、汽船等领域;惯性级陀螺仪可用于卫星、航空航天的导航、制导和控制。

上图为MEMS陀螺仪角速度计(MEMS gyroscope),其工作原理是利用角动量守恒原理及科里奥效应测量运动物体的角速率。它主要是一个不停转动的物体,它的转轴指向不随承载它的支架的旋转而变化。
与加速度计工作原理相似,陀螺仪的上层活动金属与下层金属形成电容。当陀螺仪转动时,他与下面电容板之间的距离机会发生变化,上下电容也就会因此而改变。电容的变化跟角速度成正比,由此我们可以测量当前的角速度。
据不完全统计,研究MEMS陀螺仪的机构如下:斯坦福大学、密歇根大学、加州大学伯克利分校、欧文、洛杉矶、中东技术大学、弗莱堡大学、南安普敦大学、首尔国立大学、根特大学、清华大学、北京大学、东南大学、上海交通大学、浙江大学、博世、ST、InvenSense、NXP、ADI、TI等。
(3)惯性传感器的误差问题
由于制作工艺的原因,惯性传感器测量的数据通常都会有一定误差。第一种误差是偏移误差,也就是陀螺仪和加速度计即使在没有旋转或加速的情况下也会有非零的数据输出。要想得到位移数据,我们需要对加速度计的输出进行两次积分。在两次积分后,即使很小的偏移误差会被放大,随着时间推进,位移误差会不断积累,最终导致我们没法再跟踪物体的位置。第二种误差是比例误差,所测量的输出和被检测输入的变化之间的比率。与偏移误差相似,在两次积分后,随着时间推进,其造成的位移误差也会不断积累。第三种误差是背景白噪声,如果不给予纠正,也会导致我们没法再跟踪物体的位置。
三、惯性传感器应用
惯性传感器能够为车辆中的所有控制单元提供车辆的即时运动状态。路线偏移,纵向横向的摆动角速度,以及纵向、横向和垂直加速度等信号被准确采集,并通过标准接口传输至数据总线。所获得的信号用于复杂的调节算法,以增强乘用车和商用车(例如,ESC/ESP、ADAS、AD)以及摩托车(优化的曲线 ABS)、工业车辆和农用车的舒适性与安全应用,如下图示。

在无人车方面的应用多与GPS或者GNSS组合使用,如下图示:

四、MEMS惯性传感器的发展
未来MEMS惯性传感器的发展主要有四个方向:
1、高精度
导航、自动驾驶和个人穿戴设备等对惯性传感器的精度需求逐渐提高,精细化测量需求和智能化的发展也对传感器的精度提出了越来越高的要求。
2、微型化
器件的微型化可以实现设备便携性,满足分布式应用要求。微型化是未来智能传感设备的发展趋势,是实现万物互联的基础。
3、高集成度
无论是惯性测量单元还是惯性微系统都是为了提高器件的集成度,进而实现在更小的体积内具备更多的测量功能,满足装备小体积、低功耗、多功能的需求。
4、适应性强
随着MEMS惯性传感器的应用范围越来越广泛,工作环境也会越来越复杂,例如:高温、高压、大惯量和高冲击等,适应复杂环境能够进一步拓宽MEMS惯性传感器的应用范围。
本文系网络转载,版权归原作者所有。
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or