当前位置:   article > 正文

esp32 mpu6050 加速度计姿态解算程序_mpu6050姿态解算代码

mpu6050姿态解算代码
  1. #include <Adafruit_MPU6050.h>
  2. #include <Adafruit_Sensor.h>
  3. #include <Wire.h>
  4. Adafruit_MPU6050 mpu;
  5. float i;//计算偏移量时的循环次数
  6. float ax_offset = 0, ay_offset = 0; //x,y轴的加速度偏移量
  7. float gx_offset = 0, gy_offset = 0; //x,y轴的角速度偏移量
  8. float rad2deg = 57.29578;
  9. float roll, pitch; //储存角度
  10. void setup(void) {
  11. //定义I2C的接口
  12. Wire.begin(23, 5);
  13. //打开串口
  14. Serial.begin(115200);
  15. delay(100); // will pause Zero, Leonardo, etc until serial console opens
  16. //初始化mpu6050
  17. while (!mpu.begin()) {
  18. Serial.println("Failed to find MPU6050 chip");
  19. }
  20. Serial.println("MPU6050 Found!");
  21. mpu.setAccelerometerRange(MPU6050_RANGE_2_G);//加速度量程±2G
  22. mpu.setGyroRange(MPU6050_RANGE_250_DEG);//角速度量程±250°/s
  23. mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);//采样频率21Hz
  24. //计算偏移量
  25. for (i = 1; i <= 2000; i++) {
  26. sensors_event_t a, g, temp;
  27. mpu.getEvent(&a, &g, &temp);//获取加速度、角速度、温度
  28. ax_offset = ax_offset + a.acceleration.x;//计算x轴加速度的偏移总量
  29. ay_offset = ay_offset + a.acceleration.y;//计算y轴加速度的偏移总量
  30. }
  31. ax_offset = ax_offset / 2000; //计算x轴加速度的偏移量
  32. ay_offset = ay_offset / 2000; //计算y轴加速度的偏移量
  33. delay(100);
  34. }
  35. void loop() {
  36. /* Get new sensor events with the readings */
  37. sensors_event_t a, g, temp;
  38. mpu.getEvent(&a, &g, &temp);//获取加速度、角速度、温度
  39. /*减去偏移量并根据加速度计算角度*/
  40. //roll角度
  41. roll = atan((a.acceleration.y - ay_offset) / (a.acceleration.z)) * rad2deg;
  42. //pitch角度
  43. pitch = atan((a.acceleration.x - ax_offset) / sqrt(sq(a.acceleration.y - ay_offset) + sq(a.acceleration.z))) * rad2deg;
  44. //打印角度
  45. Serial.print("roll: ");
  46. Serial.print(roll);
  47. Serial.print(",");
  48. Serial.print("pitch: ");
  49. Serial.println(pitch);
  50. //delay(33);
  51. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号