返回列表
ROS2+智能导航小车 2024年5月23日 · 20 分钟

ROS2进阶 -- 硬件篇第三章第二节 -- ESP32 DEVKIT_V1读取MPU6050姿态数据

通过 ESP32 DEVKIT_V1 读取 MPU6050 六轴姿态数据

第二节我们的任务是使用ESP32 DEVKIT_V1读取MPU6050姿态数据

参考资料:

零件说明:ROS2进阶 – 硬件篇第一章 – 使用ESP32,树莓派5,ROS2 从零组装一台差速控制的机器人 环境配置:ROS2进阶 – 硬件篇第二章 – 使用 ESP32 DEVKIT_V1 开发板基于 Arduino IDE 的环境搭建教程 windows / ubuntu 双系统安装 第五节:ESP32读取MPU6050姿态数据

1. 本节需要准备的东西

ESP32,MPU6050, Arduino IDE 在这里插入图片描述

本节所使用的代码为05-esp32_MPU6050_module

2. 电路图

先将esp32通过USB连接到电脑上,然后将MPU6050和ESP32按照下图连接 在这里插入图片描述

接线说明: MPU6050 正极 +(红⾊) ESP32_Vin (3.3V) MPU6050 负极 -(⿊⾊) ESP32_Gnd (0V) 数据引脚 SCL (绿⾊) ESP32_GPIO22 (Output) 数据引脚 SDA (⻩⾊) ESP32_GPIO21 (Input

实物连接如下: 在这里插入图片描述

3. 代码

mpu6050.h

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;

struct MPU6050_DATA
{
  // 摄氏度
  double Temperature = 0.0;

  // 沿三轴的线加速度 米每二次方秒 m/s^2
  double Roll = 0.0;
  double Pitch = 0.0;
  double Yaw = 0.0;

  // 沿三轴的线加速度 米每二次方秒 m/s^2
  double Acc_X = 0.0;
  double Acc_Y = 0.0;
  double Acc_Z = 0.0;

  // 三轴角速度 弧度每秒 rad/s
  double Angle_Velocity_R = 0.0;
  double Angle_Velocity_P = 0.0;
  double Angle_Velocity_Y = 0.0;

}mpu6050_data;

void Init_mpu6050()
{
  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }
  Serial.println("MPU6050 Found!");
  /***********************************************
    Available AccelerometerRange:
      MPU6050_RANGE_2_G
      MPU6050_RANGE_4_G
      MPU6050_RANGE_8_G
      MPU6050_RANGE_16_G
  
    API:
      getAccelerometerRange()
      setAccelerometerRange()
  ***********************************************/
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);

  /***********************************************
    Available GyroRange:
      MPU6050_RANGE_250_DEG
      MPU6050_RANGE_500_DEG
      MPU6050_RANGE_1000_DEG
      MPU6050_RANGE_2000_DEG
  
    API:
      getGyroRange()
      setGyroRange()
  ***********************************************/
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);

  /***********************************************
    Available Bandwidth:
      MPU6050_BAND_5_HZ
      MPU6050_BAND_10_HZ
      MPU6050_BAND_21_HZ
      MPU6050_BAND_44_HZ
      MPU6050_BAND_94_HZ
      MPU6050_BAND_184_HZ
      MPU6050_BAND_260_HZ

    API:
      getFilterBandwidth()
      setFilterBandwidth()
  ***********************************************/
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
}


void ReadMPU6050()
{
  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);

  mpu6050_data.Temperature = temp.temperature;
  
  mpu6050_data.Acc_X = a.acceleration.x;
  mpu6050_data.Acc_Y = a.acceleration.y;
  mpu6050_data.Acc_Z = a.acceleration.z;

  mpu6050_data.Angle_Velocity_R = g.gyro.x; 
  mpu6050_data.Angle_Velocity_P = g.gyro.y; 
  mpu6050_data.Angle_Velocity_Y = g.gyro.z; 
}

esp32_mpu6050_test.ino

可视化线加速度曲线和可视化角速度曲线序分别查看

#include "mpu6050.h"

void setup() {
  Serial.begin(115200);
  Init_mpu6050();
}

void loop() {

  ReadMPU6050();
  // 串口绘图仪 可视化线加速度曲线
  // Serial.print("Acc_x:");
  // Serial.print(mpu6050_data.Acc_X);
  // Serial.print(",");
  // Serial.print("Acc_Y:");
  // Serial.print(mpu6050_data.Acc_Y);
  // Serial.print(",");
  // Serial.print("Acc_Z:");
  // Serial.println(mpu6050_data.Acc_Z);

  // 串口绘图仪 可视化角速度曲线
  Serial.print("Angle_velocity_R:");
  Serial.println(mpu6050_data.Angle_Velocity_R);
  Serial.print(",");
  Serial.print("Angle_velocity_P:");
  Serial.print(mpu6050_data.Angle_Velocity_P);
  Serial.print(",");
  Serial.print("Angle_velocity_Y:");
  Serial.println(mpu6050_data.Angle_Velocity_Y);

  delay(50);

}

4. 运行代码

首先安装MPU6050的库 在这里插入图片描述 在这里插入图片描述

打开上面下载的代码 在这里插入图片描述 选择开发板和端口号 点击验证和上传按钮 代码中的这部分分别是线加速度和角速度,可以打开一个分别观察 在这里插入图片描述 在这里插入图片描述 点击右上角的串口监视器和串口绘图仪,移动MPU6050会出现变化 在这里插入图片描述

5. 视频调试过程如下

mpu6050