通过 IMU 绘制物体移动的空间轨迹
一般 IMU 由加速度传感器、陀螺仪组成,也叫 6 轴 IMU。还可以外加一个磁力计,构成 9 轴 IMU。关于加速度传感器和陀螺仪的工作原理,可以参考:
加速度传感器测得加速度(acc)积分得到速度,再积分得到位移:
陀螺仪测得角速度(gyr)积分得到姿态:
所以可以通过加速度传感器+陀螺仪的组合得到比较准确姿态,在去除重力加速度分量影响下二次积分可以得到位置。这种基于 IMU 测量数据进行位置、速度解算的方法可简称惯性导航(惯导)解算:
其中的难点在于:
- 姿态不准导致重力影响去除不了;
- 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开源项目。
就目前来说,第 1 个项目的算法效果最好,这是 效果展示。但需要注意的是:
- Script 中 samplePeriod 需要与传感器采样频率一致;
- 注意单位转换(参考:About the time data),我这里传感器采集的角速度单位为 rad/s,但是项目中角速度的单位为 deg/s。两者的转化关系为:
$$
π/180*deg = rad
$$ - 算法对于 IMU 的放置和运动模式都做了要求。事实上,对于简单、低频的动作,算法都能够绘制出较为精准的空间运动轨迹。但是对于复杂、高频的动作,算法没有表现出很好的兼容性,数据漂移很严重。
通过 IMU 绘制物体移动的空间轨迹
https://wonderhoi.com/2023/08/03/通过-IMU-绘制物体移动的空间轨迹/