主要内容

阅读和情节BNO055传感器的实时数据NDOF模式

这个例子向您展示了如何阅读和绘制校准数据从一个博世Sensortec BNO055 9-axis绝对实时定位传感器。阅读取向的价值观直接从BNO055传感器,配置传感器NDOF操作模式。

BNO055 9-axis传感器提供一个集成加速度计、陀螺仪和磁强计。加速度计测量加速度、角速度陀螺仪的措施,和磁强计测量磁场沿着x - y和z轴。传感器的轴取决于传感器的制造。

所需的产品下载188bet金宝搏

  • MATLAB®

  • Arduino金宝app MATLAB支持包®硬件

所需的硬件

  • Arduino Uno

  • 博世BNO055传感器

硬件连接

连接SDA、sci、接地,VCC BNO055传感器相应的针的针Arduino硬件。这个示例使用一个Arduino Uno板用下面的连接:

  • SDA - A4

  • sci - A5

  • VCC——+ 5 v

  • 接地,接地

确保传感器连接完好无损。我们建议您使用一个原型盾牌和焊料避免松散连接的传感器,当传感器移动。调试传感器相关问题的信息,请参阅传感器故障诊断

创建连接BNO055传感器在NDOF模式

创建一个连接在NDOF BNO055传感器模式。确保您创建arduino将对象与图书馆“I2C”

arduinoObj = arduino (“COM7”,“Uno”,“库”,“I2C”);bno = bno055 (arduinoObj,“OperatingMode”,“ndof”);

校准BNO055传感器

校准传感器使用中描述的步骤校准BNO055传感器

%加速度计校准标志accCalib = 0;%陀螺仪刻度标记gyrCalib = 0;%磁强计校准标志magCalib = 0;流(”BNO055校准传感器。\ n”);(prod ([accCalib, gyrCalib magCalib]) ~ = 1)如果strcmpi (bno.readCalibrationStatus.Accelerometer“全部”)& & isequal (accCalib 0) accCalib = 1;流(的加速度计校准!。\ n”);结束如果strcmpi (bno.readCalibrationStatus.Gyroscope“全部”)& & isequal (gyrCalib 0) gyrCalib = 1;流(陀螺仪是校准!。\ n”);结束如果(strcmpi (bno.readCalibrationStatus.Magnetometer“全部”)& & isequal (magCalib,0) magCalib = 1;流(“磁强计校准!。\ n”);结束结束流(“BNO055传感器完全校准! \ n”);

读取传感器数据

阅读取向,加速度、角速度和BNO055传感器的磁场强度。

估计连续读之间的时间周期。

%提供秒的时间框架senseFrame = 60;%测量近似一个读周期的执行时间抽搐;readOrientation (bno);readAcceleration (bno);readAngularVelocity (bno);readMagneticField (bno);tDelta = toc;%的样本收集senseFrame时间框架numSamples =地板(senseFrame / tDelta);%的时间向量tVector = linspace (0 senseFrame numSamples);tCorrection = 0;recordedData = 0 (numSamples、3、4);

设置图处理情节的变化方向,加速,并在设备移动的磁场强度。

次要情节(1,1)%建立方位animatedline对象的句柄hAzimuth = animatedline (“颜色”,“r”,“线宽”,1.25);%创建句柄音高animatedline对象hPitch = animatedline (“颜色”,“k”,“线宽”,1.25);%创建句柄卷animatedline对象hRoll = animatedline (“颜色”,“b”,“线宽”,1.25);传奇(“方位(rad)”,“音高(rad)”,“滚(rad)”);ylabel (“欧拉角(rad)”),包含(“时间(s)”);标题(的阅读取向BNO055传感器的,“字形大小”12);轴([0 senseFrame -6.5 - 6.5])网格持有次要情节(1、2)%创建句柄轴加速度animatedline对象hAx = animatedline (“颜色”,“r”,“线宽”,1.25);%创建句柄轴加速度animatedline对象干草= animatedline (“颜色”,“k”,“线宽”,1.25);%创建z轴加速度animatedline对象的句柄热影响区= animatedline (“颜色”,“b”,“线宽”,1.25);传奇(“A_x (m / s ^ 2)”,“得+ (m / s ^ 2)”,“A_z (m / s ^ 2)”);ylabel (“加速度(m / s ^ 2)”),包含(“时间(s)”);标题(“从BNO055传感器读取加速度计值”,“字形大小”12);轴([0 senseFrame -30 30]);持有网格次要情节(4 1 3)%创建句柄轴角速度animatedline对象hVx = animatedline (“颜色”,“r”,“线宽”,1.25);%创建句柄轴角速度animatedline对象hVy = animatedline (“颜色”,“k”,“线宽”,1.25);%创建z轴角速度animatedline对象的句柄hVz = animatedline (“颜色”,“b”,“线宽”,1.25);传奇(' \ omega_x (rad / s) ',' \ omega_y (rad / s) ',' \ omega_z (rad / s) ');ylabel (“角速度(rad / s)”),包含(“时间(s)”);标题(“阅读从BNO055角速度值传感器”,“字形大小”12);轴([0 senseFrame -10 10]);持有网格次要情节(4、1、4)%创建句柄轴磁场animatedline对象hMagx = animatedline (“颜色”,“r”,“线宽”,1.25);%创建句柄轴磁场animatedline对象hMagy = animatedline (“颜色”,“k”,“线宽”,1.25);%创建z轴磁场animatedline对象的句柄hMagz = animatedline (“颜色”,“b”,“线宽”,1.5);传奇(' \ mu_x(\狗)',' \ mu_y(\狗)',' \ mu_z(\狗)');ylabel (“磁场(\狗)”),包含(“时间(s)”);标题(“从BNO055传感器读取磁强计值”,“字形大小”12);轴([0 senseFrame -50 50]);持有网格

阅读和绘制校准传感器的数据。

我= 1:numSamples%从传感器读取取向价值观(欧拉角)[sensorVal ~] = readOrientation (bno);%从传感器读取加速度值[AccelVal ~] = readAcceleration (bno);%从传感器读取角速度的值[AngVelVal ~] = readAngularVelocity (bno);%从传感器读取磁场强度值[MagVal ~] = readMagneticField (bno);抽搐;addpoints (hAzimuth tVector (i) + tCorrection sensorVal (1));addpoints (hPitch tVector (i) + tCorrection sensorVal (2));addpoints (hRoll tVector (i) + tCorrection sensorVal (3));addpoints (hAx tVector (i) + tCorrection AccelVal (1));addpoints(干草,tVector (i) + tCorrection AccelVal (2));addpoints (hAz tVector (i) + tCorrection AccelVal (3));addpoints (hVx tVector (i) + tCorrection AngVelVal (1));addpoints (hVy tVector (i) + tCorrection AngVelVal (2)); addpoints(hVz, tVector(i) + tCorrection, AngVelVal(3)); addpoints(hMagx, tVector(i) + tCorrection, MagVal(1)); addpoints(hMagy, tVector(i) + tCorrection, MagVal(2)); addpoints(hMagz, tVector(i) + tCorrection, MagVal(3)); recordedData(i, :, 1) = sensorVal; recordedData(i, :, 2) = AccelVal; recordedData(i, :, 3) = AngVelVal; recordedData(i, :, 4) = MagVal; tCorrection = toc; drawnow;结束

清理

当不再需要连接,释放和清晰的对象。

释放(bno);清晰的arduinoObj;清晰的bno;