做平衡车、云台或者机械臂姿态解算的朋友,几乎都绕不开同一个纠结:IMU 到底买哪颗。同样是"六轴""九轴",价格能差三倍,有的开箱就能读出欧拉角,有的到手还得自己写滤波。这次我把 Adafruit 家三款常被一起比较的 IMU 模块凑齐了:MPU-6050(12.95 美元)、BNO055(29.95 美元)、ICM-20948(19.95 美元,价格均为官方页标价,截至 2026 年 11 月 15 日),逐项对着官方页把参数过一遍,最后给出分场景的排序结论。
参评三款:先说清楚各自是什么
第一款是 Adafruit MPU-6050 6-DoF Accel and Gyro Sensor(STEMMA QT 版,产品页 https://www.adafruit.com/product/3886)。它是三款里资历最老的,官方页原话叫"an oldie but goodie"。板载两颗传感单元:一颗三轴加速度计负责判断哪边是地心方向,一颗三轴陀螺仪负责感知板子被扭转的快慢,合起来是 6 轴配置,没有磁力计,也就没有绝对朝向可言。通信走 I2C,板载电平支持电路,3.3V(Feather、树莓派)和 5V(Arduino、Metro328)逻辑都能直接接,自带 STEMMA QT/Qwiic 插拔口,官方页当时库存显示 62 件在售。

第二款是 Adafruit 9-DOF Absolute Orientation IMU Fusion Breakout - BNO055(https://www.adafruit.com/product/4646)。这颗是 Bosch 的方案,官方页的说法是:Bosch 把 MEMS 加速度计、磁力计和陀螺仪放进单颗芯片,还内置了一颗基于 ARM Cortex-M0 的处理器来消化传感器数据。也就是说它是真 9 轴——加速度、陀螺之外带磁力计,而且姿态融合在片内完成,直接输出四元数、欧拉角或向量形式的数据,欧拉角和四元数输出频率 100Hz,磁场数据 20Hz,线性加速度、重力分量也都有独立输出通道。I2C 地址默认 0x28,可通过跳线改 0x29,两颗 BNO055 可以挂在同一条 I2C 总线上;逻辑电平 3V/5V 均安全,中断脚和地址选择跳线都有引出。

第三款是 Adafruit TDK InvenSense ICM-20948 9-DoF IMU(https://www.adafruit.com/product/4554),官方页明说是已停产的 MPU-9250 的升级款——但特别提醒"not exactly code compatible",寄存器层面并不完全代码兼容。它是 TDK InvenSense 的 MEMS 三轴加速度计加三轴陀螺仪,再配旭化成(Asahi Kasei Microdevices)的 AK09916 三轴磁力计凑成 9 轴。规格部分官方页列得很清楚:陀螺量程 ±250/±500/±1000/±2000 dps 可编程,加速度 ±2/±4/±8/±16g,磁力计量程宽到 ±4900 μT;板载 DMP(Digital Motion Processor),带辅助 I2C 口可外接传感器,片上 16 位 ADC。模块上有 1.8V 稳压器加电平转换,3.3V 的 Feather M4、树莓派和 5V 的 Arduino Uno 都能接。

逐项对比:轴数、融合、地址与供电
把三款拉平了看,差异其实集中在四个点上。其一,轴数:MPU-6050 是 6 轴(三轴加速度加三轴陀螺),BNO055 与 ICM-20948 都是 9 轴(多一颗霍尔磁力计),想做绝对朝向就必须是后者。其二,融合算法在哪跑:BNO055 是三款里唯一把姿态融合做进芯片的,片内 ARM Cortex-M0 直接吐四元数和欧拉角;ICM-20948 有板载 DMP,但 Adafruit 官方页只列了"DMP 支持"这一项,姿态融合要靠上层库自己组合;MPU-6050 的官方页没提 DMP,姿态角要自己动手算。其三,I2C 地址:BNO055 官方页明确写 0x28(默认)或 0x29;MPU-6050 和 ICM-20948 的产品页没有标注地址,官方未公布的部分我不替它们填。其四,供电电平:MPU-6050 支持 3.3V 或 5V 逻辑;BNO055 标 3 或 5V 逻辑安全;ICM-20948 靠 1.8V 稳压器加电平转换兼容 3.3V 和 5V 主控。

谁开箱即用,谁要自己调滤波
从"到手多久能用"这个维度看,差距比参数表大得多。BNO055 是明显的开箱即用派:官方页说"meaningful sensor data in minutes",Adafruit 提供了 Arduino(C/C++)和 CircuitPython 两套库,I2C 读出来就是四元数或欧拉角,互补滤波、卡尔曼滤波这些你一行都不用写。代价是价格,29.95 美元是 MPU-6050 的两倍多。ICM-20948 走中间路线:DMP 在片上,但要把加速度、陀螺、磁力计三路数据合成稳定姿态,仍需依赖驱动库和一定调参,而且官方页专门警告它和 MPU-9250 不完全代码兼容,网上照抄 MPU-9250 的寄存器代码容易踩坑。MPU-6050 则是纯毛坯:只有原始加速度和角速度,姿态角全靠自己写互补滤波或者上 Mahony/Madgwick 这类算法,对新手不友好,但对想真正学懂姿态解算的人来说反而是最好的练习题。
精度与漂移方面,官方页给出的可量化信息有限,我照实说:三款页面上都没有标零偏稳定性这类漂移指标,官方未公布的我一律不填。可以确认的结构性差异是:MPU-6050 没有 9 轴数据,长时间积分出角度必然漂得快;BNO055 和 ICM-20948 有磁力计兜底,航向角有地磁参照,漂移表现天然好一档——当然磁力计也怕磁场干扰,靠近电机和强磁环境要另外做校准。
分场景结论:直接给排序
按需求给结论,不含糊。要绝对朝向、做云台和机械臂姿态输出的,排序第一是 BNO055:9 轴、片内融合、直接出四元数,省下的开发时间远超差价;第二才是 ICM-20948。要高性价比、做平衡车这类只关心倾角的场景,MPU-6050 排第一——12.95 美元,两轴倾角靠滤波算法就能稳定算出来,没有磁力计反而是减负。想学姿态解算原理、想折腾 DMP 的,ICM-20948 排第一,量程可编程范围大、磁力计量程 ±4900 μT 够宽,还有辅助 I2C 可扩展;但它寄存器多、文档厚,不适合赶工期的项目。给纯新手一个总排序:预算够就 BNO055,预算紧就 MPU-6050,ICM-20948 留给第二阶段进阶。
几个冷静提示
最后泼点冷水。价格是截至 2026 年 11 月 15 日的官方标价,Adafruit 的库存和定价变动频繁,下单前以当日页面为准,本次核验时三款均在售。ICM-20948 与 MPU-9250 的"升级"关系只到芯片层面,代码不兼容这点官方页写得明明白白,别抱着"平替"心态直接换。BNO055 的片内融合省事,但它是黑盒,融合参数不可调,对融合算法本身有定制需求的团队反而不合适。另外三款都是 STEMMA QT/Qwiic 接口设计,QT 线缆官方页特别注明不含在内,记得一并下单。你手上那颗 IMU 用的是哪款、漂移踩过什么坑,评论区聊聊。











BNO055是真香也是真贵,30刀买颗传感器肉疼,但省下来的调参时间确实是钱。
ICM-20948的寄存器是真的难写,之前照抄MPU-9250的代码直接翻车,看了半天手册才发现bank切换的问题,文章里那句不完全代码兼容太真实了。
排序给得很干脆,第一次见敢说'留给第二阶段进阶'的横评,比那种每款都夸一遍的和稀泥测评强多了。
参数都是官方页一个个对出来的态度好评,磁力计量程±4900μT这种细节都核过,收藏了等选型的时候翻出来用。
我的平衡车就是用MPU-6050做的,当时也是在这三款里纠结过。后来想明白了:平衡车只需要倾角,6轴足够,多花的钱等于白花。自己写互补滤波大概两天调稳,过程很折磨但真学到了东西,现在回头看这是我最值的一次折腾。如果是做云台或者机械臂,我肯定直接上BNO055,商业项目里调参时间比器件差价贵太多,片内融合直接吐四元数这点没法拒绝。ICM-20948我在另一个项目里用过,寄存器分bank的设计写得人头疼,MPU-9250的老代码不能直接搬,这点文章说得对。建议就是别一步到位,先便宜的学原理,要出活再买贵的。