主要内容

使用BNO055和蓝牙®无线数据流和使用传感器融合估计方向

本例展示了如何通过HC-05蓝牙®模块从博世BNO055 IMU传感器获取数据,并在传感器数据上使用9轴AHRS融合算法来计算设备的方向。该示例创建了一个图形,该图形在移动设备时更新。

BNO055是一个9轴传感器与加速度计,陀螺仪,和磁力计。加速度计测量加速度,陀螺仪测量角速度,磁力计测量磁场x -y -而且z -轴。

需要MathWorks®产品s manbetx 845

  • MATLAB®

  • Arduino万博1manbetx硬件的MATLAB支持包

  • 传感器融合和跟踪工具箱™或导航工具箱™

所需的硬件

  • Arduino®Uno

  • 博世BNO055传感器

  • HC-05蓝牙®模块

硬件连接

将BNO055传感器的SDA、SCL、GND和VCC引脚连接到Arduino®Uno板上对应的引脚:

  • Sda - a4

  • SCL - a5

  • VCC - + 3.3v

  • GND - GND

将HC-05模块的TX、RX、GND和VCC引脚连接到Arduino®Uno板上相应的引脚。下面的例子使用了连接:

  • TX -数字引脚0 (RX)

  • RX -数字引脚1 (TX)

  • VCC - 5v

  • GND - GND

确保传感器和蓝牙®模块连接完好。Arduino Uno推荐使用BNO055屏蔽(Arduino 9轴运动盾牌).看到传感器故障诊断调试传感器相关问题。

安装和配置Arduino用于蓝牙®通信

配置Arduino Uno板以使用蓝牙®进行通信arduinosetup命令从MATLAB命令提示符。看到安装和配置Arduino硬件有关如何配置Arduino板以通过蓝牙®进行通信的步骤。确保在安装过程中选中I2C库。

创建传感器对象

创建一个arduino对象。

A = arduino(“btspp: / / 001908361009”);

创建bno055中的传感器对象。OperatingModeamg的

Fs = 100;%采样率(Hz)Imu = bno055(a,“SampleRate”fs,“OutputFormat”“矩阵”“OperatingMode”amg的);

补偿硬铁和软铁变形

融合算法使用磁力计读数,需要补偿磁畸变,如硬铁畸变。硬铁变形是由产生磁场的材料产生的,导致响应面上的原点发生移动。这些扭曲可以通过从每个轴的磁力计读数中减去修正值来修正。为了求出修正值,

  1. 沿着每个轴将传感器从0旋转到360度。

  2. 使用magcal函数来获得修正系数。

这些修正值随着周围环境的变化而变化。

要获得硬铁和软铁变形的校正系数:

Ts = tic;stopTimer = 50;magReadings = [];(toc(ts) < stopTimer)将传感器沿x轴从0旋转到360度。*旋转2-3圈以提高准确度。对于其他轴,沿该轴旋转。[加速度,陀螺,mag] = read(imu);magreads = [magreads;mag];结束[A, b] = magcal(magreads);% A = 3x3矩阵软铁校正% b = 3x1矢量为硬铁校正

将BNO055传感器的轴与NED坐标对齐

本例中使用的传感器融合算法使用东北向下(NED)作为固定的父坐标系统。在NED参考系中,x -轴指向北方y -轴指向东方,而z -轴向下。根据算法的不同,北可能是磁北,也可能是真北。本例中的算法使用地磁北极。这里使用的算法期望对象中的所有传感器的轴都与NED约定对齐。传感器值必须颠倒,以便与NED坐标一致。

调整滤波器参数

本例中使用的算法,经过适当调整后,能够估计方向,并且对环境噪声源具有鲁棒性。您必须考虑使用传感器的情况,并相应地调优过滤器。看到调整滤波器参数有关调优过滤器参数的详细信息。

示例使用ahrsfilter演示方向估计。看到的,使用惯性传感器确定方向有关惯性融合算法的更多细节。

Accelerometer-Gyroscope-Magnetometer融合

姿态和航向参考系统(AHRS)由一个9轴系统组成,该系统使用加速度计、陀螺仪和磁力计来计算设备的方向。的ahrsfilter产生平稳变化的设备方向估计,同时正确估计北方方向。的ahrsfilter具有消除陀螺仪偏差的能力,也可以检测和拒绝轻度磁干扰。

下面的代码片段使用ahrsfilter系统对象来确定传感器的方向,并创建在移动传感器时更新的图形。传感器的初始位置应使设备x -轴指向磁北,这个装置y -轴是指向东方和设备z -轴是向下的。你可以用手机或指南针来确定地磁北极。

GyroscopeNoise, AccelerometerNoise和MagnetometerNoise使用以下公式从BNO055数据表确定% NoisePower = OutputNoisePowerDensityrms^2 *带宽GyroscopeNoiseBNO055 = 3.05e-06;%陀螺仪误差(方差值),单位(rad/s)^2加速度计noisebno055 = 67.53e-06;加速度计噪声(方差值),单位为(m/s^2)^2磁力计噪声ebno055 = 1;%磁强噪声(方差值),单位为uT^2查看器= helporientationviewer (“标题”, {“AHRS过滤”});保险丝= ahrsfilter(“SampleRate”imu。SampleRate,“GyroscopeNoise”GyroscopeNoiseBNO055,“AccelerometerNoise”AccelerometerNoiseBNO055,“MagnetometerNoise”, MagnetometerNoiseBNO055);stopTimer = 10;

执行下面的代码片段后,缓慢移动传感器,并检查图中的运动是否与传感器的运动匹配。增加了stopTimer值,如果你需要更长的时间跟踪方向。

Magx_correction = b(1);Magy_correction = b(2);Magz_correction = b(3);Ts = tic;(toc(ts) < stopTimer) [accel,陀螺,mag] = read(imu);按照NED约定对齐坐标加速度=[-加速度(:,1),加速度(:,2),加速度(:,3)];陀螺=[陀螺(:,1),-陀螺(:,2),-陀螺(:,3)];杂志= [(mag (: 1) -magx_correction)——(mag (:, 2) - magy_correction), - - - - - - (mag (:, 3) -magz_correction)] *;旋转器= FUSE(加速,陀螺,mag);J = numel(rotators) viewer(rotators(J));结束结束

如果传感器是静止的,在设备的初始位置x -轴指向地磁北极,这个装置y -轴指向东边和装置z -轴指向下方x -图中的轴将平行于正轴并与正轴对齐x设在,y -图中的轴将平行于正轴并与正轴对齐y-轴和z -图中的轴将平行于正轴并与正轴对齐z设在。

清理

当不再需要连接时,释放并清除对象

释放(imu);删除(imu);清晰;

可以尝试的事情

您可以使用其他传感器(如InvenSense MPU-6050、MPU-9250和STMicroelectronics LSM9DS1)尝试此示例。