什么是bno055,bno055的基础知识?


BNO055:智能9轴绝对定位传感器
引言
在现代科技的浪潮中,传感器技术扮演着举足轻要的角色,它们是连接物理世界与数字世界的桥梁。在众多传感器中,惯性测量单元(IMU)因其能够提供物体运动姿态信息而备受关注。然而,传统的IMU通常需要外部微控制器进行复杂的数据融合算法才能获得准确的姿态信息。为了简化这一过程,Bosch Sensortec(博世传感器技术公司) 推出了一款革命性的产品——BNO055。BNO055 不仅仅是一个简单的IMU,它是一个智能9轴绝对定位传感器,其独特的卖点在于其内置的融合算法,能够直接输出校准后的9轴传感器数据以及各种融合后的姿态数据,极大地简化了开发难度,为各种需要精确姿态感知的应用提供了便捷高效的解决方案。
什么是BNO055?
BNO055 是一款集成了三轴16位加速度计、三轴16位陀螺仪和三轴地磁传感器(指南针) 的多合一传感器模块。它最显著的特点是内置了一个高性能的微控制器(MCU),该MCU 运行着Bosch Sensortec 专有的传感器融合算法(Sensor Fusion Algorithm)。这意味着 BNO055 不仅仅是简单地提供原始的传感器数据,它还能在内部完成复杂的卡尔曼滤波或其他姿态估计算法,直接输出校准后的、高质量的、融合后的数据,如:
欧拉角(Euler Angles):表示物体的俯仰(Pitch)、横滚(Roll)和偏航(Yaw)姿态。
四元数(Quaternions):一种更稳定、无万向节锁(Gimbal Lock)问题的姿态表示方法。
旋转向量(Rotation Vector):另一种紧凑的姿态表示。
线性加速度(Linear Acceleration):排除重力影响后的加速度。
重力向量(Gravity Vector):指向地心的重力加速度。
以及原始的未经融合的加速度、角速度和磁场强度数据。
这种内置融合能力使得 BNO055 成为需要精确姿态信息的应用的理想选择,例如机器人、无人机、虚拟现实/增强现实(VR/AR)设备、智能穿戴设备、导航系统以及许多物联网(IoT)应用。
BNO055 的工作原理
要理解 BNO055 的强大之处,我们需要深入了解其内部组成和传感器融合的基本原理。
传感器模块
BNO055 内部集成了以下三个核心传感器:
三轴加速度计(Accelerometer):
原理:基于微机电系统(MEMS)技术,通过测量由于加速度引起的微小惯性力来确定物体在三个正交方向上的线性加速度。当设备倾斜时,加速度计也能感应到重力分量,从而可以用来计算设备的倾斜角度(俯仰和横滚)。
特点:提供静态加速度(如重力)和动态加速度信息。对线性运动和倾斜敏感。但无法单独区分重力加速度和线性运动加速度。
局限性:易受振动影响,无法提供偏航角(航向角)信息。
三轴陀螺仪(Gyroscope):
原理:同样基于MEMS技术,测量物体绕三个正交轴的角速度。它利用科里奥利力效应,通过检测振动结构在旋转时的微小位移来确定角速度。
特点:提供实时的角速度信息,可以用来计算短时间内的姿态变化。对旋转运动敏感。
局限性:存在漂移(Drift)问题,长时间积分会积累误差,导致姿态估计逐渐偏离真实值。无法提供绝对姿态信息。
三轴地磁传感器(Magnetometer):
原理:检测地球磁场在三个正交方向上的分量。地球磁场可以看作一个巨大的指南针,磁力计通过测量磁场方向来确定设备的航向(偏航角)。
特点:提供绝对的航向信息,可以修正陀螺仪的偏航角漂移。
局限性:极易受到局部磁场干扰,如附近的金属物体、电流等,导致读数不准确。地磁场本身也存在局部畸变。
传感器融合(Sensor Fusion)
单独的加速度计、陀螺仪和地磁计都有其优点和缺点。BNO055 的核心价值在于其内置的传感器融合算法,该算法巧妙地结合了这三种传感器的优势,弥补了它们的不足,从而提供更准确、更稳定的姿态信息。
传感器融合的基本思想是:
加速度计提供稳定的俯仰和横滚信息(通过重力向量),但对线性加速度敏感且无法提供偏航。
陀螺仪提供高带宽的角速度信息,可以准确地测量短时间的姿态变化,弥补加速度计在动态运动时的滞后,但存在漂移。
地磁计提供绝对的偏航信息,纠正陀螺仪在偏航轴上的漂移,但易受磁场干扰。
BNO055 的传感器融合算法通常采用扩展卡尔曼滤波(Extended Kalman Filter, EKF) 或其变体。EKF 是一种强大的估计算法,它能够:
预测(Prediction):利用陀螺仪的角速度数据来预测下一时刻的姿态。
更新(Update):利用加速度计和地磁计的测量数据来修正预测的姿态。加速度计用于修正俯仰和横滚,地磁计用于修正偏航。
通过不断地预测和更新,传感器融合算法能够实时地输出最佳的姿态估计,有效地抑制噪声、消除漂移、并克服单一传感器的局限性。BNO055 内部的MCU负责执行这些复杂的计算,并管理传感器校准、数据输出格式等。
校准(Calibration)
传感器,特别是地磁传感器,在使用前需要进行校准以确保数据准确性。BNO055 支持全自动校准功能。在初始化后,用户通常需要按照特定模式(例如,缓慢地在空中以“8”字形移动设备)来校准传感器。BNO055 会自动检测并存储校准参数。校准级别可以通过特定的寄存器读取,方便用户了解当前传感器的校准状态。正确的校准是 BNO055 能够输出高精度数据的前提。
BNO055 的操作模式
BNO055 提供了多种操作模式(Operation Modes),允许用户根据应用需求选择不同的功能组合和性能水平。这些模式主要分为:
配置模式(Configuration Mode):
在该模式下,可以对 BNO055 的内部寄存器进行配置,例如设置波特率、中断、工作模式等。传感器在此模式下不进行数据采集。
操作模式(Operation Modes):
IMU(惯性测量单元模式):融合加速度计和陀螺仪数据。提供线性和角速度信息,并可以估计俯仰和横滚。适用于需要高动态响应的应用,但偏航会漂移。
COMPASS(指南针模式):融合加速度计和地磁计数据。提供倾斜补偿的指南针功能,适用于需要精确航向的应用。
M4G(地磁计/加速度计融合模式):与 COMPASS 类似,但通常是指南针模式的更通用说法。
NDOF(九轴数据融合模式 - NINE DEGREES OF FREEDOM):这是 BNO055 最强大的模式,也是其核心功能。在此模式下,BNO055 融合了加速度计、陀螺仪和地磁计的所有数据,并输出经过校准和融合的欧拉角、四元数、旋转向量、线性加速度和重力向量等。它提供了最完整的姿态信息,并且具有良好的稳定性和精度。
ACCONLY(加速度计独立模式):仅启用加速度计,输出加速度计数据。
MAGONLY(地磁计独立模式):仅启用地磁计,输出地磁计数据。
GYRONLY(陀螺仪独立模式):仅启用陀螺仪,输出陀螺仪数据。
M4G(地磁计/加速度计融合模式):内部MCU进行地磁计和加速度计的融合,通常用于提供倾斜补偿的指南针功能。
NDOF_FMC_OFF(非融合模式,快速磁力计校准关闭):通常与 M4G 类似,但提供了更精细的控制选项。
非融合模式(Non-Fusion Modes):
融合模式(Fusion Modes):
选择正确的操作模式对于优化 BNO055 的性能和功耗至关重要。对于大多数需要完整姿态信息的应用,NDOF 模式是首选。
BNO055 的通信接口
BNO055 支持多种标准的数字通信接口,方便与各种微控制器或处理器进行连接:
I2C(Inter-Integrated Circuit):
特点:两线制串行通信协议(SDA 和 SCL),支持多主多从,广泛应用于传感器、EEPROM等设备。
BNO055 实现:BNO055 支持标准模式(Standard Mode, 100 kHz)、快速模式(Fast Mode, 400 kHz)和高速模式(High-Speed Mode, 3.4 MHz)I2C 通信。这是最常用的通信方式。
UART(Universal Asynchronous Receiver/Transmitter):
特点:异步串行通信协议,通过 RX 和 TX 两根线进行数据传输,简单易用。
BNO055 实现:BNO055 支持 UART 通信,提供波特率配置选项。对于一些只需要简单数据流的应用,UART 也是一个不错的选择。
HID-I2C(Human Interface Device over I2C):
特点:一种用于人机交互设备的标准协议,可以在 I2C 总线上模拟 HID 设备,简化与PC的连接。
BNO055 实现:BNO055 也支持 HID-I2C 模式,这使得它更容易作为输入设备与支持 HID 的系统进行交互。
通常情况下,开发者会选择 I2C 接口,因为它在灵活性、速度和连接多个设备方面具有优势。
BNO055 的典型应用
BNO055 的多功能性和高性能使其成为众多领域的理想选择:
机器人和无人机(Robotics and Drones):
姿态稳定和导航:为机器人和无人机提供精确的姿态信息,实现飞行控制、路径规划和自动避障。
平衡控制:如平衡小车或双足机器人的姿态平衡。
虚拟现实(VR)、增强现实(AR)和混合现实(MR)设备:
头部追踪:实时追踪用户头部的运动和方向,实现沉浸式虚拟体验。
手势识别:通过追踪手部或控制器姿态实现人机交互。
智能穿戴设备(Wearable Devices):
运动追踪:计步器、卡路里消耗、运动姿态分析。
健康监测:睡眠姿态监测、跌倒检测。
导航和定位系统(Navigation and Positioning Systems):
室内导航:在GPS信号不可用的环境中提供辅助定位。
航位推算(Dead Reckoning):结合其他传感器(如里程计)进行高精度定位。
工业和自动化(Industrial and Automation):
机械臂控制:精确控制机械臂的姿态和运动。
设备倾斜监测:检测大型设备、建筑物的倾斜或振动。
物联网(IoT)设备:
智能家居:智能家具、窗帘、灯具的姿态感应。
资产追踪:追踪物体的位置和姿态变化。
消费电子产品:
智能电视遥控器:空鼠功能。
游戏控制器:体感游戏控制。
BNO055 的优势与局限性
优势
内置传感器融合:这是 BNO055 最突出的优势,极大地简化了开发难度和时间。开发者无需自行编写复杂的滤波算法,可以直接获取高精度的姿态数据。
多传感器集成:在一个小尺寸封装内集成了加速度计、陀螺仪和地磁计,节省了空间和成本。
多种输出数据格式:支持欧拉角、四元数、旋转向量、线性加速度、重力向量以及原始传感器数据,满足不同应用的需求。
自动校准:内置智能校准功能,简化了传感器校准过程,提高了易用性。
多种通信接口:支持 I2C、UART 和 HID-I2C,兼容性强。
高精度和稳定性:通过传感器融合算法,提供比单个传感器更准确和稳定的姿态估计。
低功耗模式:支持多种低功耗模式,适用于电池供电的应用。
局限性
成本相对较高:相较于单个传感器或不带融合功能的IMU,BNO055 的成本通常更高。
内部算法黑盒:虽然内置融合算法方便,但其内部的具体实现对于用户而言是一个“黑盒”。如果需要高度定制化的融合算法或对算法进行微调,可能会受到限制。
磁场干扰敏感:尽管有融合算法,地磁计依然容易受到强磁场干扰,这会影响偏航角的准确性。在有强磁场干扰的环境下使用时,需要特别注意或采取措施(如磁屏蔽)。
校准要求:虽然是自动校准,但在某些应用场景下,确保传感器充分校准(特别是地磁计)仍需要用户进行特定的移动操作,这可能在部署时带来不便。
非GPS定位:BNO055 提供的是姿态和运动信息,不能直接提供绝对地理位置(经纬度),需要结合其他定位系统(如GPS或UWB)才能实现完整的定位功能。
BNO055 的编程实现(以Arduino为例)
在实际项目中,使用 BNO055 通常需要一个微控制器(如 Arduino、ESP32、STM32 等)来与其通信并读取数据。以下是一个基于 Arduino 平台使用 BNO055 的基本编程流程和示例概念。
硬件连接
典型的 BNO055 模块通常具有以下引脚:
VCC/VIN:电源输入(通常为 3.3V 或 5V,具体取决于模块)。
GND:地线。
SDA:I2C 数据线。
SCL:I2C 时钟线。
ADR(或 ADD):I2C 地址选择引脚,通过连接到 VCC 或 GND 来选择不同的 I2C 地址。
RST:复位引脚。
INT:中断输出引脚。
将 BNO055 的 VCC 和 GND 连接到 Arduino 对应的电源和地线。将 SDA 连接到 Arduino 的 A4(或 SDA 引脚),SCL 连接到 Arduino 的 A5(或 SCL 引脚)。
软件库
为了简化 BNO055 的编程,通常会使用专门的库。对于 Arduino 平台,Adafruit BNO055 库 是一个非常流行且功能完善的选择。
基本编程步骤
引入库:
C++
#include <Wire.h> // I2C 库
#include <Adafruit_Sensor.h> // Adafruit 传感器通用库
#include <Adafruit_BNO055.h> // BNO055 专用库
#include <utility/imumaths.h> // 用于欧拉角、四元数等数据结构创建 BNO055 对象:
C++
Adafruit_BNO055 bno = Adafruit_BNO055(); // 默认 I2C 地址
// 如果 BNO055 有不同的 I2C 地址,例如 0x29:
// Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x29);初始化 BNO055: 在
setup()
函数中,调用begin()
方法初始化传感器。C++
void setup(void) {
Serial.begin(9600);
Serial.println("BNO055 Test");
if(!bno.begin())
{
/* There was a problem detecting the BNO055 ... check your connections */
Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
while(1);
}
delay(1000); // 等待传感器稳定
// 可选:设置操作模式
// bno.setMode(OPERATION_MODE_NDOF); // 设置为九轴融合模式
}读取数据: 在
loop()
函数中,可以根据需要读取各种传感器数据。在实际应用中,你可能需要根据校准状态来决定是否使用传感器数据,或者提示用户进行校准。
读取欧拉角:
C++
sensors_event_t event;
bno.getEvent(&event);/* Display the floating point data */Serial.print("X: ");
Serial.print(event.orientation.x, 4); // 偏航 YawSerial.print(" Y: ");
Serial.print(event.orientation.y, 4); // 横滚 RollSerial.print(" Z: ");
Serial.print(event.orientation.z, 4); // 俯仰 PitchSerial.println("");读取四元数:
C++
imu::Quaternion quat = bno.getQuat();
Serial.print("qW: ");
Serial.print(quat.w(), 4);
Serial.print(" qX: ");
Serial.print(quat.x(), 4);
Serial.print(" qY: ");
Serial.print(quat.y(), 4);
Serial.print(" qZ: ");
Serial.print(quat.z(), 4);
Serial.println("");读取线性加速度:
C++
imu::Vector<3> linearAcc = bno.getLinearAcceleration();
Serial.print("LinAcc X: ");
Serial.print(linearAcc.x(), 4);
Serial.print(" Y: ");
Serial.print(linearAcc.y(), 4);
Serial.print(" Z: ");
Serial.print(linearAcc.z(), 4);
Serial.println("");读取校准状态:
C++
uint8_t system, gyro, accel, mag = 0;
bno.getCalibration(&system, &gyro, &accel, &mag);
Serial.print("CALIBRATION: Sys=");
Serial.print(system);
Serial.print(" Gyro=");
Serial.print(gyro);
Serial.print(" Accel=");
Serial.print(accel);
Serial.print(" Mag=");
Serial.println(mag);
重要注意事项
电源稳定性:BNO055 对电源的稳定性有一定要求,确保提供稳定的 3.3V 或 5V 电压。
I2C 上拉电阻:大多数 BNO055 模块自带上拉电阻,但如果遇到 I2C 通信问题,请检查是否需要外部上拉电阻。
校准:在使用 BNO055 的融合模式(特别是 NDOF 模式)时,进行充分的校准至关重要。校准后,校准数据会存储在内部的非易失性存储器中,即使断电也能保存。
数据速率:可以配置 BNO055 的数据输出速率,根据应用需求平衡功耗和响应速度。
坐标系:理解 BNO055 输出的坐标系对于正确解释数据非常重要。通常,BNO055 采用右手法则,X轴指向前方,Y轴指向左方,Z轴指向上方。但具体取决于模块的安装方向。
总结与展望
BNO055 作为一款智能9轴绝对定位传感器,通过其内置的传感器融合算法,极大地简化了姿态感知的开发。它将复杂的数学运算和校准过程封装在芯片内部,使得开发者可以更专注于应用层面的创新,而无需深究底层传感器融合的细节。从消费电子到工业自动化,从虚拟现实到机器人,BNO055 在众多领域展现出巨大的应用潜力。
尽管它有一些局限性,例如对磁场干扰的敏感性以及内部算法的“黑盒”性质,但其所带来的便捷性、集成度和高性能使其成为市场上极具竞争力的解决方案。随着物联网和人工智能技术的飞速发展,对精确姿态和运动感知的需求将持续增长。BNO055 及其后续产品无疑将继续在这些领域发挥关键作用,推动各种智能设备的进一步发展和普及。对于希望快速实现姿态感知功能的开发者而言,BNO055 仍然是构建创新应用时的强大工具。
责任编辑:David
【免责声明】
1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。
2、本文的引用仅供读者交流学习使用,不涉及商业目的。
3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。
4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。
拍明芯城拥有对此声明的最终解释权。