BNO055 OpenMV上手初体验:第一次用这么高级的IMU传感器
BNO055是一款由Bosch Sensortec开发的9轴惯性传感器,能够提供三轴加速度计、三轴陀螺仪和三轴磁力计的数据。该传感器还集成了一个ARM Cortex-M0处理器和一个传感器数据融合引擎,用于处理和融合来自多个传感器的数据,并提供稳定和准确的定位、方向和姿态信息。
BNO055可以通过I2C和SPI接口与各种微控制器和单板计算机通信,支持多种输出模式和数据格式。该传感器还提供自动校准和自适应的传感器校准功能,可以显著提高系统精度和可靠性。
由于其高度集成的设计和先进的数据融合算法,BNO055广泛应用于航空航天、机器人、虚拟现实、智能家居和移动设备等领域,是一款性能稳定、易于使用和可靠性高的惯性传感器。
—— ChatGPT
这学期TDPS课程做巡线小车,其中一部分要求是小车顺着一条砖线开一段。实地考察后发现砖块和周围地面颜色不太好区分,于是决定在openMV机器视觉算法的基础上加一个惯导模块辅助导航,保证导航准确率。首先尝试了一下手头的几块钱一块的廉价传感器BMI160,但发现BMI160缺乏地磁传感器,能起到的辅助作用有限,再一看发现openMV官方推荐的传感器bno055能满足我们的需求。BNO055确实是高级玩意,甚至自带了一个MCU,价格大概一百多块钱。也有更便宜的解决方案,但是都需要自己适配,而BNO055已经有官方提供的第三方库可以用了,于是组内讨论之后决定直接一步到位上BNO055。
采购是另外一个同学负责,板子到货之后发现购买的是dfrobot家的SEN0374芯片,提供了以下几个接口(翻译自官方wiki):
丝印 | 功能描述 |
---|---|
VCC | + |
GND | - |
SCL | I2C 时钟 |
SDA | I2C 数据 |
INT | 中断接口 |
BOOT | LEAD模式选择接口 |
PS1 | 协议选择接口1 |
PS2 | 协议选择接口2 |
BL-IND | Lead Program Guide |
RST | 重制 |
ADDR | I2C 地址选择 |
PS1 和 PS2的具体功能如下:(默认均为0)(翻译自官方wiki):
PS1 | PS2 | 功能 |
---|---|---|
0 | 0 | 标准/快速I2C |
0 | 1 | HID OVER I2C |
1 | 0 | UART |
1 | 1 | 预留 |
看着挺花哨,实际使用的时候用I2C通信最少只用接VCC、GND、SCL、SDA四个脚就够了。SCL、SDA分别接上OpenMV的P4、P5,VCC接3V3,GND接地。传感器I2C默认地址是0X28(用官方提供的第三方库其实也不用管)。查阅datasheet发现这个芯片支持很多种工作模式,包括不同的功耗模式和不同的传感器模式,对于小车来说只需要用普通功耗模式和使用全部传感器的模式,输出传感器智能融合之后的数据,所以这些也都先不管。先看看能不能顺利拿到我们最关心的磁航向数据,直接上修改过的官方例程:
1 |
|
上电,简单摇晃传感器对地磁传感器进行校准后查看输出:
1 |
|
顺利拿到了我们需要的数据。
后续装车可能需要注意一下传感器校准的问题,目前的模式下启用了快速校准模式,但可能也需要随机移动传感器对其进行校准。Datasheet提到可以校准一次后存储校准数据以便以后上电之后使用,装车之后再看看有没有这个需要。