第二章 运动轨迹基础:IMU传感器原理
做智能穿戴芯片,绕不开IMU。说白了,IMU就是加速度计、陀螺仪、磁力计这三个传感器的组合。我刚开始接触这个领域时,总觉得它们很神秘——几个小芯片就能知道你在走路、跑步、甚至是在转圈?后来拆了几颗芯片,看了不少数据手册,才慢慢摸清门道。
今天咱们就聊聊这三个传感器的原理。嗯,我会结合我踩过的坑来讲,希望能帮你少走弯路。
2.1 加速度计:感知“力”的传感器
加速度计测量的是什么?是物体受到的加速度。注意,不是速度,是加速度。你想想看,当你把手机平放在桌上,它测到的是9.8 m/s²——那是重力加速度。当你突然拿起手机,它会测到一个更大的值。
加速度计的内部结构,说白了就是一个微小的“质量块+弹簧”系统。芯片内部有一个微小的硅结构,当芯片加速时,质量块会移动,改变电容值。通过测量电容变化,就能反推出加速度。
关键点:加速度计测量的是“比力”(specific force),即物体受到的合力减去重力。所以静止时,它测到的是重力加速度。
我在项目中遇到过一个问题:某款手环在静止状态下,加速度计输出竟然有0.2g的波动。排查了半天,发现是电源纹波太大,影响了ADC采样。从那以后,我设计IMU电路时,一定会单独给传感器供电,加一级LDO。
加速度计的主要参数
| 参数 | 典型值 | 说明 |
|---|---|---|
| 量程 | ±2g / ±4g / ±8g / ±16g | 穿戴设备常用±8g |
| 分辨率 | 16位 | 可检测到0.001g的变化 |
| 噪声密度 | 100 μg/√Hz | 越低越好,影响静态精度 |
| 输出速率 | 100 Hz - 1 kHz | 运动轨迹通常用100 Hz |
我的经验:选型时别只看量程。噪声密度这个参数容易被忽略,但它直接影响你后续做姿态解算的精度。我习惯选噪声密度低于200 μg/√Hz的型号。
2.2 陀螺仪:测量“转”的传感器
陀螺仪测量的是角速度,单位是度/秒(°/s)。它告诉你芯片在绕哪个轴旋转,转得多快。
陀螺仪的原理是科里奥利效应。芯片内部有一个振动的质量块,当芯片旋转时,质量块会受到一个垂直于振动方向的力,这个力的大小与角速度成正比。通过检测这个力,就能算出角速度。
说白了,陀螺仪就像一个“旋转检测器”。你拿着手环转个圈,它就能告诉你转了多少度。
注意:陀螺仪有零偏漂移。静止时,它输出不是0,而是一个小值。这个值会随温度变化。我曾经在-20°C到60°C的测试中发现,零偏漂移最大能达到5°/s。如果不做校准,积分出来的角度会飞掉。
陀螺仪的关键指标
- 量程:±250°/s 到 ±2000°/s。穿戴设备用±1000°/s就够了。
- 零偏稳定性:单位是°/h。好的陀螺仪能做到10°/h以下。
- 角随机游走:单位是°/√h。这个参数决定了角度积分的噪声。
我记得有一次做跑步轨迹追踪,发现转弯时角度误差特别大。查了数据手册才发现,陀螺仪的非线性度是0.1%,在高速旋转时误差会累积。后来我加了一个简单的卡尔曼滤波器,才把角度误差压到2°以内。
2.3 磁力计:电子罗盘
磁力计测量的是磁场强度。它就像一个电子罗盘,告诉你北在哪。
磁力计的原理是霍尔效应或磁阻效应。芯片内部有微小的磁敏电阻,当外部磁场变化时,电阻值会改变。通过测量电阻变化,就能算出磁场方向。
磁力计有个大问题——容易受干扰。你想想看,手表里的扬声器、马达、甚至表带上的金属扣,都会产生磁场干扰。我在项目中遇到过最离谱的情况:用户戴着金属表带,磁力计输出直接偏了30°。
硬铁干扰 vs 软铁干扰:
- 硬铁干扰:由永磁体引起,表现为固定偏移。校准方法:旋转设备,找到最大最小值,取平均作为偏移量。
- 软铁干扰:由导磁材料引起,表现为椭圆畸变。校准方法:需要做椭球拟合。
2.4 三传感器融合:为什么需要三个?
你可能会问:一个加速度计不够吗?为什么还要陀螺仪和磁力计?
答案是:每个传感器都有短板。
- 加速度计:能测重力方向,但无法区分重力加速度和运动加速度。你跑步时,加速度计输出是重力+运动加速度的混合信号,很难分离。
- 陀螺仪:能测角速度,但积分会漂移。时间长了,角度误差会越来越大。
- 磁力计:能测航向,但容易受干扰。在室内、地铁里,磁场乱得一塌糊涂。
所以,三个传感器要融合使用。加速度计提供俯仰和横滚角,磁力计提供航向角,陀螺仪提供短时间的高精度角速度。通过互补滤波或卡尔曼滤波,把三个数据融合起来,才能得到稳定的姿态。
我的建议:初学者先从互补滤波开始。它简单、计算量小,在穿戴设备上跑得很稳。卡尔曼滤波虽然精度高,但调参很痛苦。我当年调卡尔曼滤波的噪声协方差矩阵,调了整整两周才稳定下来。
2.5 传感器坐标系与安装
IMU芯片内部有一个固定的坐标系。通常,X轴指向芯片的某个方向,Y轴垂直X轴,Z轴垂直芯片表面。
但问题来了:芯片焊在PCB上,PCB装在手表里,手表戴在手腕上。这三个坐标系可能完全不重合。
我见过一个案例:某团队把IMU芯片旋转了90°焊在PCB上,结果软件里忘了做坐标系变换,轨迹全画反了。嗯,这种低级错误其实挺常见的。
所以,设计时一定要明确:
- 芯片坐标系相对于PCB的方向
- PCB相对于设备外壳的方向
- 设备相对于人体的方向
然后,在软件里做一次旋转矩阵变换,把传感器数据统一到人体坐标系下。
2.6 本章知识体系
下面这张图是我画的IMU传感器知识体系,帮你理清思路:
2.7 避坑指南
最后,分享几个我踩过的坑:
我曾经... 在量产阶段发现,同一批次的IMU芯片,零偏差异能达到20%。后来才知道,芯片出厂时虽然做了校准,但校准精度有限。解决方案:在产线上加一步“静止校准”,让设备在静止状态下采集100帧数据,取平均作为零偏。
我还遇到过... 磁力计在电梯里完全失效。电梯的金属结构会改变磁场分布,导致航向角跳变。后来我在算法里加了一个“磁场异常检测”:如果磁场强度超出正常范围(25-65 μT),就暂时只用陀螺仪和加速度计。
一个小技巧:加速度计的数据不要直接用。先做一个低通滤波,截止频率设在5-10 Hz。因为人体运动的频率一般不超过5 Hz,高频部分基本都是噪声。我习惯用一阶IIR滤波器,计算量小,效果也不错。
好了,IMU传感器的原理就聊到这儿。这三个传感器各有脾气,摸透了它们的性格,后面做轨迹算法就顺手多了。
公众号:蓝海资料掘金营,微信deep3321