一般 IMU 由加速度传感器、陀螺仪组成,也叫 6 轴 IMU。还可以外加一个磁力计,构成 9 轴 IMU。关于加速度传感器和陀螺仪的工作原理,可以参考:
加速度传感器测得加速度(acc)积分得到速度,再积分得到位移:
陀螺仪测得角速度(gyr)积分得到姿态:
所以可以通过加速度传感器+陀螺仪的组合得到比较准确姿态,在去除重力加速度分量影响下二次积分可以得到位置。
其中的难点在于:
- 姿态不准导致重力影响去除不了;
- MEMS 器件本身的零点漂移不能去除。
这导致使用 IMU 定位时,始终存在不可避免的漂移,且漂移会随着积分越来越大。所以需针对具体应用设计相应的处理算法。目前使用较多的步态定位。
- Oscillatory-Motion-Tracking-With-x-IMU,Matlab开源项目;
- Gait-Tracking-With-x-IMU,Matlab开源项目;
- Gait-Tracking-With-x-IMU,Python开源项目;
- Gait Tracking with x-imu Python,Python开源项目;
- Gait-Tracking,Python开源项目。
就目前来说,第二个项目的算法效果最好。但需要注意的是:
-
Script 中 samplePeriod 需要与传感器采样频率一致;
-
注意单位转换,我这里传感器采集的角速度单位为rad/s,但是项目中角速度的单位为deg/s。两者的转化关系为:
\[π/180*deg = rad \] -
算法对于 IMU 的放置和运动模式都做了要求。IMU 必须放置在脚背上,不能是脚踝。在脚踝上 IMU 抖动会导致数据漂移。出于同样原因,算法不适用于跑步,只能用于步行。事实上,对于简单、低频的动作,算法都能够绘制出较为精准的空间运动轨迹。但是对于复杂、高频的动作,算法没有表现出很好的兼容性,数据漂移很严重。