把一块板子放进抽屉,拉上。断电、断网、不见光,也没有轮子能告诉它走了多远。它还能知道什么?
它能知道自己转没转、哪边是下。给出这件事的,就是惯性器件。
它不是一个传感器
平时说的"IMU"(惯性测量单元)不是一颗传感器,是两种传感器的组合:三轴加速度计 和三轴陀螺仪。前者回答"哪边是下",后者回答"现在转得多快"。六个自由度凑在一起,装在同一块硅片上,共享一套时钟和一套接口------六轴。
再往里加一组三轴磁力计,就成了九轴。磁力计提供的是"哪边是北",这跟重力提供的"哪边是下"合起来,姿态才有可能长期锁住。
几个词先摆清楚,后面每一节都要用到:
| 词 | 它说的是一件什么事 |
|---|---|
| 轴、自由度 | 三个方向能测就叫三轴;加速度三轴加角速度三轴,共六个自由度 |
| 量程 | 这把尺子最长能量到多大,加速度按 g 算、角速度按度每秒算 |
| 灵敏度 | 一个刻度代表多少物理量,比如 ±16g 档下 2048 个刻度等于 1g |
| 零偏 | 顾名思义,偏移"零"的数值,明明没动,它却报出来的那个数 |
| 噪声密度 | 抖动的大小,单位里带一个"每根号赫兹";这个数乘上带宽开根号才是总的抖动,所以带宽越宽,总噪声越大 |
| 更新率 | 每秒给你几个新数据;芯片内部算得很快,不等于你能读到那么快 |
"惯性"这个词的意思:不问外界
名字里的"惯性"不是形容词,是它的工作原理:只靠自身的运动状态推算,不问外界任何一个信号。 这一点决定了它和别的传感器的分工。
把它和手里已经有的东西摆在一起看:
| 器件 | 给什么 | 快不快 | 什么时候失效 |
|---|---|---|---|
| GPS | 绝对位置、绝对速度 | 慢,常见 1Hz 上下 | 进隧道、城市峡谷、树荫下就断 |
| 编码器 | 轮子转了多少 | 很快 | 打滑、空转、抬起来就不算数 |
| 磁力计 | 绝对方向,北在哪 | 慢,怕干扰 | 旁边有铁、有大电流就歪 |
| 视觉 | 信息最多 | 慢,还吃算力 | 暗、糊、纹理单一时没招 |
| IMU | 角速度与姿态变化 | 很快,几百到几千赫兹 | 不断线,但会漂 |
最后一行那三个说法要停一下:很快、不断线、会漂。
很快,是因为它测的是一个瞬时量,不需要等一帧图像、等一颗卫星、等轮子转完一圈。控制环里真正要的是"这一拍它转了多少"------无人机靠它稳住机身,云台靠它抵掉手的抖动,平衡车靠它知道往哪边倒。这些地方的共同点是:等一秒再知道就晚了。
不断线,是因为它不需要外界配合。别的器件都得"看得见什么"或者"连得上什么",它不用。这也是它在导航里被当成最后一道保险的原因:GPS 一断,能顶一会儿的只剩它。
会漂,是它的代价,也是后面所有麻烦的来源。
积分是它的命门
角速度要变成角度,得积分:每一小段乘上这一小段的时间,再往前加。加速度要变成位移,还得积分两次。
积分会把误差养大。举个能自己算的数:陀螺仪的零偏只要偏 0.05 度每秒 ,一小时就是 0.05 × 3600 = 180 度。模块原地不动,屏幕上那个偏航角却转了一圈。
所以惯性器件永远是一句话:短跑选手。 一秒、十秒里它给出的姿态靠得住;几分钟、几小时以后,它必须靠一个外部参考把自己拉回来,否则漂到没有意义。
讲从寄存器到角度那一回里,那两个角放回桌上就回到 0 附近,靠的不是滤波,是重力一直在做这个"拉回来"的动作。偏航没有重力可依,所以它没有这个待遇。
它具体用在哪儿
看它被用在哪里,比背定义有用。下面这些场合用的都是同两颗传感器,只是要的那一路数据不同:
| 场合 | 它到底提供什么 |
|---|---|
| 无人机 | 角速度进内环,姿态进外环,几毫秒就要一次,慢了就翻 |
| 云台 | 角速度抵掉手的抖动,姿态告诉电机往哪转 |
| 平衡车 | 倾斜角和角速度,两者缺一个都站不住 |
| 手机 | 屏幕方向、计步、拍照防抖,能省电的那些判断也在芯片里做 |
| 汽车 | 车身稳定、坡道起步、碰撞判断,要的是能过车规的那一档 |
| 机器人 | 和轮子、视觉合起来算里程,短时的姿态由它保证 |
| 头显与手柄 | 头部和手部的朝向,重点在低延迟,慢了人就晕 |
这张表里没有一格是"测位置"。位置它也能推算,但那是积分两次的事,只在很短的时间里可用。
为什么很多地方非它不可? 因为它回答的两个问题别人都答不了:一个是"这一瞬间转得多快"------编码器只知道轮子转,不知道车头偏没偏;另一个是"外界什么都没有的时候,物体在怎么动"------GPS 被遮挡就断,视觉遇到暗处就没招,只有它照常给数。
多出来的那个轴,和它怕的东西
六轴里有两个方向是"绝对"的:重力永远指向地心,所以俯仰和横滚能被重力约束住。偏航没有------绕着重力轴转一圈,重力方向一点没变。
补上这一块的,是磁力计:它测的是地磁场,等于告诉模块"北在哪"。三轴加速度计、三轴陀螺仪、三轴磁力计凑齐九轴,俯仰、横滚、偏航才都有了长期参考。
代价是它怕两样东西:铁和电流。电机、喇叭、螺丝刀、桌面的金属边框都会把地磁场扭掉;模块自己的电流一大,读数也跟着动。所以九轴模块几乎都带磁校准,校完还得注意安装位置------把磁力计贴着电机装,等于给自己找了个会变的"北"。
手机上的一个现象也能对上:指南针隔一段时间提示你"画个 8 字"。那不是仪式,是在重新采集各个方向上的磁场,好把当地的干扰和器件本身的偏差一起扣掉。
装上去之前,先定坐标系
芯片有自己的坐标系:三个轴互相垂直,转向按右手定则。装到车上,车也有一个坐标系------车头朝前、车身向左、朝上。两者不重合的时候,软件里要做一次轴映射,而不是硬掰机械结构。
同一颗芯片,装成横的、竖的、倒的,读出来的还是那组数,含义却完全不同。判断顺序永远是先做一次单轴动作,看哪一个分量在变,再决定映射怎么写;三个动作一起做的时候去猜坐标,只会得到一堆互相解释不清的数字。
为什么它又便宜又难做
MEMS 这几个字母说的是工艺:把机械结构直接做在硅片上。加速度计的核心是一个悬着的质量块,像一根极小的弹簧秤;陀螺仪的核心是一个被驱动着振动的结构,靠科里奥利力感知转动。这些结构用光刻做出来,和电路的其余部分长在同一片晶圆上。
这样一来,有一件事变了:它从精密仪器变成了量产件。 一片晶圆上切出成千上万颗,一颗几块钱,能塞进手机、手柄、耳机和玩具里。
另一件事没变:小尺寸和低噪声是打架的。 质量块越小,能测到的位移越小,噪声和零偏就越压不下去。这不是设计水平的问题,是物理。
行业里用手册上的指标给器件分档,最常看的是零偏稳定性(每小时漂多少度)、角度随机游走和标度因数稳定性。从消费、工业、战术到导航,往上走一档,这些数就要小若干数量级。
手里那颗芯片可以当锚点。《MPU-6000/MPU-6050 产品规格书》里写着:初始零偏的保证值是 ±20 度每秒 ,全温区(−40℃ 到 +85℃)的变化也是 ±20 度每秒 ;数字低通开到 100Hz 那一档时,总有效值噪声是 0.05 度每秒 ,角速度噪声密度 0.005 度每秒每根号赫兹。这些数换算成每小时,就是几万度这一档。
导航级的器件,零偏是按每小时零点零几度算的。中间隔着好几个数量级------这也解释了为什么"高精度惯性导航"这几个字后面,跟着的从来不是几块钱的东西。
三代做法
陀螺仪这一路的技术,走过三代:
- 机械转子:真的有一个高速转着的转子,靠它保持方向。精度可以很高,但里面是轴承,是机械件。
- 光学:激光陀螺和光纤陀螺没有转动部件,靠光在回路里绕行的时间差测转动,长期占着高精度那一档,飞机、船舶、长航时的惯导多用它;代价是体积、价格和功耗。
- MEMS:从另一头长起来,先占领消费和汽车,再一代代往上顶。芯片厂这些年做的事,就是让 MEMS 尽量往高精度那块地盘上挪。
不必只讲大话,两份公开的手册放在一起,趋势就很清楚。
一份是《MPU-6000/MPU-6050 产品规格书》,厂商 InvenSense,文档版本 3.2,日期 2011 年。它给的是一颗老老实实的测量芯片:三轴加速度 ±2 到 ±16g,三轴角速度 ±250 到 ±2000 度每秒,一个数字低通滤波器,一批数据寄存器,还留了一个辅助 I2C 口去接外部磁力计。想要姿态,自己算。
另一份是《BMI270 数据手册》,厂商 Bosch Sensortec,文档发布日期 2021 年。封装和量程是同一路数,但手册的"典型应用"写的是可穿戴、耳机、智能衣物、增强与虚拟现实;芯片里多出来一整块特征引擎:计步、手势识别、佩戴检测这些判断在芯片里就做完了。这颗芯片就焊在常见的那块六轴模块上,手册和模块商品页都会写明型号。
十年时间,量程没变,噪声也没有奇迹式进步,变的是别的东西:功耗、集成度,以及数据在片内被加工到哪一步 。上一代是"给你刻度,你自己算",这一代是"我顺手把结果也算好"。用一句话说这股方向------从给数据的芯片,变成会判断的芯片。
把这条链子上的人和东西分开看,格局其实只有三层:
- 芯片厂做硅片上的那两颗传感器,卖的是器件和手册;消费和汽车这一头,就是上面那两份手册所在的战场。
- 模块与方案厂把芯片、稳压、上拉、有时再加一颗单片机和一套协议打包成一块小板子,卖的是"插上就能读到数据"。
- 高精度惯导厂卖的是标定与长期稳定性:同样叫陀螺仪,光学器件那一档的价钱、体积和功耗都不在一个量级,它们服务的是"推算几小时还要准"的场合。
三层之间存在替换关系:芯片变便宜,模块就跟着便宜;模块把姿态算好,写代码的人就可以不懂四元数。你在哪一层解决问题,决定了你要懂到哪一层。
四块模块,三种"交给我多少"
同一件事,站在单片机这一侧看,差别只在"回来的东西是什么"。下面这几种都常见,区别不在价格,在于姿态解算这一步落在谁手里。
| 模块 | 卡上是什么 | 回到单片机手里的是什么 |
|---|---|---|
| MPU6050 | 六轴测量芯片本身 | 十四个字节的原始刻度 |
| 六轴模块(如 IMU660RA) | 模块上是 Bosch 的 BMI270 这类较新的六轴芯片 | 同样是原始刻度,另外能读到片内的计步、手势这类结果 |
| 姿态模块(如 MS6DSV) | 六轴芯片加模块固件 | 用模拟 I2C 读回来的就是四元数 |
| 带解算的九轴模块(如 JY901) | 九轴芯片(MPU9250 这一类)加一颗自己的处理器 | 串口上直接是一行角度,还有四元数、磁场、时间 |
四块模块归到三档,三行伪代码就能摆在一起(MPU6050 和六轴模块回到手里的都是刻度,算同一档):
c
int16_t ax, ay, az, gx, gy, gz; /* 第一档:拿到的是刻度,角度得自己算 */
float q[4]; /* 第二档:拿到的是四元数,角度由它换算出来 */
uint8_t frame[11]; /* 第三档:拿到的是解好的帧,Roll/Pitch/Yaw 就在里面 */
最后一档要看细一点,因为它把"模块替我做了多少事"讲得最明白。JY901 的使用说明书写着:静态姿态精度 0.05 度、动态 0.1 度,内部集成姿态解算器和动态卡尔曼滤波;出厂默认串口 9600、每秒回传 10 次,最高到 200Hz。它回传的是一帧一帧的数据,帧头固定 0x55,后面跟一个字节的类型:0x51 是加速度,0x52 是角速度,0x53 是角度,0x54 是磁场,0x59 是四元数。每帧最后一字节是校验和,算法是把帧头、类型和各数据字节加起来取低八位。
这套帧格式和讲二进制协议那一回自己定的那条帧,是同一个思路------固定帧头、类型区分内容、末尾校验。区别只在于:那条帧是我们自己定的,这条帧是模块定好的,你只能照着解。
同一个模块往上还有一层:手册里写着它能接收符合 NMEA-0183 标准的串口 GPS 数据,组成 GPS 加惯性的组合导航单元。
这一步为什么划算,要算一遍。GPS 给的是长期不漂的绝对位置,可它更新慢,被遮挡就断;惯性给的是短期非常准、永远不断,可它会漂。两者合起来不是简单相加:GPS 补上惯性缺的那条基准线,惯性填上 GPS 两次更新之间的空档,而且这个补偿是双向的------有绝对位置做参照,惯性的零偏能被反过来估出来,于是下一次漂得更慢。行业里管这件事叫组合导航,"组合"两个字值的就是这份互相修正。
五个常见的想当然
有几件事要提前说清,它们决定了你后面会不会把时间花在错的地方。
| 想当然 | 实际是 |
|---|---|
| IMU 能算位置 | 位置要积分两次,误差按时间的平方往上长;没有外部参考,撑不了几十秒 |
| 数据率越高越好 | 更新率上去,噪声也一起进来;控制环要的是"够用且准时",不是越快越好 |
| 零偏校一次就永久有效 | 零偏随温度走。手册里 MPU6050 全温区的零偏变化和常温初始零偏是同一量级 |
| 精度越高越好 | 高精度那一档的价格、体积、功耗都不在一个世界里,先想清楚要推算多久 |
| 陀螺仪能测角度 | 它测的是角速度,角度是积分出来的,"漂"就漂在这一步 |
怎么选:先问姿态算在谁手里
判断的顺序不是先看价格,是先看你愿意把姿态解算交给谁:
- 交给自己。手里只有刻度,角度自己算,零偏自己校,滤波自己调。慢,但每一步都在你手里------讲从寄存器到角度那一回走的就是这条路。
- 交给芯片。有些新芯片带了融合和特征引擎,模块读回来就是四元数。省事,但里面怎么融的,你不容易看清。
- 交给模块。串口上一行直接是角度,插上就能用。最快出结果,代价是更新率、延迟和协议都由别人定,而且遇到问题时你手里没有中间那一步的数据。
剩下的判据就常规了:接口与总线(I2C、SPI、串口)、更新率够不够控制环用、量程覆盖不覆盖真正会遇到的最大动作、噪声与零偏撑得住你打算推算的时长、供电与体积,还有手册写得清不清楚。一上手就能查到寄存器表和量程表的器件,比一颗只能照着别人的驱动改的器件省事得多。
一句话收束这三档的取舍:把姿态算在别人手里,省下的是时间和调参;算在自己手里,换来的是知道自己在信什么。
最后橘猫说
把这块东西看成一杆秤和一个转速表:一个告诉你现现在加速度多少,比如因为重力就一直有向下的加速度,一个告诉你角速度多少,两样都不看外界,所以它永远不断线。代价是它只会推算自己------角速度积分成角度,零偏只要偏 0.05 度每秒,一小时就是 180 度,所以它是短跑选手,几分钟以后就得靠外部参考拉回来。便宜是因为做在硅片上,压不下去噪声也是因为做在硅片上,行业于是按零偏稳定性把它分成几档。挑的时候先问一句:姿态解算这一步,你打算交给谁。
最后蜘蛛说
师兄师兄,我得到地球自转的有利证据了