使用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
中的传感器对象。OperatingMode
amg的
.
Fs = 100;%采样率(Hz)Imu = bno055(a,“SampleRate”fs,“OutputFormat”,“矩阵”,“OperatingMode”,amg的);
补偿硬铁和软铁变形
融合算法使用磁力计读数,需要补偿磁畸变,如硬铁畸变。硬铁变形是由产生磁场的材料产生的,导致响应面上的原点发生移动。这些扭曲可以通过从每个轴的磁力计读数中减去修正值来修正。为了求出修正值,
沿着每个轴将传感器从0旋转到360度。
使用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)尝试此示例。