作者:Steve Leibson
惯性测量装置 (IMU) 可广泛用于从加速计、陀螺仪及其他传感器持续稳定地提供多轴位置信息。鉴于多自由度 (DOF) 特性,所有生成数据(即来自这些设备的合并数据流)会使系统处理器一直处于唤醒模式,并且由于要筛选原始 IMU 数据来提取有用的手势和系统位置信息,因此使它们不堪重负。设计人员需要设法为主处理器减负,让其不再承担此类筛选功能。而机器学习则可能解决这一问题。
本文将首先简要介绍 IMU 的用途,接着介绍 STMicroelectronics 的 LSM6DSO。然后,借此器件阐释在 IMU 中添加和集成机器学习与决策树处理功能后,为何能为主机应用处理器分担实时位置和运动处理,以及如何在实际应用中使用这些功能。
IMU 简介
IMU 将各种运动传感器集成到一个器件中,可提供高精度定位信息。IMU 可用于各种应用,包括消费(手机)、医疗(成像)、工业(机器人)和军工(航向跟踪)。该装置对传感器的运动作出响应,包含以下一种或多种运动传感器类型:
陀螺仪传感器测量角度位置变化,通常以每秒度数表示。随时间进行角速度积分可测得行程角度,用于追踪方向变化。陀螺仪追踪与重力无关的相对运动,因此来自传感器偏置或积分的误差会造成称为“漂移”的位置误差,但可以通过软件进行补偿。
加速计测量线性加速度,包括设备运动造成的加速度分量和重力造成的加速度。加速度的测量单位为 g,1 g = 地球重力 = 9.8 米/秒2。加速计分为单轴、双轴和三轴,分别定义为 X、Y、Z 坐标系。
磁传感器测量磁场强度,通常以微特斯拉 (µT)或高斯(100 µT = 1 高斯)为单位。移动电子设备中最常用的磁传感器是三轴霍尔效应磁力仪。通过计算检测到的地球磁场角度,并将此测量的角度与加速计测量的重力进行比较,即可非常精确地测量出设备相对于地磁北极的航向。
使用 IMU 的运动追踪功能采用了传感器融合技术,根据已知的起点和方向,推导单一、高精度的相对设备方向和位置的估计值。传感器融合多通过软件,使用 IMU 制造商或应用开发人员开发的复杂数学算法来组合 IMU 的各种运动传感器输出。
使用传感器融合进行位置计算可得到以下测量结果:
• 重力 – 具体而言地球重力,不含设备感应到的由运动造成的加速度。当 IMU 静止时,加速计测量重力矢量。当 IMU 运动时,重力测量需要融合加速计和陀螺仪的数据,并减去运动造成的加速度。
• 线性加速度 – 等于加速计测得的设备加速度,但要通过软件减去重力矢量。IMU 线性加速度可用于测量三维空间中的运动。
• 方向(海拔)– 欧拉角集合,包括偏航角、俯仰角和翻滚角,测量单位为度。
• 旋转矢量 – 由加速计、陀螺仪和磁力仪传感器的数据组合得出。旋转矢量表示围绕特定轴的旋转角度。
IMU 误差源
陀螺仪通过角速度变化检测方向,但随着时间推移,陀螺仪往往会漂移,因为它仅检测变化而没有固定的参照系。若将加速计数据添加到陀螺仪数据中,软件可以最大限度地减小陀螺仪偏置,从而得到更准确的位置估计。加速计检测相对于重力的方向变化,该数据可用于给陀螺仪定向。
加速计对于静态(与动态相反)计算更准确。当系统已处于运动状态时,利用陀螺仪检测方向要更好。加速计反应迅速,若只使用该数据,加速计抖动和噪声会产生累积误差。此外,由于重力之类的外力,加速计往往会使加速度失真,这也会作为噪声在系统中累积。对此数据进行滤波可提高精度。
若将陀螺仪的短期精度与加速计的长期精度相结合,依靠每种传感器的优势来抵消或至少减轻另一种传感器的劣势,可以获得更精确的方向读数。两种传感器类型的互补有助于减少误差,但还有其他方法可用来减少误差。
融合滤波可用来减少误差
IMU 软件使用滤波来最大限度地减小 IMU 数据的定位误差。有多种滤波方法可融合传感器数据,每种方法都有不同程度的复杂性。互补滤波结合了高通陀螺仪滤波和低通加速计滤波。因此,加速计数据中的高频噪声会在短期内滤除,并且采用陀螺仪数据进行平滑处理。
执行所有这种传感器处理、滤波和融合所需的计算能力耗能较大;对于电池供电型系统,尤其是不需要 IMU 信息连续传输时,这可能是个问题。对于许多嵌入式应用,如果 IMU 可以生成中断,将主机处理器从休眠模式唤醒,从而启动处理或采取某些中断结果操作,即可明显降低功耗。为了实现此功能,一些 IMU 供应商开始在 IMU 中加入处理和决策功能。
让 IMU 进行思考
STMicroelectronics 的 6DOF LSM6DSO 就是一款这样的 IMU。6DOF LSM6DSO 包含三个微机电系统 (MEMS) 陀螺仪和三个 MEMS 加速计,可以检测方向变化和手势,无需主机处理器的监管或辅助,所有这些功能都在板上处理。在最高性能模式下运行时,该 IMU 的功耗为 0.55 毫安 (mA)。
在此模式下,LSM6DSO 可以持续监测自身在空间中的海拔高度和运动,并且可以在预定条件下生成中断,唤醒主机处理器来执行传感器流的额外处理。使用始终保持运转的低功耗 IMU 很有效,因为它让主机处理器休眠,仅在必要时唤醒。这种节能方法在电池供电型系统中是值得尝试和信赖的。
除了陀螺仪和加速计传感器之外,LSM6DSO IMU 还包含一个信号调节和滤波器模块、一个最多可运行 16 个程序的有限状态机(FSM)(所有程序共享可配置的通用输出数据速率)以及一个机器学习内核。结合使用这些资源,可以在以下情况下生成事件检测中断:
• 自由落体
• 唤醒
• 6DOF 方向
• 单击和双击检测
• 活动/非活动识别
• 静止/运动检测
信号调节块应用存储在灵敏度寄存器中的转换系数,换算原始传感器数据。然后,将原始 IMU 传感器数据流转换为 16 位半精度浮点 (HFP) 格式,以便 FSM 可以理解。IMU 的 MEMS 传感器(加速计和陀螺仪)以及两个模数转换器 (ADC) 和四个滤波器块如图 1 所示。滤波器块用于将 MEMS 传感器的模拟信号转换为滤波后的数字数据流。
图 1:LSM6DSO IMU 使用两个 ADC 将内部 MEMS 加速计和陀螺仪的模拟信号转换为数字流。ADC 之后是四个数字滤波器,用于调节信号,以便内部 FSM 和机器学习内核以及主机处理器作出决策。(图片来源:STMicroelectronics)
可编程 FSM 由一个配置块和 16 个程序块组成。FSM 配置块对整个 FSM 进行配置和控制。对于 16 个 FSM 程序块,每个块都由输入选择器块和代码块组成(图 2)。这两个块都由写入 IMU 内部寄存器的数值来控制。
图 2:LSM6DSO IMU 中包含 16 个 FSM 程序块,每个块都是由输入选择器块和代码块组成。(图片来源:STMicroelectronics)
输入选择器块将选定的输入数据从一个 IMU 内部传感器或连接到 IMU 传感器中枢的外部传感器发送到代码块。IMU 传感器中枢可以容纳多达四个额外的外部传感器,如磁力仪,这些外部传感器可通过 I2C 端口连接到 IMU。
FSM 代码块包含一个状态机程序。程序块数据段的固定部分由六个字节组成,这些字节用于定义程序的阈值数、滞后、掩码和定时器设置。程序块的可变数据段保存了每个程序的实际阈值、滞后、掩码和定时器设置,如数据段固定部分中存储的数值所定义。
数据段的固定部分还定义了代码块存储器占用空间中可变部分的大小、可编程复位向量和程序计数器。由于这些数值都是 8 位,因此每个 FSM 程序最大字节数为 256。
程序块的指令段包含了实际的 FSM 程序。程序指令包括各种操作码,用于对照阈值检查传感器输入、检查过零以及检查定时器值以判断是否超时。操作码还指定了由当前 FSM 状态转移到下一个 FSM 状态所需的条件。此外,有些指令操作码用于以下操作:选择存储在程序块可变数据段中的阈值和掩码;设置 IMU 传感器中枢多路选择器,以连接到四个可能的外部传感器之一;以及对中断进行断言。
每个 FSM 程序都可以生成中断,并根据所选择的输入信号,修改相应的寄存器值。这些寄存器值用于将数据从 IMU 传送到主机处理器。
FSM 可视为缺少算术逻辑单元的微处理器。FSM 可以作出选择、执行比较,并根据比较结果决定下一个状态。但 FSM 只能根据比较结果计算布尔值。
FSM 并不是微处理器。它可以进行比较,并根据比较结果对程序流程进行简单的更改。FSM 是很简单的机器,因而可直接用 FSM 操作码进行编程。FSM 没有高级语言编译器,但程序通常很简单,不需要编译器。
使用 FSM
LSM6DSO IMU 的 FSM 可以经过编程,生成由预定义运动模式激活的中断信号。FSM 可同时运行多达 16 个独立程序以检测运动。每个 FSM 程序由一系列 “if-then-else” 步骤组成,以 LSM6DSO 的加速计和陀螺仪的传感器数据流作为输入。如果任何 FSM 程序检测到与预编程模式相匹配的状态,FSM 就会向主机处理器生成中断。
在 16 个可用的 FSM 程序中,每个都包含三个存储器段,分别用于固定数据、可变数据和指令。单个 FSM 程序框图如图 3 所示。
图 3:STMicroelectronics 的 LSM6DSO IMU 中的 FSM 包含 16 个代码块,每个代码块包含三个存储器段,分别用于固定数据、可变数据和指令。(图片来源:STMicroelectronics)
代码块中单个程序的结构由存储器块中的三个区段组成:
• 固定数据段,在所有 FSM 程序中,这部分大小均相同
• 可变数据段,这部分大小可变
• 指令段,包含条件和命令
对每个 FSM 代码块进行编程时,需要将决定 FSM 行为的编程值加载到这三个存储器段中。STMicroelectronics 在可下载的 Unico 评估开发软件与开发环境中,提供了 FSM 编程工具。STMicroelectronics 还在 Unico 开发工具中随附了几个 FSM 样例程序,以帮助用户学习 FSM 编程。这些样例程序演示了几种基于 IMU 的中断场景,包括:
• 基本计步器
• 自由落体的系统
• 简单的运动检测
• 被拿起的系统
• 摇摆的系统
• 停止运动(静止)的系统
• 手腕倾斜
FSM 样例程序演示了各种 FSM 功能的使用。任何这些样例程序都可以安装到 STEVAL-MKI109V3 eMoTIon STM32 评估板等 IMU 演示平台中,这个平台带有一个 28 针的插座,可插入 LSM6DSO STEVAL-MKI197V1 IMU 适配器板。若要使用其中一个样例程序对 STEVAL-MKI109V2 板进行编程,只需在 Unico 开发环境中点击数下即可完成。
然而,LSM6DSO 却远不止这么简单。
机器学习核心
LSM6DSO IMU 还包含了一个更复杂的可编程模式匹配引擎,称作机器学习核心。这样可以使用来自内部 IMU 传感器和任何所连接外部传感器的多个传感器数据流,来识别各类运动。可识别的活动类别包括静止(无运动)、步行、慢跑、骑行和驾驶。活动分类则采用机器学习核心的决策树形式。
机器学习核心由三个块组成:传感器数据块、计算块和决策树(图 4)。机器学习核心的传感器数据块汇集了来自 IMU 内部加速计和陀螺仪以及通过 I2C 接口连接到 IMU 的任何外部传感器的数据流。计算块可使用预定义的滤波参数对传感器数据进行滤波,并且计算窗口统计数据,包括传感器数据的均值、方差、峰峰幅度、最小值、最大值和过零。决策树将传感器数据统计值与阈值进行比较,对输入数据进行分类。
图 4:STMicroelectronics 的 LSM6DSO IMU 的机器学习核心由三个块组成:传感器数据块,用于汇集来自内部和外部传感器的数据流;计算块,用于对传感器数据进行滤波和统计计算;以及决策树,根据计算的统计信息对活动进行分类。(图片来源:STMicroelectronics)
与 LSM6DSO 的 FSM 一样,Unico 开发环境中的专用工具可对 IMU 的机器学习核心进行编程。
有限状态机和机器学习核心也可与主机处理器结合使用,实现更为复杂的位置跟踪算法。STMicroelectronics 可下载的 X-CUBE-MEMS1 软件包可用于该公司的 STM32Cube 开发系统,并且包括以下样例软件例程:
活动识别 – 提供有关用户正在执行的活动类型信息,包括保持静止、步行、健走、慢跑、骑行或驾驶。该算法常用于手机或某些可穿戴设备。
运动持续时间检测 – 与计步器数据结合使用时,运动持续时间检测可用于确定用户活动的秒数。该算法常用于可穿戴健身或健康跟踪设备。
振动或运动强度检测 – 提供有关用户运动强度的信息,可识别的运动强度范围为 0(静止)到 10(全速跑)。该算法常用于手机或某些可穿戴健身设备。
携带位置识别 – 提供有关用户如何携带设备的信息,可区分以下位置:静置桌面、手持、贴近头部、衬衣口袋中、裤子口袋中、夹克口袋中以及戴在摆动手臂上。该算法常用于手机或其他可携带设备以检测活动相关情境。
总结
为了维持定位和使用 IMU 数据检测运动和手势,需要保持主机处理器持续运行,对于由电池供电的嵌入式设计来说,这一目标可能难以实现,因为主机处理器的功耗相当高。然而,新一代低功耗 IMU 的板上处理能力足以执行机器学习,允许主机处理器以低电流模式休眠,在必要时才唤醒,从而解决了这一问题。