全球导航卫星系统 (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 所示输出。
图 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 的补充,则可实现更精准的定位和更快的更新率。
电动重卡持续升温,动力电池迎来发展契机
苹果公司同意向其屏幕供应商日本显示器公司JD投资1亿美元
印度标准局(BIS)已认证一种新的OnePlus产品
单相电源和三相电源有什么区别
使用模拟开关保护功率放大器级
IMU为嵌入式应用提供更精细的定位分辨率
定华雷达知识讲堂:如何做可以使雷达物位计使用寿命更长
工业智能网关和物联网云平台如何协同工作实现设备远程监控
纸病在线检测设备的工作原理及功能
电缆故障测试仪的功能特点介绍
C8051F040在基于CAN总线的分布式测控系统中的应用
Maxim发布最新喜马拉雅DC-DC降压转换器,快速实现工业安全标准
多式数据可视化微观服务
中国5G牌照年底或将全部发放
汉威双重预防管控系统可提供有效的企业风险辨识与管控信息
氮化镓已经为数字控制器做好准备
机器视觉市场加上人工智能会达到怎样的新高度
中国新能源汽车淘汰赛吹响号角
FPL1000频谱分析仪的功能特点及应用
中软国际首创北斗+冬奥运动员训练科技保障智慧支撑系统