电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>使用MPU9250获取实时位置

使用MPU9250获取实时位置

2023-02-01 | zip | 0.03 MB | 次下载 | 免费

资料介绍

描述

主条目:使用MPU9250获取实时位置

MPU-9250 是目前最先进的加速度计、陀螺仪和罗盘组合小尺寸传感器之一。它取代了流行的 MPU-9150,降低了功耗,改善了陀螺仪噪声和罗盘满量程范围性能。它具有许多高级功能,包括低通滤波、运动检测甚至可编程专用处理器

它内部包括 MPU-6500,其中包含一个 3 轴陀螺仪和一个 3 轴加速度计,以及AK8963 ,市场领先的 3 轴数字罗盘。MPU-9250 使用 16 位模数转换器 (ADC) 对所有 9 个轴进行数字化。

MPU-9250 是一款高性能加速度计、陀螺仪和磁力计选项,适用于手势识别、自平衡机器人手机、健身监测等应用,以及需要检测运动方向和幅度以及旋转的类似应用。阅读带有 Arduino 的 MPU9250 传感器一文中,我们介绍了该模块以及如何与其交互。以及,使用互补滤波器来获得相对位置。现在让我们看看 MPU9250 模块的全部功能:混合使用陀螺仪、加速度计和磁力计来获得实时准确位置。

陀螺仪

陀螺仪是一种用于测量或保持方位和角速度的装置。角速度以每秒度数(或弧度)为单位测量,是单位时间内物体旋转角度的变化。

加速度计

加速度计传感器是测量加速度的集成电路 (IC),加速度是单位时间内速度的变化。测量加速度可以获取物体倾斜和振动等信息

通常,g用作加速度的单位,相对于标准重力 (1g = 9.80665m/s2)。

磁力计

磁力计提供有关设备传感器检测到的磁场的信息,理论上可以暴露用户的位置。磁力计传感器以 μT(微特斯拉)为单位测量所有三个物理轴(x、y、z)的磁场。

接线图

按照下图连接图连接电源管脚和SDA、SCL管脚。

pYYBAGNOS7aAGaVsAADaa8uh5VY306.png
Arduino Nano 接线与 MPU9250
 

注意:该模块的工作电压为 3.3 伏,尽管某些版本具有允许将其连接到 5V 的稳压器。请务必在使用前检查您的模块规格

相对和绝对方向

相对方向是一个对象相对于另一个对象的位置和方向的恢复。根据方向,存在三种类型的角速率测量:

  • 偏航:从上方看物体时在平面上的水平旋转。
  • 俯仰:从前面看到的物体的垂直旋转。
  • 滚动:从前面看物体时的水平旋转。

使用平面的每个轴的图形表示:

poYBAGPXac2AI4skAAAaTaUqXBQ362.png
 

绝对方向是磁力计的常见用例之一,表示相对于地球平面的固定方向(固定到磁场矢量和重力矢量)。

噪音和错误

在理想情况下,具有应用公式的传感器数据将为我们提供精确和精确的角度。实际情况有所不同,因为某些因素会影响传感器输出。

通常,当您使用加速度计四处移动时,它会经历运动加速度。额外的加速度值可能会影响定向精度。另一个与加速度计相关的问题是噪声:电信号中不需要的干扰。加速度计能够测量任何角度,但是它的读数有噪声并且即使使用低通滤波器也有一定的误差范围。

另一方面,陀螺仪存在偏置不稳定性,其中陀螺仪的初始零读数会由于设备内固有缺陷和噪声的集成而导致随时间漂移。

在需要通过传感器融合进行绝对定位的应用中,磁力计对于校正陀螺仪漂移是绝对必要的。磁力计问题是它们的非理想响应面和位置依赖性。

获取实时位置

有不同的算法来解决错误和噪声问题。我们将使用四元数。四元数用于纯数学,但在应用数学中也有实际用途,特别是涉及三维旋转的计算。它们可以与其他旋转方法一起使用,例如欧拉角和旋转矩阵,或者作为它们的替代方法,具体取决于应用程序。MPU9250 库的使用使我们摆脱了对四元数所有复杂性的理解,并且实现已经完成。

磁偏角

应根据您要获得准确数据的位置来设置磁偏角。您可以在此处找到您所在城市的磁偏角。

poYBAGPXadCAKmrjAAAPdOX5axw176.png
 

请注意,此处的偏角目前为 1˚ 38'。提供的格式需要转换为代码的十进制度数。每度有60分钟,其中38分钟为度的38/60,即0.63。1˚ 38' 的十进制格式的赤纬为 1.63。使用您所在位置的偏角更新代码MAGNETIC_DECLINATION常量。

磁性校准

有一种简单的方法可以自动校准并纠正磁力计数据的一些错误。以八字形模式缓慢移动传感器,并跟踪在六个主要方向中的每一个方向上测量的最小和最大场。可以从后续数据中减去平均值,这相当于将响应曲面重新置于原点的中心该库具有自动为我们执行的校准功能,我们只需要在校准开始时将传感器移动成 8 字形即可。

为 MPU9250 安装 Arduino 库

要与 MPU9250 模块交互,我们可以使用原始实现或利用现有库。该库提供了一个与模块通信接口,为我们节省了大量时间。另一个优势是多年来由社区测试和改进的健壮代码库。我们建议使用该库并避免从头开始实施所有内容。它可以从我们的官方存储库下载

要导入库,请打开 Arduino IDE,转到 Sketch > Include Library > Add.ZIP Library 并选择从我们的 GitHub 存储库下载的库文件。

poYBAGNOS6-AXK2tAABgOEnpXcY744.png
将外部库包含到 Arduino IDE
 

然后你可以简单地使用include语句:

#include "MPU9250.h"

它将包括具有预定义函数的库,以与 MPU9250 交互。

Arduino代码

下面的代码很简单,因为我们使用了一个库,该库提供了与 MPU9250 模块交互的清晰接口。在设置函数中,我们配置和校准模块并在循环中每隔INTERVAL_MS_PRINT毫秒打印一次输出。

#include "MPU9250.h"

#define MPU9250_IMU_ADDRESS 0x68

#define MAGNETIC_DECLINATION 1.63 // To be defined by user
#define INTERVAL_MS_PRINT 1000

MPU9250 mpu;

unsigned long lastPrintMillis = 0;

void setup()
{
  Serial.begin(115200);
  Wire.begin();

  Serial.println("Starting...");

  MPU9250Setting setting;

  // Sample rate must be at least 2x DLPF rate
  setting.accel_fs_sel = ACCEL_FS_SEL::A16G;
  setting.gyro_fs_sel = GYRO_FS_SEL::G1000DPS;
  setting.mag_output_bits = MAG_OUTPUT_BITS::M16BITS;
  setting.fifo_sample_rate = FIFO_SAMPLE_RATE::SMPL_250HZ;
  setting.gyro_fchoice = 0x03;
  setting.gyro_dlpf_cfg = GYRO_DLPF_CFG::DLPF_20HZ;
  setting.accel_fchoice = 0x01;
  setting.accel_dlpf_cfg = ACCEL_DLPF_CFG::DLPF_45HZ;

  mpu.setup(MPU9250_IMU_ADDRESS, setting);

  mpu.setMagneticDeclination(MAGNETIC_DECLINATION);
  mpu.selectFilter(QuatFilterSel::MADGWICK);
  mpu.setFilterIterations(15);

  Serial.println("Calibration will start in 5sec.");
  Serial.println("Please leave the device still on the flat plane.");
  delay(5000);

  Serial.println("Calibrating...");
  mpu.calibrateAccelGyro();

  Serial.println("Magnetometer calibration will start in 5sec.");
  Serial.println("Please Wave device in a figure eight until done.");
  delay(5000);

  Serial.println("Calibrating...");
  mpu.calibrateMag();

  Serial.println("Ready!");
}

void loop()
{
  unsigned long currentMillis = millis();

  if (mpu.update() && currentMillis - lastPrintMillis > INTERVAL_MS_PRINT) {
    Serial.print("TEMP:\t");
    Serial.print(mpu.getTemperature(), 2);
    Serial.print("\xC2\xB0"); //Print degree symbol
    Serial.print("C");
    Serial.println();

    Serial.print("Pitch:\t");
    Serial.print(mpu.getPitch());
    Serial.print("\xC2\xB0"); //Print degree symbol
    Serial.println();

    Serial.print("Roll:\t");
    Serial.print(mpu.getRoll());
    Serial.print("\xC2\xB0"); //Print degree symbol
    Serial.println();

    Serial.print("Yaw:\t");
    Serial.print(mpu.getYaw());
    Serial.print("\xC2\xB0"); //Print degree symbol
    Serial.println();

    Serial.println();

    lastPrintMillis = currentMillis;
  }
}

测试

串行监视器将每INTERVAL_MS_PRINT毫秒打印一次最后可用的传感器数据(在上面的示例中,每秒一次),它应该类似于:

pYYBAGPXadSAeInyAAAavl-bBHg264.png
测试输出
 

通常方向绘制在物理模块上,因此您可以轻松检测俯仰和滚动。

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费