电子元器件论坛
直播中

杨平

7年用户 1701经验值
私信 关注

如何在嵌入式上使用面向对象编程呢?

  一、理论介绍
  1.1.欧拉角转四元数
  欧拉角转四元数的公式我们在第六章入门篇第三节有介绍,这里回顾一下
2.jpg
  根据公式我们可以写出代码
2.jpg
  1.2 坐标系校准
  我们采用右手坐标系,接着我们依次来校准角度数据的方向。
  打开终端,点击RST,查看IMU数据。
  首先是X轴,我们让开发板上爱神丘比特的剑头指向自己,然后从右侧往左侧倾斜。
2.jpg
  可以看到此时X轴为正值,符合右手坐标系法则。
  接着是Y轴,平放,将箭头朝向自己的胸口,接着抬高板子,让箭头指向自己的头部,观察Y轴的变化。
2.jpg
  Y轴为负值,不符合右手坐标系法则,所以Y的值应该取一次负,使其为正。
  接着是Z轴,平放,将箭头朝向自己的胸口,然后逆时针旋转板子,观察数值变化。
2.jpg
  值为正,表示符合右手坐标系法则。
  你可能会问小鱼怎么确认怎样旋转是正,怎样旋转是负,首先要确认轴向,我们开发板的Z轴朝上,X轴朝前,此时Y轴应该朝左。接着摊开右手手掌,用大拇指朝向轴的方向,比如朝向X轴,然后握起手掌,那么你握的方向就是正方向。
  二、开始写代码
  新建工程example07_mpu6050_oop
2.jpg
  接着为其添加依赖
  修改platformio.ini
2.jpg
  接着在lib下新建IMU文件夹,并在文件夹下新建IMU.h和IMU.cpp
2.jpg
  IMU.h
2.jpg
3.jpg
4.jpg
5.jpg
  IMU.cpp
2.jpg
3.jpg
4.jpg
  main.cpp
  #include 《Arduino.h》
  #include “IMU.h”
  MPU6050 mpu(Wire); // 初始化MPU6050对象
  IMU imu(mpu); // 初始化IMU对象
  imu_t imu_data;
  unsigned long timer = 0;
  void setup()
  {
  Serial.begin(115200);
  imu.begin(18, 19); // 初始化IMU,使用18,19引脚
  }
  void loop()
  {
  imu.update();
  if ((millis() - timer) 》 100)
  {
  imu.getImuData(imu_data); // 获取IMU数据结构体
  Serial.printf(“imu:teuler(%f,%f,%f)n”,
  imu_data.angle_euler.x, imu_data.angle_euler.y, imu_data.angle_euler.z);
  Serial.printf(“imu:torientation(%f,%f,%f,%f)n”,
  imu_data.orientation.w, imu_data.orientation.x, imu_data.orientation.y, imu_data.orientation.z);
  timer = millis();
  }

  }
  对于代码的解释已经放到了注释之中。
  编译下载后,你将看到
2.jpg
  三、总结
  本节我们通过对MPU6050驱动的封装,学习了如何在嵌入式上使用面向对象编程的方法。





原作者:小鱼 鱼香ROS

更多回帖

发帖
×
20
完善资料,
赚取积分