你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32Cube 的X-CUBE-MEMS1 扩展软件中MotionFX 传感器融合库使用入门

[复制链接]
STMCU小助手 发布时间:2022-12-4 18:00
前言
8 ~# o1 U& n% R3 t0 lMotionFX 是 X-CUBE-MEMS1 软件的中间件库组件,可在 STM32 上运行。它可提供实时运动传感器数据融合。它还执行陀螺仪偏差和磁力计硬铁校准。
. U, j9 k" A9 A: f该算法以静态库格式提供,旨在用于基于 ARM® Cortex®-M4 架构的 STM32 微控制器。: w6 j" O. y4 N6 l0 ]
它以 STM32Cube 软件技术为基础而构建,便于在不同 STM32 微控制器之间移植。
0 A  P, l+ E8 ~" ~- m6 h5 G该 软 件 附 带 了 NUCLEO-F401RE 或 NUCLEO-L476RG 开 发 板 上 的 X-NUCLEO-IKS01A1 ( 可 选STEVAL-MKI160V1)或 X-NUCLEO-IKS01A2 扩展板上运行的示例实现。
" ?! m/ o8 Q/ n* F$ b! W. C, h& `% O# D6 \4 k, G; R! z: c  x/ `
1 缩写和缩略语
% L5 X2 h4 x8 e; V! \ K7B5EXOWSMKY]OTCUD8Y]X9.png
0 T/ q! M: z+ _( F, ~' M9 c. w) A; \( [
2 MotionFX middleware library in X-CUBE-MEMS1 software expansion for STM32Cube: j- e  s( w  Y: _( z  e" B+ H, c
2.1 MotionFX 概述* a* [; ^9 N; T. C' |5 ?
MotionFX 库扩展了 X-CUBE-MEMS1 软件的功能。
7 ^% v6 h0 S9 C8 ^$ ]( [" U8 J% B, D该库从加速度计、陀螺仪(6 轴融合)和磁力计(9 轴融合)获取数据,并提供实时运动传感器数据融合。2 z$ Z$ B8 F: R  N) q2 d3 I
无论环境条件如何,MotionFX 滤波和预测软件都利用高级算法智能地对来自多个 MEMS 传感器的输出进行整合,可以实现最佳性能。6 m8 d6 A3 h7 \$ l1 a; S1 c
X-NUCLEO-IKS01A2 和 X-NUCLEO-IKS01A1(可选 STEVAL-MKI160V1)扩展板上提供了一个示例实现,安装在 NUCLEO-F401RE 或 NUCLEO-L476RG 开发板上。
3 D! B5 ~0 `. H3 m& m7 v& m" J
0 F: t+ s6 o7 f6 [+ n$ b# G5 F! U
2.2 MotionFX 库3 T4 q9 P" q7 T2 s
在“Documentation”文件夹的 HTML 文件(使用 MotionFX_Package.chm 编译)中,提供了完整描述 MotionFX API 的功能和参数的技术信息。
1 T9 b5 i& F$ Y- ]7 m2.2.1 MotionFX 库说明
6 J3 `) s7 t1 \5 [4 LMotionFX 传感器融合库可管理从加速度计、陀螺仪和磁力计传感器获取的数据;它能够:
* `7 d5 k, G, U• 实时 9 轴运动传感器数据融合(加速度计,陀螺仪,磁力计)
) @' z- p& U1 X* s0 b; z% e• 实时 6 轴运动传感器数据融合(加速度计,陀螺仪)3 @" v& g: K' X* D8 u9 j
• 计算旋转、四元数、重力和线性加速度数据
) B/ c: g5 `7 N6 ]# {• 陀螺仪偏差校准! }' H! p- z* \, k/ d* r
• 磁力计硬铁校准
' W, M0 l! |* H; Y/ L4 {$ W7 u0 Z* T• 建议传感器数据采样频率为 100 Hz
) M4 C0 W( U8 L2 O" V& [6 l4 r• 45 kB 的代码和 8 kB 的数据存储器2 Z" D- p2 l- e7 l$ \# p3 x6 w
实际空间大小对于不同的 IDE(工具链)可能不同
" w# O7 S. ?$ o  B" {5 j• 适用于 ARM Cortex-M4 架构
- H( y2 N  g* t
) W) q4 Q8 X3 t& N' M6 `2 X8 a
2.2.2 MotionFX 6 轴和 9 轴传感器融合模式
5 n) }" {' }* E4 P7 h+ uMotionFX 库实现了传感器融合算法,用来估算空间中的 3D 方向。它使用基于 Kalman 理论的数字滤波器来融合来自多个传感器的数据,并补偿单个传感器的限制。例如,陀螺仪数据可能会漂移,这会影响定向估计;这个问题可以通过使用磁力计提供绝对定向信息来解决。: y+ `8 j3 H& \& v- r& P
类似地,磁力计带宽不高,并且受磁力干扰,但是这些弱点可利用陀螺仪来进行补偿。$ h; ~8 R# ~0 x5 C1 i' h1 E* A

0 w2 n8 S; D) B6 C0 N+ |  x9 轴传感器融合使用来自加速度计、陀螺仪和磁力计的数据,并提供 3D 空间中的绝对定向,包括航向(即磁性北方向)。
2 }. ]* @  X: b8 a) C! t. O! o0 V6 q; B/ S6 轴传感器融合仅使用加速度计和陀螺仪数据。它对计算要求较低,但不能提供有关器件绝对定向的信息。
' S. H; D9 Q) \+ S5 N# R( w1 W6 轴传感器融合适用于快速移动(例如,游戏中)并且不需要绝对定位时的场景。% M: `: s0 w9 A

* {7 c" o0 I: B2 c+ e3 t/ j

2 y; N( D& t6 J2.2.3 MotionFX 库操作+ t' q- W+ y; q! A8 b4 u
MotionFX 库将 6 轴和 9 轴传感器融合算法集成在一个库中;甚至可以同时运行它们。: t  h& v& J& d9 E5 R2 \
该库实现了传感器融合计算相关的以下关键内部函数:
8 F$ B4 k& F% a6 ^6 L1. MotionFX_propagate 是用于估计 3D 空间中定向的预测函数;在此阶段给予了陀螺仪数据更高权重。
6 j% H8 n- |1 u8 m$ m9 m* H2. MotionFX_update 是校正函数,可在需要时调整预测值;这个阶段给予了加速度计和磁力计数据更高权重。& l) o3 ^, w: ]; z" ]
每当调用 MotionFX_propagate 时,都可调用 MotionFX_update 函数,在计算能力较小的系统中不经常调用该函数。) B. X3 J2 K" D5 V
MotionFX_update 函数大约比 MotionFX_propagate 函数多花费三倍的 MCU 计算时间。
( k2 N& C0 O% h/ P% \# x$ Z! L: N* F  J: j% S' |
2.2.4 MotionFX 库参数
; C( M) E( u/ R0 ]MotionFX 库使用 MFX_knobs_t 结构体进行“参数化”。, }, q; @2 }# F' `* t
结构体参数如下:" q. d3 y3 a; @* K
• ATime、MTime、FrTime 表示用于预测的传感器(信任因子)的加权稳定性,从 0 到 1。建议使用默认值。
# K" b' j7 G0 }; b& A9 f( J• LMode 代表陀螺仪偏差学习模式;库能够自动监测校准条件并进行零偏校准。
; [1 Q& D# ^0 m8 L2 @' e; m, ?& _此可能的参数值是:  E. A  x3 G6 l0 Z4 X) y
− LMode = 0 – 学习关闭;如果陀螺仪已校准,则使用此模式
+ W) y. H. y9 Q) m; i- v, [− LMode = 1 – 静态学习;仅当系统不动时进行学习
/ n% F1 l( P! F9 N7 t. X. g− LMode = 2 – 动态学习;系统移动时也进行学习0 O: s9 F* Y9 [9 X% t1 j
• gbias_acc/gyro/mag_th_sc_6X, gbias_acc/gyro/mag_th_sc_9X 表示阈值,低于这些阈值时 gbias 算法自动启动。这些值应通过测试来确定(不同型号器件对应不同的阈值)。
% d; A1 ?  d0 {6 D; b示例项目中的值通常是正确的, V) Q  L9 I1 z5 o9 w) p
− modx 表示 MotionFX_update 调用频率的抽取. M+ Y3 g- H0 `$ o
− output_type 用于定义融合库输出数据的坐标系统类型:0 = NED,1 = ENU
3 y6 W2 {+ x7 W$ P9 a− start_automatic_gbias_calculation 表示一个标志,当该标志设置为 1 时可重新启动陀螺仪偏差校准
  @1 K, F; k+ q( Q. f. I− acc/gyro/mag_orientation 是由三个字符组成的 acc/gyro/mag 数据定向字符串,指示速度计数据输出使用的参考框架的每个正定向的方向,顺序为 x、y、z。有效值6 c# \: m: a# O9 V, G4 v+ c& r3 ^4 M$ V
为:n(北)或 s(南),w(西)或 e(东),u(上)或 d(下)。! A+ B& D) _7 G, ^+ F( @! w! B
如下图所示,X-NUCLEO-IKS01A1 加速度计传感器采用 ENU 定向(x - 东,y - 北,z - 上),因此字符串为“enu”,而 STEVAL-MKI160V1 中的加速度计传感器为 NWU 定向(x-北,y-西,z-上),字符串为“nwu”。  b8 O: v( Y- }3 z: E& i) L5 n
1 z( D0 A& [0 i& {
Z3MBJ8L`T]`V%JB%8QE3%NL.png
+ |: j5 h' d3 Z
" p' s# L" G7 N8 W0 o$ {MotionFX_propagate 和 MotionFX_update 函数从 MFX_input_t 结构体获取传感器数据:
. c2 [3 @! Z0 }: E/ U2 c. [• mag 表示校准后的磁力计数据,以 µT/ 50 计
- R3 E  ?+ ?7 S  t; q* H* P• acc 表示加速度计数据,以 g 计6 _8 V0 G* T$ w$ ]" A7 {7 Q: n: t
• gyro 表示陀螺仪数据,以 dps 计* K  j/ T8 @0 w. w  N& e
+ M& |; J6 t- ]
MotionFX_propagate 和 MotionFX_update 将融合算法输出保存到 MFX_output_t 结构体中
2 [5 X8 v: }/ T$ l. Q: ]• rotation_6/9X 表示系统定向为三角格式:偏航角,俯仰角,翻滚角7 i0 Q/ z2 J$ x
• quaternion_6/9X 表示系统定向四元素格式;此格式可提供与 rotation_6/9X 同样的信息,但它在计算方面具有优势,因此通常用于其他算法(基于传感器融合)。" }7 ]1 ~) u% j9 L
• gravity_6/9X 表示从加速度数据中所得到的静态加速度(即,地球重力)向量
! v+ Q, t' F. ~* N7 Y• linear_acceleration_6/9X 表示从加速度数据中得到的动态加速度(即,移动)向量。
1 `) Y3 y6 z: j1 p% U: O& y. d( z$ c
完整版请查看:附件
4 j, a! N$ e* P. C  v' u) S5 t5 D% u
# R* y4 X9 m3 |' t. b

: t9 L& a3 A5 G* Y( f

STM32Cube 的 X-CUBE-MEMS1 扩展软件中 MotionFX 传感器融合库使用入门.pdf

下载

1.34 MB, 下载次数: 24

收藏 评论0 发布时间:2022-12-4 18:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版