王昱顺 发表于 2024-6-28 09:22:29

开源BNO085陀螺仪读取数据

使用陀螺仪,一般来说主要是为了获得稳定的姿态角。姿态角里面,一般分为三种类型:横滚角,偏航角,俯仰角。这里先科普一下基本概念,三种姿态角,字面意思上就是:如果物体是一辆小车的话,俯仰角就是对应车头的抬起和下降,现实里面的状态就是上坡和下坡。横滚角就是车辆翻滚,现实里面状态就是车辆翻车。而偏航角就是车辆转向的角度,对应现实里面车辆的转弯操作。
而陀螺仪一般有分为六轴和九轴,这里的六轴就是指陀螺仪的三个方向(xyz)和加速度计的三个方向。一般所称呼的陀螺仪其实是指的这些集合体。而九轴则是多了磁力计的三个方向。这里面,唯一需要注意的就是六轴陀螺仪姿态角中,偏航角必然会飘。但是九轴陀螺仪的磁力计会受到磁场波动干扰(电机)。那么如果想要获得不被电机所干扰的稳定偏航角应该怎么做呢?答案就是换一个精度高一些的陀螺仪。这里,我经过市面上的比对,发现这款BNO085芯片。自身精度就很高,完全可以用来获得稳定的偏航角。而且,因为精度较高,其他的变量也可以用来做精细的调整和感知。因为这个陀螺仪本身的噪声就比较小,属于车规级的芯片。 下面就介绍一下如何读取这个芯片。这个芯片拥有自己的一套私有协议。可以运行在SPI,IIC和UART上,因为这个芯片本身的输出速率并不需要那么快。所以这里使用IIC进行读取。不过这个芯片因为需要连续多次的传输信息,且在数据位中定义了传输方向,所以相较于普通的IIC寄存器方式通讯,少了发送寄存器地址以及读操作时的重新START功能。这里使用的IIC读写都是经过更改的,读取寄存器部分是从官方的arduino例程中移植的,经过测试可以使用。




_奶咖君_ 发表于 2024-6-28 15:53:56

瞅了一眼齁贵~{:4_167:} 不过看着效果是真的好

王昱顺 发表于 2024-6-28 16:02:44

_奶咖君_ 发表于 2024-6-28 15:53
瞅了一眼齁贵~ 不过看着效果是真的好

这个精度是有用来动作捕捉的,车规级芯片嘛,一分钱一分货

_奶咖君_ 发表于 2024-6-28 16:09:19

王昱顺 发表于 2024-6-28 16:02
这个精度是有用来动作捕捉的,车规级芯片嘛,一分钱一分货

嗯嗯 ,,那倒是,,相比于动捕设备的价格,这点儿成本确实不算什么了

小涵子爸爸 发表于 2024-7-7 08:16:31

查了下BNO085的价格,默默的关闭了此网页

llyymm 发表于 2024-8-6 08:17:52

一分价钱一分货,贵有贵的道理,用到了再学习吧

yvkvdvhu 发表于 2025-2-8 00:06:59

佬,可以分享一下为什么你的bno085采集旋转矩阵用的是这个函数嘛“enableGameRotationVector()”

王昱顺 发表于 2025-2-8 00:21:21

yvkvdvhu 发表于 2025-2-8 00:06
佬,可以分享一下为什么你的bno085采集旋转矩阵用的是这个函数嘛“enableGameRotationVector()” ...

移植的官方arduino例程,他里面是这么用的,哈哈

yvkvdvhu 发表于 2025-2-8 01:07:41

王昱顺 发表于 2025-2-8 00:21
移植的官方arduino例程,他里面是这么用的,哈哈

我刚刚翻手册偶然发现说是磁场不稳定的情况下用这个模式更稳定
但是佬,我还有一个问题,就是,为什么程序不需要一直循环通过i2c读取bno085的寄存器的值就能一直更新四元数啊,因为我看那个更新四元数的getQuat的函数里面只引用了一个qToFloat函数,没有i2c_read之类的啊,然后我大概感觉这个芯片好像有一个报告的模式,难道这样就能一直发送数据?恕我见识太短,有点没听过啊

王昱顺 发表于 2025-2-8 10:08:33

yvkvdvhu 发表于 2025-2-8 01:07
我刚刚翻手册偶然发现说是磁场不稳定的情况下用这个模式更稳定
但是佬,我还有一个问题,就是,为什么程 ...

其实是一直循环读取的,不过封装的比较深你没找到就是了。
这个芯片使用的是i2c上自建了一套私有协议,并不是传统的i2c读取寄存器那一套
页: [1] 2
查看完整版本: 开源BNO085陀螺仪读取数据