0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

IMU为嵌入式应用提供更精细的定位分辨率

电子设计 来源:郭婷 作者:电子设计 2019-01-17 08:40 次阅读

全球导航卫星系统 (GNSS) 非常有用,能够定位全球任意位置已正确启用此功能的系统,但仅仅使用 GNSS 接收器进行定位也存在一些问题。使用惯性测量装置 (IMU) 对 GNSS 进行补充,则可以克服这些问题。

IMU 采用陀螺仪加速计和磁力仪,基于初始起点测量位置。本文将讨论它的嵌入式应用,然后再介绍一些适当的解决方案示例以及使用方法。

IMU 如何补充 GNSS

GNSS 存在四个问题。首先,GNSS 信号具有很强的指向性,因此会被建筑物遮挡。其次,接收器有几十秒到一分钟甚至更长时间的热启动和冷启动时间。接收器需要利用启动时间采集并锁定定位所需的多个卫星信号。

第三,GNSS 的位置更新率被限制为每秒一次。这对追踪缓慢移动的大型物体而言没有问题,但对许多嵌入式应用而言,启动时间太长而且更新率太慢。第四,GNSS 精确到米,对于大多数嵌入式应用而言不够精确。这类应用种类繁多,例如不涉及地面交通的机器人和虚拟现实等。

IMU 提供了许多嵌入式应用所需的更精细的定位分辨率和更快的更新率。并且,和 GNSS 接收器提供绝对定位信息相反,IMU 提供距离已知起点的相对位置信息,因此这两种位置传感器可互为补充。

现代电子 IMU 以板安装电子元件的方式提供,以微机电系统 (MEMS) 技术为基础,因此体积小、重量轻且相对坚固。它们具有可变的自由度 (DOF) 能力,而且与 GNSS 接收器不同,IMU 不依赖无线电信号。IMU 的耗电量极低,可通过各种供应源获取具有广泛分辨率和精度的产品

借助这些特性,IMU 可用于增强 GNSS 接收器的定位信息。(请参阅“使用 GNSS 模块快速设计位置跟踪系统”。)

IMU 剖析

运动传感器对物理运动做出响应并进行检测,包括加速度、移动速率或距离等参数。惯性传感器是一种特殊的运动传感器。IMU 将各种运动传感器集成到一个器件中,可提供高精度定位信息。它们对传感器自身的运动做出响应。

IMU 整合了以下一种或多种运动传感器类型:

陀螺仪传感器测量角度位置变化,通常以每秒度数表示。随时间进行角速率积分可测得行程角度,用于追踪方向变化。陀螺仪传感器提供一个、两个或三个轴,分别对应俯仰角、翻滚角和偏航角。陀螺仪追踪与重力无关的相对运动,因此传感器偏置或积分误差会造成称为“漂移”的位置误差。

加速计传感器测量线性加速度,包括设备运动造成的加速度分量和重力造成的加速度。加速度以 G 为单位,是地球重力(1 G = 9.8 米/秒2)的倍数。加速计提供一个、两个或三个轴,分别定义 X、Y、Z 坐标系。通过计算测得的器件角度并进行重力补偿,可使用加速计数据来测量静态设备方向。复杂运动周期会令方向计算变得复杂。

磁传感器测量磁场强度,通常以微特斯拉 (µT) 或高斯(100 µT = 1 高斯)为单位。移动电子设备中最常用的磁传感器是三轴霍尔效应磁力仪。根据地理位置,地球磁场幅度介于 25 到 65 µT 之间,且倾斜角度各不同。就美国大陆而言,强度介于 45 到 55 µT 之间,角度为 50 - 80 度。通过计算检测到的地球磁场角度,并将此测量的角度与加速计测量的重力进行比较,即可非常精确地测量出设备相对于地磁北极的航向。要获得正北航向,还需要根据当前经纬度进行调节。

压力传感器测量差压或绝对压力,单位通常为百帕 (hPa) 或毫巴 (mbar),二者等效。海平面标准气压定义为 1013.25 hPa。海拔高度变化会导致检测到的环境气压发生相应变化,可用于追踪垂直运动。

使用 IMU 的运动追踪采用传感器融合,根据已知的起点和方向,推导单一、高精度的相对设备方向和位置估计值。传感器融合涉及使用 IMU 制造商或应用开发人员开发的复杂数学算法来组合 IMU 的各种运动传感器输出。使用传感器融合进行位置计算可得到以下测量结果:

重力 – 具体而言地球重力,且不含设备感应到的由运动造成的加速度。当 IMU 静止时,加速计测量重力矢量。当 IMU 运动时,重力测量需要融合加速计和陀螺仪的数据,并减去运动造成的加速度。需要相对于地球来检测方向的应用可使用重力测量。

线性加速度 – 等于加速计测得的设备加速度,但要减去重力矢量。IMU 线性加速度可用于测量三维空间中的运动。该值的精度取决于重力矢量的追踪精度。

方向(海拔高度)– 欧拉角集合,包括偏航角、俯仰角、翻滚角,测量单位为度。

旋转矢量 – 由加速计、陀螺仪和磁力仪传感器的数据组合得出。旋转矢量表示围绕特定轴的旋转角度。

IMU 可用于各种应用,包括消费品(手机)、医学(成像)、工业(机器人)和军工(航向跟踪)。所需 IMU 精度取决于应用要求。

六种自由度

自由度 (DOF) 指刚性物体在三维空间中的可能运动。3D 空间中只有六种 DOF:三个线性转换 DOF(前/后、上/下、左/右)和三个旋转 DOF(偏航、仰俯和翻滚)。无论运动有多复杂,空间内任何可能的刚性物体运动都能以六种基本 DOF 的组合来表示。

但在 IMU 领域内,有很多 9 DOF 甚至 10 DOF 传感器的叫法。考虑到总共只有六种用于描述运动的 DOF,这种命名规则会造成相当的困扰。9 DOF 这一数字命名源于累计 IMU 内所含各种传感器的 DOF。因此,如果 IMU 包含一个 3 DOF 加速计、一个 3 DOF 陀螺仪和一个 3 DOF 磁力仪,则称之为 9 DOF IMU。再增加一个气压传感器用于测量海拔高度,就会得到一个 10 DOF IMU。

市场上有各种价格和功能的 IMU。例如,DFRobot 的 SEN0140 10 DOF MEMS IMU 传感器板是一种紧凑型 IMU 板,集成了一个 Analog Devices ADXL345 加速计、一个 Honeywell Microelectronics & Precision Sensors 磁力仪、一个 TDK Invensense 陀螺仪和一个 Bosch Sensortec 气压传感器。

图 1:DFRobot 的 SEN0140 10 DOF MEMS IMU 传感器板集成了加速计、磁力仪、陀螺仪和气压传感器。(图片来源:DFRobot)

主流 SEN0140 传感器的测量规格如下:

ADXL345 加速计:±16 g,13 位分辨率(在所有 g 量程内保持 4 mg/LSB 的比例系数)

Honeywell Microelectronics & Precision Sensors 磁力仪:±8 高斯满量程磁场

TDK Invensense 陀螺仪:满量程 ±2000°/秒

Bosch Sensortec 气压传感器:4.35 PSI 至 15.95 PSI(30 kPa 至 110 kPa)

所有这四个传感器都连接到板上的单一 SPI 串口,这意味着嵌入式处理器必须单独对每个处理器进行寻址和查询。DFRobot 的 SEN0140 还采用低噪声 LDO,为传感器提供 3 至 8 伏稳压电源

使用现有 Arduino 库,DFRobot 的 10 DOF IMU 能直接兼容 Arduino 开发板。该器件还可用于具有 SPI 端口的任何微处理器微控制器系统。

以下是从 DFRobot 的 SEN0140 10 DOF 开发板提取传感器数据的 Arduino 代码示例(列表 1):

复制 #include #include #include #include #include float angles[3]; // yaw pitch roll float heading; short temperature; long pressure; // Set the FreeSixIMU object FreeSixIMU sixDOF = FreeSixIMU(); HMC5883L compass; // Record any errors that may occur in the compass.int error = 0; void setup(){ Serial.begin(9600); Wire.begin(); delay(5); sixDOF.init(); //init the Acc and Gyro delay(5); compass = HMC5883L(); // init HMC5883 error = compass.SetScale(1.3); // Set the scale of the compass.error = compass.SetMeasurementMode(Measurement_Continuous); // Set the measurement mode to Continuous if(error != 0) // If there is an error, print it out.Serial.println(compass.GetErrorText(error)); bmp085Calibration(); // init barometric pressure sensor } void loop(){ sixDOF.getEuler(angles); temperature = bmp085GetTemperature(bmp085ReadUT()); pressure = bmp085GetPressure(bmp085ReadUP()); getHeading(); PrintData(); delay(300); } void getHeading(){ // Retrive the raw values from the compass (not scaled).MagnetometerRaw raw = compass.ReadRawAxis(); // Retrived the scaled values from the compass (scaled to the configured scale).MagnetometerScaled scaled = compass.ReadScaledAxis(); // Values are accessed like so: int MilliGauss_OnThe_XAxis = scaled.XAxis;// (or YAxis, or ZAxis) // Calculate heading when the magnetometer is level, then correct for signs of axis.heading = atan2(scaled.YAxis, scaled.XAxis); float declinationAngle = 0.0457; heading += declinationAngle; // Correct for when signs are reversed.if(heading 《 0) heading += 2*PI; // Check for wrap due to addition of declination.if(heading 》 2*PI) heading -= 2*PI; // Convert radians to degrees for readability.heading = heading * 180/M_PI; } void PrintData(){ Serial.print(“Eular Angle: ”); Serial.print(angles[0]); Serial.print(“ ”); Serial.print(angles[1]); Serial.print(“ ”); Serial.print(angles[2]); Serial.print(“ ”); Serial.print(“Heading: ”); Serial.print(heading); Serial.print(“ ”); Serial.print(“Pressure: ”); Serial.print(pressure, DEC); Serial.println(“ Pa”); }

列表 1:这是从 DFRobot 的 SEN0140 10DOF 开发板提取传感器数据的 Arduino 代码示例。(代码来源:DFRobot)

此 Arduino 代码可生成图 2 所示输出。

IMU为嵌入式应用提供更精细的定位分辨率

图 2:上述 Arduino 代码生成此输出,显示 SEN0140 传感器的状态。(图片来源:DFRobot)

Digilent 的 410-326 9 轴 IMU/气压计基于 STMicroelectronics 的 LSM9DS1 iNEMU IMU,该 IMU 整合如下规格的 3D 加速计、3D 陀螺仪和 3D 磁力仪:

±2/±4/±8/±16 g 满量程线性加速度(3D 加速计)

±245/±500/±2000°/秒满量程角速率(3D 陀螺仪)

±4/±8/±12/±16 高斯满量程磁场(3D 磁力仪)

所有三种运动传感器—加速计、陀螺仪和磁力仪—都集成到一个小型封装中,并通过 LSM9DS1 的 I2C 接口进行连接。

图 3:Digilent 的 410-326 9 轴 IMU/气压计使用 STMicroelectronics 的 LSM9DS1 iNEMU IMU,该 IMU 在一个封装中整合了 3D 加速计、3D 陀螺仪和 3D 磁力仪。(图片来源:Digilent)

Thales Visionix 的 NavChip 精密 6 轴 MEMS IMU 源自军工技术,可以 1 kHz 的速率进行位置数据采集和处理。然后,以用户可选择的低至 200 Hz(或更低)的速率处理并集成数据。它还使用工厂校准和嵌入式温度传感器进行补偿,以纠正其他传感器的偏置、比例系数和错位。其加速计和磁力仪的规格如下:

加速计:满量程角速率 2000°/s

磁力仪:满量程加速度 ±16g

NavChip 模块带有 TTL UART 和 SPI 端口,并具有 1 个脉冲/秒的输入,用于同步 GPS 模块。提供 V14447-03-02 RS-422 评估套件,让原型设计更加轻松。模块有内置测试 (BIT) 模式,可按指令测试,并提供连续诊断监测。该装置已进行工厂校准,并在 -40°C 至 +85°C 的工作温度范围内提供温度补偿。

Thales 利用工厂校准和温度补偿,在 NavChip 模块的规格书中增加了一系列稳定性规格,这在其他大多数商用 IMU 规格书中是没有的:

陀螺仪偏置运行稳定性:5°/小时

角向随机游走:0.18°/√小时

速度随机游走:0.03 米/秒/√小时

软件角度

有了本文所列的所有 IMU,编写如以上 Arduino 代码列表所示的提取原始传感器数据的软件并不困难。但是,将这些传感器读数集成为可用的导航数据才是更复杂的任务。一些开源程序包专门设计为将 IMU 数据整合到应用中。

ArduPilot Mega (APM) 便是这样一款专为自主式无人机而开发的程序。它支持驾驶和无人驾驶(完全自主)飞行,包括数百个 GPS 航点、摄像机控制、自主起飞和着陆。由于是开源程序,IMU 代码可开放检查,并能改用于其他类型的应用。

来自 Open Source Robotics Foundation 的机器人操作系统ROS) 提供了编写机器人软件的灵活框架。它集合了众多工具、库和惯例,旨在简化跨众多机器人平台创建复杂而强大的机器人行为的任务。ROS 包含多个 IMU 的接口代码,以便为其导航模块提供信息。

总结

许多嵌入式应用需要能够在全球任意位置实现系统定位。仅 GNSS 接收器是不够的,但有了 IMU 的补充,则可实现更精准的定位和更快的更新率。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18274

    浏览量

    288367
  • mems
    +关注

    关注

    128

    文章

    3733

    浏览量

    188661
  • GNSS
    +关注

    关注

    9

    文章

    620

    浏览量

    47249
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 微电子工艺:81.2光刻分辨率

    IC设计工艺分辨率
    Mr_haohao
    发布于 :2022年10月21日 02:07:36

    #硬声创作季 微电子工艺:81.3光刻分辨率--2

    IC设计工艺分辨率
    Mr_haohao
    发布于 :2022年10月21日 02:08:42

    什么是cif分辨率

    视频码流不能太高;2、视频传输带宽也有限制;3、使用HALF D1、D1分辨率可以提高清晰度,满足高质量的要求,但是以高码流代价的。在现阶段,出现了众多D1的产品,但市场份额非常小;4、采用CIF
    发表于 05-28 16:31

    无风扇、嵌入式平板电脑——采用8英寸(800x600分辨率)真彩液晶屏、触摸屏

    ;   LDM8086T 嵌入式平板电脑是立宇泰电子自主研发设计的一款嵌入式 8"(800×600分辨率)触摸液晶显示人机界面产品,特别
    发表于 06-26 13:41

    分辨率织网(MRM)技术概览

    。   Intel的"多分辨率织网"(Multi-Resolution Mesh,MRM)方案我们提供了一个解决方案。MRM仅由一个顶点非常多的模型构成,另加一系列指令,允许一次删除或替换
    发表于 09-05 11:58

    轻松设置树莓派分辨率

    本帖最后由 348081236 于 2016-1-11 15:46 编辑 每次树莓派连接显示器、换线的时候,总是因为坑爹的分辨率而无语,每次都因为这点小破事浪费不少时间。所以,楼主大家提供
    发表于 01-11 15:38

    贴片机分辨率概述

      贴片机的分辨率通常是指贴片机定位系统的分辨率,具体指机械位移的最小极限,它包括X-Y移动的最小距离和Z轴旋转最小角度,其数值取决于伺服机构和轴驱动机构及其测量和控制系统的分辨率。实
    发表于 09-05 10:49

    AMIS CMOS可选分辨率图像传感器722402

      AMI Semiconductor (AMIS)宣布首个2400dpi CMOS图像传感器现已投放市场。高度整合和具成本效益的AMIS-722402提供分辨率2400、1200、600或
    发表于 10-25 17:07

    采用高分辨率位置插值的Sin/Cos编码器工业接口

    或 12 位版本,从而可优化性能和成本。此外,TIDA-00176 还允许通过 SPI 和 QEP 接口以轻松连接到外部处理器,同时允许使用可选、嵌入式 ADC。实现快速评估,该设计提供了适用于
    发表于 11-09 17:04

    ADC的噪声、ENOB及有效分辨率

    。  更高分辨率  过去,一只12位SAR ADC通常就足以测量各种信号与电压输入。如果某个应用需要更精细的测量,设计者可以在ADC前加一个增益级或PGA(可编程增益放大器)。对于16位设计,设计者
    发表于 11-26 16:48

    单片机内置ADC实现高分辨率采样的方法

    关注+星标公众号,不错过精彩内容转自 | 嵌入式客栈相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想到采用一个较高位数的外置ADC去实现。可是高...
    发表于 12-06 07:25

    单片机内置ADC实现高分辨率采样的方法

    关注、星标嵌入式客栈,精彩及时送达[导读] 相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想到采用一个较高位数的外置ADC去实现。可是高分辨率
    发表于 12-08 07:03

    请问有采样250MHz左右、分辨率12位,管脚兼容8位分辨率的adc吗?

    您好, 请问有采样250MHz左右 分辨率12位,管脚兼容8位分辨率的adc吗? 谢谢!
    发表于 11-21 06:46

    峰峰值分辨率与有效分辨率的区别

    低带宽、高分辨率ADC的分辨率16位或24位。但是,器件的有效位数受噪声限制,而噪声则取决于输出字速率和所用的增益设置。有些公司规定使用有效分辨率来表示该参数,ADI则规定使用峰峰值
    发表于 12-15 07:56